Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL mit PChar D2010 (https://www.delphipraxis.net/147886-dll-mit-pchar-d2010.html)

schwa226 18. Feb 2010 09:19


DLL mit PChar D2010
 
Hallo,

ich habe nun eine DLL die Solche Parameter übernimmt:
Delphi-Quellcode:
TGetData= function (user,pass : PChar; Out1Str , Out2Str : Pointer ;out1_leng,out2_leng : Integer): integer; stdcall;
Wenn ich sie nun so aufrufe:
Delphi-Quellcode:
GetData : TGetData;

..
.
User, Pass : String;

GetData(PChar(User),PChar(Pass),@Out1Str[1],@Out2Str[1],out1_leng,out2_leng);
Dann zeigt mir die Debug Messagebox der DLL bei User & Pass nur den ersten Buchstaben an.

Also nur 'u' statt 'user';

Hat sicher etwas mit Unicode usw zu tun, bekomme es aber einfach nicht hin, dass der ganze String übergeben wird. :wall:

Chris.R 18. Feb 2010 09:26

Re: DLL mit PChar D2010
 
Hallo,

versuch mal folgendes:

Delphi-Quellcode:
TGetData= function (user,pass : PAnsiChar; Out1Str , Out2Str : Pointer ;out1_leng,out2_leng : Integer): integer; stdcall;
und dann so den Aufruf:

Delphi-Quellcode:
GetData : TGetData;

..
.
User, Pass : AnsiString;

GetData(PAnsiChar(User),PAnsiChar(Pass),@Out1Str[1],@Out2Str[1],out1_leng,out2_leng);
Ciao Chris

sonicus83 23. Feb 2010 10:55

Re: DLL mit PChar D2010
 
Danke für den Tipp, bei mir hat das geholfen. :dp:

Hatte die TAPI32.DLL genutzt und mich gewundert, warum nur die "0" gewählt wird. Als Suchhilfe noch ein paar Begriffe:

tapiRequestMakeCall
TAPI
TAPI32

himitsu 23. Feb 2010 11:07

Re: DLL mit PChar D2010
 
Delphi-Quellcode:
TGetData = function(const User, Pass: AnsiString; Out1, Out2: PAnsiChar; Out1_Length, Out2_Length: Integer): Integer; stdcall;
Alternativ dürfte auch dieses gehn.

Wobei Pointer absichtlich in PAnsiChar geändert wurde, denn ich denke mal dieses ist auch ein AnsiString oder ein AnsiChar-Array ... so gibt es dort nun eine Warnung, wenn man einen PWideChar dort übergibt.

Und das PAnsiChar zu AnsiString ... hier wird wohl nur gelesen und diesbezüglich sieht ein AnsiString intern wie ein PAnsiChar aus.


Und merke dir Eines: für externe Datenübertagung/-Speicherung nutzt man einfach keine dynamische Typen.

PChar, String, Integer, Cardinal sind systemabhängig (also entsprechend des Compilers) und können sich schnell mal verändern.

Ab D2009 ist PChar ein PWideChar und davor war er ein PAnsiChar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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