Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hilfe bei Übersetzung VB to Delphi (https://www.delphipraxis.net/128001-hilfe-bei-uebersetzung-vbulletin-delphi.html)

bluescreen25 22. Jan 2009 20:19

Re: Hilfe bei Übersetzung VB to Delphi
 
Sieht jetzt so aus:

Delphi-Quellcode:
TFNGetEON            = function(var buf:Single;var len,pi,pty:Integer;ps:String;var ta:Bool;eon:Integer):Boolean;stdcall;

Delphi-Quellcode:
function WGetEON1:String;
var
  aflist1 : array of Single;
  arysize: Integer;
  LoopArr: Integer;
  pseontemp: String;
  ttaeon1 :Bool;
  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;
Hmm, ich weiss auch net weiter....komisch, bei GetAFList wars mit deinen Änderungen sofort gut !

Gruß, bluescreen

EWeiss 22. Jan 2009 20:23

Re: Hilfe bei Übersetzung VB to Delphi
 
var len,pi,pty ???

Kann sein das die Funktion in VB das nicht aktzeptiert.
Versuche jede Variable seperat zu definieren nicht getrennt durch Komma.

Delphi-Quellcode:
var len:Integer; var pi:Integer; var pty:Integer;
gruss Emil

bluescreen25 22. Jan 2009 20:28

Re: Hilfe bei Übersetzung VB to Delphi
 
Zitat:

Zitat von EWeiss
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

Ja OK, das habe ich jetzt verstanden, also hat der VB-Coder hier nur die Vars gefüllt und direkt verwertet.
Die GetEON bringt im array die Frequenzen, sowie in den Vars dazu gehörigige Werte, die man ebenso nutzen kann.

Mein Problem ist leider immer noch der Aufruf...ich bekomme kein True zurück, sondern direkt die exception.....
Ist nicht ganz so leicht, von der Anwendung über eine dll zu einer weiteren zu debuggen....

Gruß, bluescreen

bluescreen25 22. Jan 2009 20:33

Re: Hilfe bei Übersetzung VB to Delphi
 
Zitat:

Zitat von EWeiss
var len,pi,pty ???

Kann sein das die Funktion in VB das nicht aktzeptiert.
Versuche jede Variable seperat zu definieren nicht getrennt durch Komma.

Delphi-Quellcode:
var len:Integer; var pi:Integer; var pty:Integer;
gruss Emil

leider auch net...übrigens die dll ist in C++ geschrieben, darin sind extra für VB einige exports gemacht worden.
Den Source habe ich auch.

Delphi-Quellcode:
USBRADIO_API bool __stdcall      VB_GetEon(float* ary, int* arysize, unsigned int *pi, short *pty, char ps[9], bool *ta, unsigned int eon);
Der VB-Code ist auch nur ein Wrapper...

Gruß, bluescreen

EWeiss 22. Jan 2009 20:39

Re: Hilfe bei Übersetzung VB to Delphi
 
Hmmm ...
Delphi-Quellcode:
if GetEON(aflist1[0],arysize,tpieon1,tptyeon1,pseontemp,ttaeon1,0) then
Wenn ich das richtig interpretiere sollte Result dir den wert von aflist1[0] zurückgeben wenn der aufruf GetEON = True erfolgreich war.
Plus der werte die in tpieon1 abhängig von aflist1[0] enthalten sind.

Weis nicht ob in der DLL result = @aflist1 als VarPtr deklariert ist.
Das kannst du nur testen.

EDIT:
Davon abgesehen du deklarierst überall Boolean ..
Warum ? Bool wie in c++ das reicht.
Nur in VB benötigt man 2 Byte und da gibt es kein Bool.

gruss Emil

bluescreen25 22. Jan 2009 20:53

Re: Hilfe bei Übersetzung VB to Delphi
 
Delphi-Quellcode:
USBRADIO_API bool __stdcall      VB_GetEon(float* ary, int* arysize, unsigned int *pi, short * pty, char ps[9], bool *ta, unsigned int eon)
{
   if(eon < 0 || eon > 4)
      return false;
   
   RDSData rds_data;
   std::map<double, double>::iterator iter;
   std::vector<rds_EON_struct>::iterator EONMapIter;
   int i;
   if (fmRadioDevice.GetRDSData(&rds_data))
   {
      for(EONMapIter = rds_data.EONMap.begin(), i = 0; EONMapIter != rds_data.EONMap.end(); EONMapIter++, i++)
         if( i == eon)
            break;
      if(EONMapIter != rds_data.EONMap.end())
      {
         if(EONMapIter->m_mappedFreq2.size() > 0)
         {
            int cnt = 0;
            for(iter = EONMapIter->m_mappedFreq2.begin(); iter != EONMapIter->m_mappedFreq2.end(); iter++)
            {
               ary[cnt] = iter->first;
               cnt++;
               if (cnt > *arysize - 1)
                  break;
            }
            *arysize = EONMapIter->m_mappedFreq2.size();
         }
         *pi = EONMapIter->m_pi;
         *pty = EONMapIter->m_pty_ON;
         EONMapIter->m_psText = "";
         for(i = 0; i < 8; i++)
         {
            if(!EONMapIter->m_ps[i])
               EONMapIter->m_ps[i] = ' ';
            EONMapIter->m_psText += EONMapIter->m_ps[i];
         }
         strncpy(ps,EONMapIter->m_psText.c_str(),strlen(EONMapIter->m_psText.c_str()));
         *ta = EONMapIter->m_ta_ON;
      }
   }
   return true;
}
hmm kannst du etwas erkennen ?

EWeiss 22. Jan 2009 20:58

Re: Hilfe bei Übersetzung VB to Delphi
 
Zitat:

hmm kannst du etwas erkennen ?
Leider nicht sorry.

gruss Emil

bluescreen25 22. Jan 2009 21:14

Re: Hilfe bei Übersetzung VB to Delphi
 
Zitat:

Zitat von EWeiss
Zitat:

hmm kannst du etwas erkennen ?
Leider nicht sorry.

gruss Emil

trotzdem vielen dank..!


die zugriffsverletung ist bei adresse 00000000000 sowie beim lesen an adresse 00000000000

gruß, bluescreen

mkinzler 22. Jan 2009 21:15

Re: Hilfe bei Übersetzung VB to Delphi
 
Ein Zeiger scheint Nil zu sein

bluescreen25 22. Jan 2009 21:24

Re: Hilfe bei Übersetzung VB to Delphi
 
Zitat:

Zitat von mkinzler
Ein Zeiger scheint Nil zu sein

was kann ich prüfen ? weiss nicht mehr weiter....

gruß, bluescreen


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.
Seite 3 von 4     123 4      

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