![]() |
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:
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.
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 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! |
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:
du übergibst aber einen PChar und einen String
function BerechneWas(Titel: PChar; Wert: Integer): Integer; stdcall;
Delphi-Quellcode:
BerechneWas(PChar(Edit1.Text), IntToStr(Edit2.Text))
|
Re: Pointerübergabe nur bei Prozeduren??
IntToStr mit nem String (Edit2.Text) aufrufen geht ja sowieso mal nicht - ich vermute, er meinte StrToInt.
|
Re: Pointerübergabe nur bei Prozeduren??
Richtig. Ich meinte auch StrToInt.
|
Re: Pointerübergabe nur bei Prozeduren??
Hast du auch im Hauptprogramm die Funktion als stdcall definiert?
|
Re: Pointerübergabe nur bei Prozeduren??
Importierst du statisch oder dynamisch? Der Fehler sieht fast nach falscher Aufrufkonvention aus...
|
Re: Pointerübergabe nur bei Prozeduren??
Im Hauptprogramm habe ich diese Deklaration:
Delphi-Quellcode:
Ist also im Plug-In statisch gelinkt!
function BerechneWas(Titel: PChar; Wert: Integer): Integer; stdcall; Extarnal '.\Meine.dll';
|
Re: Pointerübergabe nur bei Prozeduren??
Moin DJ-SPM,
das der Typecast
Delphi-Quellcode:
nicht unbedingt das gewünschte Ergebnis bringt, wenn man das dann an eine DLL als Parameter übergibt, hatte ich auch schon mal.
PChar(Edit.Text)
Probier mal
Delphi-Quellcode:
ersatzweise.
@Edit.Text[1]
|
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. |
Re: Pointerübergabe nur bei Prozeduren??
.. und vorher in einen etxra String legen...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz