Hallo,
ich habe ein Problem beim Verwenden meiner selbst geschrieben
DLL in meinen Programm, und zwar handelt es sich um eine Zugriffsverletzung die beim Aufrufen einer Prozedur aus einer
DLL entsteht.
Die
Dll wird statisch ins Programm eingebunden. Sie parst eine Datei welche auf der Fesplatte vorhanden ist.
Ich habe DLLs bisher immer gemieden da ich immer dieses Zugriffsverletzungs-Problem mit jeder
DLL die ich erstellt hatte gehabt habe.
Irgendwo scheine ich da immer einen Fehler zu machen obwohl ich nach einem
Dll-Tutorial, welches ich bei Delphi-Source.de fand, vorgehe.
Wenn ich den Quellcode direkt in mein Programm einbinde (also nicht in die
Dll auslagere sondern in eine
Unit des Programmes) dann gibts keine Probleme, es kann also nur an der
Dll selbst liegen !
Es ist auch egal welche Aufrufkonvention ich verwende, es kommt immer wieder eine Zugriffsverletzung.
Delphi-Quellcode:
// Quellcode der Dll
library gui;
uses
SysUtils,
Classes,
d3d_sprite_gui
in '
..\..\..\d3d_sprite_gui.pas',
d3d_input
in '
..\..\..\d3d_input.pas',
dxhelp
in '
..\..\..\dxhelp.pas',
d3dx9
in '
..\..\..\d3dx9.pas',
Direct3D9
in '
..\..\..\Direct3D9.pas',
DirectInput9
in '
..\..\..\DirectInput9.pas',
dxerr9
in '
..\..\..\dxerr9.pas',
DXFile
in '
..\..\..\DXFile.pas',
d3d_sprite_textout
in '
..\..\..\d3d_sprite_textout.pas',
d3d_sprite
in '
..\..\..\d3d_sprite.pas',
uTools
in '
..\..\..\uTools.pas',
StrUtils;
var CurPos:integer=-1;
Sl:TStringlist;
GuiDev:TD3DGui;
EndPosofproc:integer;
{$R *.res}
procedure Gui_Add_Cmd(str:
string);
begin
//...
end;
procedure Gui_Set_Cmd(str:
string);
begin
//...
end;
procedure Gui_Cmd;
var i:integer;
begin
//...
end;
procedure Proc_Cmd(findproc:Shortstring);
var i:integer;
begin
//...
end;
procedure ParseGuiFromFile(_Gui:TD3DGui;filename:ShortString;menu:ShortString);
pascal;
begin
GuiDev:=_Gui;
Sl:=TStringlist.Create;
Sl.LoadFromFile(filename);
Proc_Cmd(menu);
Sl.Free;
end;
exports
ParseGuiFromFile;
begin
end.
Delphi-Quellcode:
//Deklaration
procedure ParseGuiFromFile(_Gui:TD3DGui;filename:ShortString;menu:ShortString);
pascal;
//Implementierung
procedure ParseGuiFromFile(_Gui:TD3DGui;filename:ShortString;menu:ShortString);
pascal;
external '
data\dlls\gui.dll';
//Aufruf
ParseGuiFromFile(
Gui,'
data\scripts\gui\gui1.whs','
GuiMainMenu');
Ich bin echt ratlos und so schön langsam fange ich an den ganzen
Dll-Kram zu hassen
Wäre echt nett wenn einer mir einen Tipp zur Vermeidung des Problems geben könnte
Vielen Dank im Vorraus !
Liebe Grüße,
Thomas