Habe dir das mal schnell zusammen geklopft..
Alle Strings (PAnsiChars) werden aus der
DLL von der const AnsiString_Vektor_GLOBAL an VBA(VB) geschickt.
ShareMem ist wohl hier nicht nötig..
Das ist alles..
Delphi-Quellcode:
library Delphi_String_for_Excel_Test;
uses ShareMem, SysUtils, Classes;
{$R *.res}
const
AnsiString_Vektor_GLOBAL: Array [0..3] of PAnsiChar =
('1: Erster String',
'2: Das ist der ZWEITE String!',
'3: ...und hier ist der DRITTE!',
'4: Schlußlicht-String...');
function PAnsiChar_To_Excel(Delimiter: AnsiChar = ';'): PAnsiChar; stdcall;
var
IntI: Integer;
erg: AnsiString;
begin
for IntI := 0 to 3 do
begin
erg := erg + AnsiString(AnsiString_Vektor_GLOBAL[IntI]) + Delimiter;
erg := copy(erg, 1, length(erg));
end;
result := PAnsiChar(erg);
end;
exports
PAnsiChar_To_Excel;
begin
end.
VBA..
Module..
Code:
Public Declare Function PAnsiChar_To_Excel Lib "Delphi_String_for_Excel_Test" ( _
Optional ByVal Delimiter As Byte = 59 _
) As Long
Form..
Code:
Option Explicit
Private Sub cmdGet_Click()
Dim IntI As Integer
Dim flist As String
Dim uB As Integer
Dim LngP As Long
Dim alist() As String
Dim Delimiter As Byte
ListInput.Clear
Delimiter = 124 ' >>> Default ohne Angabe = 59 = ";"
LngP = PAnsiChar_To_Excel(Delimiter) ' >>> "|"
flist = VBStrFromAnsiPtr(LngP)
alist = Split(flist, "|")
If flist > "" Then
uB = UBound(alist)
For IntI = 0 To uB
ListInput.AddItem alist(IntI)
Next
End If
End Sub
gruss