AGB  ·  Datenschutz  ·  Impressum  







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

DLL mit PChar D2010

Ein Thema von schwa226 · begonnen am 18. Feb 2010 · letzter Beitrag vom 23. Feb 2010
Antwort Antwort
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

DLL mit PChar D2010

  Alt 18. Feb 2010, 09:19
Hallo,

ich habe nun eine DLL die Solche Parameter übernimmt:
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.
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Chris.R

Registriert seit: 8. Sep 2009
Ort: Nürnberg
68 Beiträge
 
Delphi 2010 Professional
 
#2

Re: DLL mit PChar D2010

  Alt 18. Feb 2010, 09:26
Hallo,

versuch mal folgendes:

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
Guten Morgen! … Und falls wir uns heute nicht mehr sehen, Guten Tag, Guten Abend und Gute Nacht!
  Mit Zitat antworten Zitat
sonicus83

Registriert seit: 4. Aug 2008
33 Beiträge
 
#3

Re: DLL mit PChar D2010

  Alt 23. Feb 2010, 10:55
Danke für den Tipp, bei mir hat das geholfen.

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

tapiRequestMakeCall
TAPI
TAPI32
Delphi programming is searched by some guys...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#4

Re: DLL mit PChar D2010

  Alt 23. Feb 2010, 11:07
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:11 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