Hallo
jetzt wirds ein bischen ausführlich:
1. eine
dll: "deu.dll"
Delphi-Quellcode:
library DEU;
uses
SysUtils,
Classes;
{$R *.res}
type TInfo=record
author:shortstring;
name:shortstring;
end;
function info:TInfo;stdcall;
var re:tInfo;
begin;
re.author := 'Dominik Bruhn';
re.name := 'German / Deutsch';
result := re;
end;
//=================================================
type TLanguage=record
opentermset:shortstring;
newtermset:shortstring;
end;
function language:TLanguage; stdcall;
var re:TLanguage;
begin;
re.opentermset := 'Termset öffnen';
re.newtermset := 'Neues Termset';
result := re;
end;
begin
end.
export
language,
info;
ganz simpel. Die eine Funktion soll ein Paar Infos zurückgeben, die andere soll dann nachher recht viele Strings hergeben
dann in meiner Host-Anwendung:
Delphi-Quellcode:
unit functions;
interface
uses ComCtrls,inifiles,SysUtils,Classes,Dialogs,XMLDoc,XMLIntf,Graphics,Controls,Math,Types,windows;
type TInfo=record
author:shortstring;
name:shortstring;
end;
type TLanguage=record
opentermset:shortstring;
newtermset:shortstring;
end;
type
TDlllanguage=function: TLanguage;
TDllinfo=function :TInfo;
procedure loadlanguage(lang:
string);
implementation
procedure loadlanguage(lang:
string);
var
mydll : dword;
Dllinfo : TDLLinfo;
Dlllanguage: TDlllanguage;
retinfo:TInfo;
begin;
mydll :=0;
mydll := LoadLibrary(pchar(lang+'
.dll');
if(mydll <> 0)
then
begin
Dllinfo := GetProcAddress(mydll,'
info');
Dlllanguage := GetProcAddress(mydll,'
language');
if(@Dllinfo =
nil)
or (@Dlllanguage =
nil)
then
begin
FreeLibrary(MyDll);
MyDll := 0;
end
end;
if(
not (@Dllinfo =
nil))
and (MyDll <> 0)
then begin;
retinfo := Dllinfo;
end;
if(MyDll <> 0)
then
FreeLibrary(MyDll);
end;
was jetzt eingetlich passieren sollte: in der retinfo sollten jetzt eingetlich die beiden Strings aus der
DLL drinstehen. Tun sie aber nicht.
Aus irgendeinem Grund wird in diese Schlaufe verlinkt und damit die
DLL wieder geunloaded:
Delphi-Quellcode:
if(@Dllinfo = nil) or (@Dlllanguage = nil)then
begin
FreeLibrary(MyDll);
MyDll := 0;
end
Warum ist das so?
Weiß jemand Rat?
Danke
TO
[edit=Admin]Delphi-Tags eingefügt. Mfg. Daniel[/edit]