Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Passender Datentyp zu C-DLL (https://www.delphipraxis.net/136543-passender-datentyp-zu-c-dll.html)

Hepdepaddel 2. Jul 2009 15:11


Passender Datentyp zu C-DLL
 
Moin Moin,

nachdem ich eine in C verfasste DLL eingebunden habe

Delphi-Quellcode:
function bColumbusCSV2FBGPS(cInputDatei, cOutputDatei: PChar; iAbtastRate: Integer): Boolean; external 'gpsmodul.dll';

bin ich nun am überlegen, wie ich die Parameter übergebe. Die Funktion ist in C wie folgt deklariert:

Zitat:

bool bColumbusCSV2FBGPS( char *cInputDatei, char *cOutputDateiFBGPS, int iAbtastRate )
Es geht also um Pointer auf einen Typ char. Ich hätte das nun als Äquivalent zu den PChars in Delphi verstanden.

Delphi-Quellcode:
StrPCopy(pcOutputFile,'"'+FBGPS_FileName+'"');
bColumbusCSV2FBGPS(pcInputFile, pcOutputFile, 1);
Leider bringt der Aufruf der Funktion dann einen Fehler - die Strings werden nicht korrekt übergeben (die Funktion erzeugt ein Logfile, in dem auch die übernommenen Parameter auftauchen, und die sind Kauderwelsch). Offenbar kommen die PChar-Strings nicht richtig rüber.

Hat jemand eine Idee, was der passende Datentyp wäre? Ich hab' ja in meiner Verzeiflung schon versucht, einen Pointer auf pcInputFile zu übergeben :)

gruß

Hepdepaddel

Fridolin Walther 2. Jul 2009 15:41

Re: Passender Datentyp zu C-DLL
 
Du solltest statt PChar lieber PAnsiChar verwenden. PChar ist seit Delphi 2009 kein PAnsiChar (also ein Pointer auf char wie in C) mehr sondern ein PWideChar (was einem Pointer auf wchar entspräche). PChar wäre also vergleichbar mit einem Pointer auf tchar aus Visual C++, die je nachdem ob Unicode aktiv ist entweder auf wide oder ansi chars basiert.

Wird (wenn die Angabe deiner verwendeten Delphi Version korrekt ist) dein Problem zwar nicht lösen, ist aber ein allgemeiner Hinweis.

mkinzler 2. Jul 2009 15:42

Re: Passender Datentyp zu C-DLL
 
Deklariere einen String und übergebe dann einen Poiter darauf an den Funktionsaufruf:

Delphi-Quellcode:
var
  s: sInputDatei;
...
  bColumbusCSV2FBGPS(PChar(sInputDatei), ...

Hepdepaddel 2. Jul 2009 16:22

Re: Passender Datentyp zu C-DLL
 
Danke für beide Hinweise. Habe nun mal ein PAnsiChar verwendet, um nicht später bei der Umstellung auf D2009 zu verzweifeln ;)

Zum Typcasting - ich nehme an, Du meintest

Delphi-Quellcode:
var
  sInputDatei:String;
...
  bColumbusCSV2FBGPS(PChar(sInputDatei), ...
?


Leider tut es das auch nicht. Auch die direkte Übergabe will nicht so recht:

Delphi-Quellcode:
bColumbusCSV2FBGPS('TEST', ...
Unglaublich - ein dämlicher String und ich bekomm das Ding nicht rüber :wall:

Gruß

Hepdepaddel

mkinzler 2. Jul 2009 16:27

Re: Passender Datentyp zu C-DLL
 
Delphi-Quellcode:
bColumbusCSV2FBGPS(PAnsiChar(sInputDatei), ...
?

Hepdepaddel 2. Jul 2009 16:34

Re: Passender Datentyp zu C-DLL
 
Neee, der will nich' :gruebel:

Satty67 2. Jul 2009 16:38

Re: Passender Datentyp zu C-DLL
 
Mal gefragt, was bColumbusCSV2FBGPS() überhaupt macht... klingt nach Dateikonvertierung von CSV nach anderem Format, also als ob die Funktion mind. einen gültigen Dateinamen erwartet?

Apollonius 2. Jul 2009 16:44

Re: Passender Datentyp zu C-DLL
 
Stimmt die Aufrufkonvention?

Hepdepaddel 2. Jul 2009 16:47

Re: Passender Datentyp zu C-DLL
 
Das ist richtig, die Datei konvertiert CSV in ein anderes Format. Sie schreibt dabei eine Logdatei und findet tatsächlich keine gültige CSV-Datei. In der Logdatei steht aber nun leider nicht

Zitat:

Fehler beim Lesen der Datei (TEST)...
sondern

Zitat:

Fehler beim Lesen der Datei (”ö)...
Sprich: Der Name "TEST" müsste eigentlich einen Fehler liefern (weil die Datei nicht existiert), aber "TEST" kommt nicht mal an. Mit einem richtigen Dateinamen funktioniert es auch nicht (das hatte ich zu Anfang probiert, im Moment bin ich auf "simple" Strings zurück).

@Apollonius: Was genau meinst Du mit "Aufrufkonvention"?

Gruß

Hepdepaddel

DeddyH 2. Jul 2009 16:48

Re: Passender Datentyp zu C-DLL
 
Wenn es sich wirklich um Dateinamen handelt, müssen evtl. die Backslashes verdoppelt werden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 Uhr.
Seite 1 von 2  1 2      

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