Ich hab auch keinen Ansatz, oder doch, bloß funzen tut's nich.
Hier meine Bibliothek als EXE. Deshalb das Wort Pprogram, statt Library.
Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure Proc1; stdcall;
begin
writeln('Erste Prozedur aus der Bibliothek erfolgreich aufgerufen!');
end;
function AValue: Integer; stdcall;
begin
Result := 4;
end;
procedure Ausgabe(AText: String; AValue: Integer); stdcall;
begin
writeln(AText,AValue);
end;
exports
Proc1 Index 1,
AValue Index 2,
Ausgabe Index 3;
begin
{ TODO -oUser -cConsole Main : Hier Code einfügen }
end.
Und hier die Anwendung, welche die Bibliothek verwendet:
Delphi-Quellcode:
program Project3;
{$APPTYPE CONSOLE}
uses
ShareMem, System, SysUtils, SysInit, Windows;
type
TFarProc = procedure(T: String; I: Integer);
procedure Proc1; stdcall external 'Project2.exe' Index 1;
function AValue: Integer; stdcall external 'Project2.exe' Index 2;
procedure Ausgabe(AText: String; AValue: Integer); stdcall external 'Project2.exe' Index 3;
var ProcHandle: FarProc;
Proc: TFarProc;
begin
{ TODO -oUser -cConsole Main : Hier Code einfügen }
HINSTANCE := LoadLibrary('Projct2.exe');
ProcHandle := GetProcAddress(HINSTANCE,'Ausgabe');
Proc := TFarProc(ProcHandle);
Proc('Dieser Wert lautet: ', 100);
Readln;
end.
Felermeldung von Windows:
PROJECT3 verursachte einen Fehler durch eine ungültige Seite
in Modul <Unbekannt> bei 00de:bff90777.
Register:
EAX=81dfba60 CS=81dfd04c EIP=bff90777 EFLGS=bff741f7
EBX=81d33e0c SS=bff7dafa ESP=81dfc048 EBP=0063ff6c
ECX=bff741f7 DS=0040 ESI=00000008 FS=bff7a567
EDX=00000000 ES=81d02000 EDI=81dde84c GS=bff7a10e
Bytes bei CS:EIP:
Stapelwerte:
Ich kann mir nicht erlklären, was ich falsch gemacht habe. Kann mir jemand helfen?
schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.