Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Pointerübergabe nur bei Prozeduren?? (https://www.delphipraxis.net/97878-pointeruebergabe-nur-bei-prozeduren.html)

TheMiller 17. Aug 2007 19:05


Pointerübergabe nur bei Prozeduren??
 
Hallo,

ich habe mal wieder ein Problem, welches so merkwürdig ist, dass ich es alleine nicht lösen kann. Es hört sich auch tierisch unbegreiflich an...

Also. Ich habe eine DLL und ein PlugIn. Das PlugIn eines Programms greift auf die DLL zu und und möchte eine Berechnung durchgeführt haben. Für diese Berechnung braucht die DLL ein paar Parameter - sowohl Strings, als auch Integers. Die DLL beinhaltet also eine Funktion, da sie ja was zurückgeben muss. Der wichtige Teil ist nicht die Berechnung, sondern der Teil, dass die Strings nicht ankommen. Ich mache das folgendermaßen:

Delphi-Quellcode:
DLL

function BerechneWas(Titel: PChar; Wert: Integer): Integer; stdcall;
begin
  ShowMessage(Titel);
  //Die Berechnung folgt.
end;


== Hauptprogramm ==

procedure OhneNamen;
begin
  Edit1.Text:='Ein schöner Titel';
  Edit2.Text:='25';
  Edit3.Text:=IntToStr(BerechneWas(PChar(Edit1.Text), IntToStr(Edit2.Text)));
end;
Was als Titel in der DLL ankommt, ist ein leerer String. Erstelle ich jetzt eine Prozedur mit Titel und übergebe den PChar an die DLL klappt das einwandtfrei.

Was mache ich falsch?

ACHSO: Das Showmessage in der DLL ist natürlich nur zu Debugging-Zwecken da. Aber die Funktion soll in Realität schon einen String/PChar empfangen.

Danke!

SirThornberry 17. Aug 2007 21:11

Re: Pointerübergabe nur bei Prozeduren??
 
also irgendwas stimmt nicht bei dem von dir geposteten Code.

in der DLL erwartet die Funktion einen PChar und einen Integer:
Delphi-Quellcode:
function BerechneWas(Titel: PChar; Wert: Integer): Integer; stdcall;
du übergibst aber einen PChar und einen String
Delphi-Quellcode:
BerechneWas(PChar(Edit1.Text), IntToStr(Edit2.Text))

3_of_8 17. Aug 2007 21:38

Re: Pointerübergabe nur bei Prozeduren??
 
IntToStr mit nem String (Edit2.Text) aufrufen geht ja sowieso mal nicht - ich vermute, er meinte StrToInt.

TheMiller 18. Aug 2007 10:33

Re: Pointerübergabe nur bei Prozeduren??
 
Richtig. Ich meinte auch StrToInt.

sirius 18. Aug 2007 10:37

Re: Pointerübergabe nur bei Prozeduren??
 
Hast du auch im Hauptprogramm die Funktion als stdcall definiert?

Apollonius 18. Aug 2007 10:38

Re: Pointerübergabe nur bei Prozeduren??
 
Importierst du statisch oder dynamisch? Der Fehler sieht fast nach falscher Aufrufkonvention aus...

TheMiller 18. Aug 2007 13:18

Re: Pointerübergabe nur bei Prozeduren??
 
Im Hauptprogramm habe ich diese Deklaration:

Delphi-Quellcode:
function BerechneWas(Titel: PChar; Wert: Integer): Integer; stdcall; Extarnal '.\Meine.dll';
Ist also im Plug-In statisch gelinkt!

Christian Seehase 18. Aug 2007 13:20

Re: Pointerübergabe nur bei Prozeduren??
 
Moin DJ-SPM,

das der Typecast

Delphi-Quellcode:
PChar(Edit.Text)
nicht unbedingt das gewünschte Ergebnis bringt, wenn man das dann an eine DLL als Parameter übergibt, hatte ich auch schon mal.
Probier mal

Delphi-Quellcode:
@Edit.Text[1]
ersatzweise.

TheMiller 18. Aug 2007 13:31

Re: Pointerübergabe nur bei Prozeduren??
 
Hm... hat leider auch nicht funktioniert.
Das Ergebnis ist immernoch ein Leerstring.

Habe es bei einer 2. Funktion probiert, die es auch gibt und fast genauso aufgebaut ist. Es kommt aber nur ein verstümmelter String wie "Ä)8 "()" raus, obwohl der gleiche Cast stattfindet.

sirius 18. Aug 2007 13:35

Re: Pointerübergabe nur bei Prozeduren??
 
.. und vorher in einen etxra String legen...


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