Einzelnen Beitrag anzeigen

bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 18:31
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
  Mit Zitat antworten Zitat