Entwickler-Ecke

Sonstiges (Delphi) - PChar mit Delphi2009


hanshermann - Fr 18.09.09 18:01
Titel: PChar mit Delphi2009
Der folgende Code funktioniert under Delphi5 einwandfrei.
Unter Delphi2009 kommt der String in s nicht in der procedure an.


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure swe_set_ephe_path(path : PChar)
  stdcallfarexternal 'swedll32.dll' Name '_swe_set_ephe_path@4';

  s := GetCurrentDir + '\ephe';
  swe_set_ephe_path(PChar(s));

Es hängt sicher mit der anderen Pointer-Behandlung von Strings zusammen.
Was muss man undter Delphi2009 ändern??
Hanshermann


Moderiert von user profile iconGausi: Topic aus Programmierwerkzeuge verschoben am Fr 18.09.2009 um 18:06
Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Gausi - Fr 18.09.09 18:06

Hallo und :welcome: in der Entwickler-Ecke,

Wenn die dll einen AnsiChar erwartet (also 1 Byte pro Zeichen), dann muss man unter D2009 PAnsiChar verwenden. Theoretisch sollte es so funktionieren:


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure swe_set_ephe_path(path : PAnsiChar) 
stdcallfarexternal 'swedll32.dll' Name '_swe_set_ephe_path@4'

s := GetCurrentDir + '\ephe'
swe_set_ephe_path(PAnsiChar(s));


Es kann aber gut sein, dass die dll dann auch noch an anderen Stellen Probleme macht. ;-)


hanshermann - Sa 19.09.09 09:44

Danke! Die Idee war gut, doch es funkt nicht. Ich hab die Pointer durch AnsiString ersetzt .- dann ging's!!
Ich weiss nicht warum.


Delphi-Quelltext
1:
2:
3:
4:
procedure swe_set_ephe_path(path : AnsiString) 
stdcallfarexternal 'swedll32.dll' Name '_swe_set_ephe_path@4'
s := GetCurrentDir + '\ephe'
swe_set_ephe_path(s);


LG
Hans

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt