Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dll implementation (https://www.delphipraxis.net/111026-dll-implementation.html)

ghost007 28. Mär 2008 08:31


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:
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.
Liefert mir folgende Fehlermeldung:
Zitat:

Zitat von Delphi 7
';' expected but 'IMPLEMENTATION' found

:gruebel: was mach ich falsch ?

MfG - Ghost007

STS301 28. Mär 2008 08:40

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.

DelphiKlaus 28. Mär 2008 08:57

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

DenSchub 28. Mär 2008 09:33

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.

ghost007 28. Mär 2008 09:35

Re: Dll implementation
 
jup, geht. :thumb:

//EDIT:
Nur wenn ich die dll wie folgt in ein projekt einbinde:
Delphi-Quellcode:
function GetLang(form,lang,control:string):string; stdcall; external 'Projekt1.dll';
Dann passiert noch nichts. (Beim kompilieren)
Verwende ich die funktion jedoch z.b. wie folgt:
Delphi-Quellcode:
ShowMessage(GetLang(1,2,'bla'));
Dann sagt er mir, gleich beim kompilieren:
Zitat:

Zitat von Delphi 7
Die Abwendung konnte nicht richtig initialisiert werden (0xc000007b).

:gruebel:


wido 28. Mär 2008 10:07

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:
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.
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.

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.

ghost007 28. Mär 2008 10:19

Re: Dll implementation
 
Zitat:

Zitat von wido
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.

Hi,
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:

wido 28. Mär 2008 10:40

Re: Dll implementation
 
Zitat:

Zitat von ghost007
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. :)

Naja, wieso erstellst Du überhaupt ne DLL und packst die Funktionen nicht einfach in ne stink normale Unit, wenn eh nur Du die Sachen verwenden willst?

ghost007 28. Mär 2008 11:58

Re: Dll implementation
 
Zitat:

Zitat von wido
Zitat:

Zitat von ghost007
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. :)

Naja, wieso erstellst Du überhaupt ne DLL und packst die Funktionen nicht einfach in ne stink normale Unit, wenn eh nur Du die Sachen verwenden willst?

hm,
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

STS301 28. Mär 2008 14:37

Re: Dll implementation
 
für Updates sind die .dlls handlicher als die eingebundenen Units


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