Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   stdcall beim aufruf einer dll (https://www.delphipraxis.net/40684-stdcall-beim-aufruf-einer-dll.html)

ReDoX 19. Feb 2005 12:42


stdcall beim aufruf einer dll
 
Hi,
Ich habe mir einen wirklich kleine dll geschrieben.

Delphi-Quellcode:
library Mydll;

uses
  dialogs;

{$R *.res}

procedure MYMessage(text : string);
begin
 showmessage(text);
end;

exports
 MyMessage;

end.
So habe ich sie deklariert
Delphi-Quellcode:
 procedure MYMessage(text : string); stdcall; external 'Mydll.dll';
wenn ich sie jetzt aufrufe
Delphi-Quellcode:
 MyMessage('Hello world');
erscheint eine entstellte messagebox mit zeichen als text.
Deklariere ich sie hin gegen so
Delphi-Quellcode:
procedure MYMessage(text : string); external 'Mydll.dll';
geht alles ohne problem woran liegt das?

Mfg ReDoX

Rastaman 19. Feb 2005 12:44

Re: stdcall beim aufruf einer dll
 
Wahrscheinlich musst du die Prozedur auch in der Dll mit stdcall deklarieren oder :gruebel:

Ultimator 19. Feb 2005 12:45

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 ;-)

Rastaman 19. Feb 2005 12:46

Re: stdcall beim aufruf einer dll
 
Lass mich raten, du hast keinen Hinweis bekommen, dass schon eine Antwort geschrieben wurde oder :mrgreen:

Neutral General 19. Feb 2005 12:47

Re: stdcall beim aufruf einer dll
 
Eine Frage nebenher : Was bedeutet eigentlich stdcall ?

SirThornberry 19. Feb 2005 12:50

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.

tn249 19. Feb 2005 12:51

Re: stdcall beim aufruf einer dll
 
ein tutorial für dlls;

http://www.dsdt.info/tutorials/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

phXql 19. Feb 2005 12:56

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.

ReDoX 19. Feb 2005 13:37

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