Thema: Delphi DLL Fehler

Einzelnen Beitrag anzeigen

Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#1

DLL Fehler

  Alt 5. Dez 2002, 15:51
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]
  Mit Zitat antworten Zitat