AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei Übersetzung VB to Delphi

Ein Thema von bluescreen25 · begonnen am 22. Jan 2009 · letzter Beitrag vom 23. Jan 2009
Antwort Antwort
Seite 2 von 4     12 34      
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
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 20:13
Code:
Public Declare Function VB_GetAFList Lib "USBRadio.dll" (ByRef ary As Single, ByRef size As Long) As Boolean
ByRef ist in Delphi grundsätzlich 'var'
also
TFNGetAFList = function(var ary:Single; var size: Integer):Bool;stdcall; gruss Emil
  Mit Zitat antworten Zitat
bluescreen25

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

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 20:27
Zitat von EWeiss:
Code:
Public Declare Function VB_GetAFList Lib "USBRadio.dll" (ByRef ary As Single, ByRef size As Long) As Boolean
ByRef ist in Delphi grundsätzlich 'var'
also
TFNGetAFList = function(var ary:Single; var size: Integer):Bool;stdcall; gruss Emil
genau das wars ! supi

hiermit habe ich noch ein Prob:

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
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 20:30
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.

http://www.jwrider.com/lab/BAS2PAS.htm

Boolean kannst mit Bool ersetzen 1 Byte reicht dafür

gruss Emil
  Mit Zitat antworten Zitat
bluescreen25

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

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 20:38
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
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 20:39
ps und eon ist kein Byref also das var wech da

Zitat:
BYVAL
To pass an argument by value, don't use Var or Const in parameter declaration.
Zitat:
BYREF
To pass an argument by reference, Var needs to be placed in front of the parameter declaration.
EDIT:
Delphi-Quellcode:
            
For LoopArr = 0 To UBound(aflist1)
  Debug.Print "AFLIST = " & aflist1(LoopArr)
Next LoopArr
            
WVB_GetEon1 = aflist1
Nur zur Info !
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
Result := floattostr(aflist1[LoopArr]); sein.
Denke mal Result := aflist1;

gruss Emil
  Mit Zitat antworten Zitat
bluescreen25

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

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 20:55
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
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 21:05
Zitat von bluescreen25:
Danke, aber das allein langt net um die exception aufzuheben.
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
Ist schwer den Fehler zu finden wenn man die Hardware bzw.. nicht über ein Beispiel verfügt.
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
  Mit Zitat antworten Zitat
bluescreen25

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

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 21:14
Zitat von EWeiss:
Zitat von bluescreen25:
Danke, aber das allein langt net um die exception aufzuheben.
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
Ist schwer den Fehler zu finden wenn man die Hardware bzw.. nicht über ein Beispiel verfügt.
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
Im VB-Code ist das mit der Ausgabe so, im Delphi-Code nehme ich über Result die Werte auf und verwende diese weiter.

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..
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

Re: Hilfe bei Übersetzung VB to Delphi

  Alt 22. Jan 2009, 21:19
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:
    pieon1 = tpieon1
    ptyeon1 = tptyeon1
    taeon1 = ttaeon1
    
    pseon1 = Left(pseontemp, 8)
deshalb sind sie ja auch als var declariert.

EDIT:
Deaktiviere doch einfach mal im VB Sample die schleife dann wirst sehn ob es noch funktioniert.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz