![]() |
stdcall beim aufruf einer dll
Hi,
Ich habe mir einen wirklich kleine dll geschrieben.
Delphi-Quellcode:
So habe ich sie deklariert
library Mydll;
uses dialogs; {$R *.res} procedure MYMessage(text : string); begin showmessage(text); end; exports MyMessage; end.
Delphi-Quellcode:
wenn ich sie jetzt aufrufe
procedure MYMessage(text : string); stdcall; external 'Mydll.dll';
Delphi-Quellcode:
erscheint eine entstellte messagebox mit zeichen als text.
MyMessage('Hello world');
Deklariere ich sie hin gegen so
Delphi-Quellcode:
geht alles ohne problem woran liegt das?
procedure MYMessage(text : string); external 'Mydll.dll';
Mfg ReDoX |
Re: stdcall beim aufruf einer dll
Wahrscheinlich musst du die Prozedur auch in der Dll mit stdcall deklarieren oder :gruebel:
|
Re: stdcall beim aufruf einer dll
Du musst auch in der DLL stdcall; angeben ;-)
//edit: Wenn du es in beiden Fällen weglässt, wird allerdings automatisch stdcall register ;-) verwendet, hab ich ganz vergessen ;-) |
Re: stdcall beim aufruf einer dll
Lass mich raten, du hast keinen Hinweis bekommen, dass schon eine Antwort geschrieben wurde oder :mrgreen:
|
Re: stdcall beim aufruf einer dll
Eine Frage nebenher : Was bedeutet eigentlich stdcall ?
|
Re: stdcall beim aufruf einer dll
oder du lässt wie schon von dir geschrieben in beiden fällen das "stdcall" weg. Stdcall brauchst du eigentlich nur verwenden wenn die DLL auch von Programmen aus anderen Programmierpsrachen genutzt werden soll.
@Ultimator: Es wird nicht in beiden fällen Stdcall verwendet wenn man es weg lässt. Standardmäßig wird "register" verwendet. Wenn man in der Hilfe einfach mal "stdcall" eingibt bekommt man unter "stdcall (calling convention)" auch genaue informationen welche vorteile welche convention hat und da steht eben auch: "The default calling convention is register" @Neutral General: "stdcall" ist einfach eine aufrufconvention welche Standardmäßig verwendet (wenn man DLL's publiziert). Wie schon geschrieben findet sich in der Hilfe eine genaue erklärung. Der unterschied zwischen den Aufrufkonvetionen liegt darin wo/wie die parameter abgelegt werden etc. |
Re: stdcall beim aufruf einer dll
ein tutorial für dlls;
![]() zu beachten sind 1.die besonderheiten bei der übergabe von strings zwischen exe und dll 2.Groß-kleinschreibung ist wichtig bei dlls! stdcall bezeichnet, dass die funktion auch aus zb einem c++ prog aufgerufen werden kann (und nicht nur delphi) MfG tn249 |
Re: stdcall beim aufruf einer dll
stdcall ist eine art, wie die funktionen auf dem stack bzw registern gelegt werden, und wer die "aufräumarbeit" erledigt. Einfach mal in der OH nach stdcall suchen.
|
Re: stdcall beim aufruf einer dll
Ahhh, danke für die Antworten.
Jetzt habe ich es verstanden. Mfg ReDoX |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 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