Ich habe viel versucht, aber ich komme wieder nicht weiter...
Hab' die fpcmemdll.dll in system32 geschoben und ShareMem überall fleißig eingebunden - geändert hat sich nichts!
Und während die DLLs, die ich noch von Delphi habe wenigstens funktionieren bis ein Speicheraufruf passiert, bleibt bei denen aus Lazarus das Programm immer bei FreeLibrary hängen, egal, ob jetzt ShareMem eingebunden ist oder eine Funktion aus der DLL aufgerufen wurde. Der Debugger zeigt zwar keinen Fehler, lässt sich aber auch nicht mehr beenden, was die Fehlersuche ungemein erschwert...
Ich habe mal vorsichtshalber sämtlichen Code aus der DLL entfernt:
Code: Alles auswählen
library Image;
{$mode objfpc}{$H+}
uses
Classes,Windows,
Messages,
SysUtils,
Variants,
Dialogs,
d3dx9,
direct3d9,
Fortschritt in '..\..\Res\Fortschritt\Fortschritt.pas';
{$IFDEF WINDOWS}{$R Image.rc}{$ENDIF}
type
TMemInfo = packed record
P : Pointer;
Size : integer;
end;
procedure Create(Id : integer; Callback,CallbackInstance :
Pointer; RTarget : IDirect3DDevice9);
begin
end;
function Eval(const Input : Array of Byte) : TMemInfo;
begin
end;
function Go(TimePos : cardinal) : Boolean;
begin
end;
procedure Render(Flag : integer);
begin
end;
procedure Close;
begin
end;
exports Create;
exports Eval;
exports Go;
exports Render;
exports Close;
end.
Im Programm:
Code: Alles auswählen
var
test : THandle;
(...)
showmessage('start');
test := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + '\Objects\Image.dll'));
showmessage('mitte');
FreeLibrary(test);
showmessage('stop');
Das Message 'stop' wird nicht mehr angezeigt
Kommt zufällig jemandem dieses Problem bekannt vor?
PS: Komisch auch, dass ich in der DLL direct3d9 und d3dx9 einbinden kann, ohne jemals, wie es sonst immer nötig ist, eine Datei aus dem Ordner, in dem ich die habe, zum Projekt hinzugefügt zu haben; statt dessen kann ich anere Units, wie etwa forms, nicht einbinden. Dialogs ist zwar drinnen, im Quellcode der DLL kann ich aber ShowMessage nicht verwenden
Kann es irgendwie sein, dass Lazarus für DLLs noch nicht so ausgefeilt ist?