Zitat von
mkinzler:
Dann übergebe mal explizit die Adressen der Parameter
Hmm, Hilfestellung ?
Jede Funktion aus der
Dll wird so übergeben:
Delphi-Quellcode:
type
TFNGetAFList = function(var buf:Single; len: Integer):Boolean;stdcall;
TFNGetRDSText = function(const buf: string; var len: Integer): Boolean; stdcall;
...
...
var
GetAFList : TFNGetAFList = nil;
GetRDSText : TFNGetRDSText = nil;
..
..
function LoadDll: Boolean;
begin
result := False;
RadioLib := LoadLibrary('XYZ.Dll');
if RadioLib <> 0 then
begin
@GetAFList := GetProcAddress(RadioLib, 'VB_GetAFList');
@GetRDSText := GetProcAddress(RadioLib, 'VB_GetRDSText');
...
...
result := True;
end;
end;
Hier habe ich mal 2 Funktionen , die GetRDSText funzt, die GetAFList nicht.
Der umgewandelte VB-Code von GetRDSText sieht so aus:
Delphi-Quellcode:
function WGetRDSText:String;
var
sBuffer,Text :String;
iBufferLen :Integer;
begin
Result := '';
SetLength(sBuffer, 256);
If GetRDSText(sBuffer,iBufferLen) then
Text := trim(copy(sBuffer,1,iBufferLen));
Result := Text;
end;
hier der VB-Code dazu:
Delphi-Quellcode:
Public Function WVB_GetRDSText() As String
Dim sBuffer As String * 256
Dim iBufferLen As Integer
Dim lRet As Long
If (VB_GetRDSText(sBuffer, iBufferLen)) Then
WVB_GetRDSText = Left(sBuffer, iBufferLen)
End If
End Function
und der von GetAFList
Delphi-Quellcode:
function WGetAFList:
String;
var
aflist :
array of Single;
arysize: Integer;
LoopArr: Integer;
begin
Result := '
';
arysize := 25;
SetLength(aflist, arysize-1);
If GetAFList(aflist[0], arysize)
then <---- hier kommt die
exception !
SetLength(aflist, arysize-1);
For LoopArr := Low(aflist)
To high(aflist)
do
Result := FloattoStr(aflist[LoopArr]);
End;
sowie der VB-Code:
Delphi-Quellcode:
Public Function WVB_GetAFList() As Single()
Dim aflist() As Single
Dim arysize As Long
Dim LoopArr As Single
' Create the array
arysize = 25
ReDim aflist(arysize - 1) As Single
If (VB_GetAFList(aflist(0), arysize)) Then
ReDim Preserve aflist(arysize - 1)
For LoopArr = 0 To UBound(aflist)
Debug.Print "AFLIST = " & aflist(LoopArr)
Next LoopArr
End If
WVB_GetAFList = aflist
End Function
oder meinst etwas anderes ?
Gruß, bluescreen
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz