![]() |
Dll implementation
Hallo,
ich hab nun lange nicht mehr mit dlls geatbeitet und bin nun dabei eine neue zu erstellen. Nur will die irgendwie nicht wie ich will. Folgender code:
Delphi-Quellcode:
Liefert mir folgende Fehlermeldung:
library Project1;
uses ShareMem, SysUtils, Classes; type TMyRec = record x : integer; y : integer; title : String; end; function GetKoord(x,y:integer;title:string):string; stdcall; implementation begin function GetLang(x,y:integer;title:string):string; begin result:='test'; end; end. Zitat:
MfG - Ghost007 |
Re: Dll implementation
versuche es einmal so:
Delphi-Quellcode:
library Project1;
uses ShareMem, SysUtils, Classes; {$R *.RES} type TMyRec = record x : integer; y : integer; title : String; end; implementation function GetLang(x,y:integer;title:string):string; stdcall; begin result:='test'; end; begin end. |
Re: Dll implementation
Hey,
wenn ich das richtig in Erinnerung habe, kommt das Schlüsselwort implementation nur bei Units vor. Bei Libraries machts ja auch keinen Sinn. Aber in einer Library sollten die zu exportierenden Funktionen gekennzeichnet sein. MfG Klaus |
Re: Dll implementation
Einfach ohne "implementation", dann geht das:
Delphi-Quellcode:
library Project1;
uses ShareMem, SysUtils, Classes; {$R *.RES} type TMyRec = record x : integer; y : integer; title : String; end; function GetLang(x,y:integer;title:string):string; stdcall; begin result:='test'; end; begin end. |
Re: Dll implementation
jup, geht. :thumb:
//EDIT: Nur wenn ich die dll wie folgt in ein projekt einbinde:
Delphi-Quellcode:
Dann passiert noch nichts. (Beim kompilieren)
function GetLang(form,lang,control:string):string; stdcall; external 'Projekt1.dll';
Verwende ich die funktion jedoch z.b. wie folgt:
Delphi-Quellcode:
Dann sagt er mir, gleich beim kompilieren:
ShowMessage(GetLang(1,2,'bla'));
Zitat:
|
Re: Dll implementation
Wenn Du den Code oben übernommen hast, dann fehlt Dir eine wichtige Kleinigkeit: Du hast keine Funktionen exportiert. Probier es mal so:
Delphi-Quellcode:
Die Funktion wirst Du übrigens ausschließlich in Delphi Anwendungen nutzen können, weil Du ausschließlich Strings benutzt. Damit zerstörst Du sämtliche Kompatibilität. Denk auch daran ebenfalls in Deiner Anwendung ShareMem als ERSTE Unit vor allen anderen Units einzubinden und die BORLNDMM.DLL mit Deiner Anwendung und DLL auszuliefern.
library Project1;
uses ShareMem, SysUtils, Classes; {$R *.RES} type TMyRec = record x : integer; y : integer; title : String; end; function GetLang(x,y:integer;title:string):string; stdcall; begin result:='test'; end; // Liste der exportierten Funktionen durch , getrennt: exports Funktion1, Funktion2, ... ; exports GetLang; begin end. Alternativ kann ich Dir auch gerne erklären, wie Du ohne das BORLNDMM.DLL und ShareMem Geraffel aus kommst und deine DLL auch kompatibel zu anderen Programmiersprachen gestaltest. |
Re: Dll implementation
Zitat:
die kompatibilität brauch ich nicht, da diese dll zu 100% nur von mir verwendet wird. Aber das angebot mit dem "Geraffel" nehm ich liebend gern an. :) MfG - Ghost007 //EDIT: das mit dem exports wars ... wie konnte ich das nur vergessen :wall: |
Re: Dll implementation
Zitat:
|
Re: Dll implementation
Zitat:
das ist eigentlich ne gute frage ... bin mir mal gedanken da drüber machen. Meld mich nochmal wenn ich die dll doch haben will ^^ Danke |
Re: Dll implementation
für Updates sind die .dlls handlicher als die eingebundenen Units
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 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 by Thomas Breitkreuz