AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL Fehler

Ein Thema von theomega · begonnen am 5. Dez 2002 · letzter Beitrag vom 5. Dez 2002
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr.
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