![]() |
Re: Hilfe bei Übersetzung VB to Delphi
Zitat:
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:
hier der VB-Code dazu:
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;
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:
sowie der VB-Code:
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;
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 |
Re: Hilfe bei Übersetzung VB to Delphi
Code:
ByRef ist in Delphi grundsätzlich 'var'
Public Declare Function VB_GetAFList Lib "USBRadio.dll" (ByRef ary As Single, ByRef size As Long) As Boolean
also
Delphi-Quellcode:
gruss Emil
TFNGetAFList = function(var ary:Single; var size: Integer):Bool;stdcall;
|
Re: Hilfe bei Übersetzung VB to Delphi
Zitat:
hiermit habe ich noch ein Prob:
Delphi-Quellcode:
TFNGetEON = function(var buf:Single;var len,pi,pty:Integer;var ps:String;var ta:Boolean;var eon:Integer):Boolean;stdcall;
Delphi-Quellcode:
function WGetEON1:String;
var aflist1 : array of Single; arysize: Integer; LoopArr: Integer; pseontemp: String; ttaeon1 :Boolean; tptyeon1:Integer; tpieon1 :Integer; begin Result := ''; SetLength(pseontemp,8); arysize := 25; SetLength(aflist1, arysize-1); if GetEON(aflist1[0],arysize,tpieon1,tptyeon1,pseontemp,ttaeon1,0) then SetLength(aflist1, arysize-1); For LoopArr := Low(aflist1) To high(aflist1) do Result := floattostr(aflist1[LoopArr]); End; ps: dein messenger möchte mich nicht -- zonealarm |
Re: Hilfe bei Übersetzung VB to Delphi
Wie ist die Declaration von Vb 'GetEON' ?
Hier noch ein link der dir unterumständen bei übersetzungen helfen kann. Ist zwar schon was älter aber fast noch alles zutreffend. ![]() Boolean kannst mit Bool ersetzen 1 Byte reicht dafür ;) gruss Emil |
Re: Hilfe bei Übersetzung VB to Delphi
Delphi-Quellcode:
Public Declare Function VB_GetEon Lib "USBRadio.dll" (ByRef ary As Single, ByRef size As Long, ByRef pi As Long, ByRef pty As Integer, ByVal ps As String, ByRef ta As Boolean, ByVal eon As Long) As Boolean
Delphi-Quellcode:
Public Function WVB_GetEon1() As Single()
Dim aflist1() As Single Dim arysize As Long Dim LoopArr As Single Dim pseontemp As String * 8 Dim ttaeon1 As Boolean Dim tptyeon1 As Integer Dim tpieon1 As Long ' Create the array arysize = 25 ReDim aflist1(arysize - 1) As Single If (VB_GetEon(aflist1(0), arysize, tpieon1, tptyeon1, pseontemp, ttaeon1, 0)) Then ReDim Preserve aflist1(arysize - 1) For LoopArr = 0 To UBound(aflist1) Debug.Print "AFLIST = " & aflist1(LoopArr) Next LoopArr WVB_GetEon1 = aflist1 End If pieon1 = tpieon1 ptyeon1 = tptyeon1 taeon1 = ttaeon1 pseon1 = Left(pseontemp, 8) End Function gruß, bluescreen |
Re: Hilfe bei Übersetzung VB to Delphi
ps und eon ist kein Byref also das var wech da ;)
Zitat:
Zitat:
Delphi-Quellcode:
Nur zur Info !For LoopArr = 0 To UBound(aflist1) Debug.Print "AFLIST = " & aflist1(LoopArr) Next LoopArr WVB_GetEon1 = aflist1 Die Schleife tut ja eigentlich nichts oder ? Hier wird nur ähnlich 'ShowMessage' ausgegeben welche werte aflist[LooArr] enthält. Daher kann die Rückgabe auch nicht
Delphi-Quellcode:
sein.
Result := floattostr(aflist1[LoopArr]);
Denke mal Result := aflist1; gruss Emil |
Re: Hilfe bei Übersetzung VB to Delphi
Danke, aber das allein langt net um die exception aufzuheben.
Result ist hier wie bei der GetAFList gelöst, das funzt. Bekomme laufend neue AF Frequenzen übergeben. Die GetEON arbeitet eigendlich ähnlich, sollte EON-Daten bekommen, sind halt noch ein paar Parameter mehr die man zurückbekommt. Leider da die exception. Gruß, bluescreen |
Re: Hilfe bei Übersetzung VB to Delphi
Zitat:
Muss aber widersprechen die Rückgabe ist nicht korrekt. Die schleife tut nichts kannst mir glauben. Außer über Debug.Print (ähnlich ShowMessage) die werte im Debuger Fenster auszugeben. Ist also Nutzlos. gruss Emil |
Re: Hilfe bei Übersetzung VB to Delphi
Zitat:
Und wie muss ich mir in VB das hier vorstellen ? Ist das net Result ? Hier wird wohl kein Index aus dem Array übergeben sondern das array komplett ? WVB_GetEon1 = aflist1 Zur Info: Im VB-Code werden die Daten direkt verarbeitet, in meinem Code wird eine eigene dll als wrapper genutzt, in der ein Callback zu meinem Programm sowie das Abrufen der anderen dll geschieht. Zur Kontrolle habe ich erstmal versucht die Daten in meinem Programm sichtbar zu bekommen, dann will ich später diese in meiner dll verarbeiten, so das nur noch die aufgearbeiteten Funktionen/ Daten über das Callback kommen.... Gruß, bluescreen PS ich habe mal die Result-Sache ausgeklammert....es liegt am GetEON-Aufruf.....scheint noch was mit dem Aufruf der Funktion aus der dll nicht zu stimmen.. |
Re: Hilfe bei Übersetzung VB to Delphi
WVB_GetEon1 = aflist1 sagt dir ob der aufruf Erfolgreich war.
Nicht mehr und nicht weniger. Er gibt dir also BOOL zurück oder ? Ist der aufruf erfolgreich dann bekommst du über die 'var' Parameter die eigenschaften (werte) zurückgeliefert. Von diesen
Delphi-Quellcode:
deshalb sind sie ja auch als var declariert.
pieon1 = tpieon1
ptyeon1 = tptyeon1 taeon1 = ttaeon1 pseon1 = Left(pseontemp, 8) EDIT: Deaktiviere doch einfach mal im VB Sample die schleife dann wirst sehn ob es noch funktioniert. gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz