W zaożeniu miało być dynamiczne ładowanie bibliotek i wyświetlanie framsa zawartego w dll. Stworzyłem sobie taki kod:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
DLL = record
Plugin_Handle: THandle;
Plugin_Frame: procedure(ApplicationHandle, ParentHandle: THandle);
end;
PDLL = ^DLL;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
Plugin: PDLL;
Plugin_Frame: procedure(ApplicationHandle, ParentHandle: THandle);
begin
New(Plugin);
Plugin^.Plugin_Handle := LoadLibrary('dllproj1.dll');
if (Plugin^.Plugin_Handle = 0) then
exit;
@Plugin_Frame := GetProcAddress(Plugin^.Plugin_Handle, 'ShowFrame');
if (@Plugin_Frame = nil) then
begin
FreeLibrary(Plugin^.Plugin_Handle);
exit;
end;
Plugin^.Plugin_Frame := @Plugin_Frame;
Plugin^.Plugin_Frame(Application.Handle, Application.MainFormHandle);
end;
end.
i DLL
library dllproj1;
uses
SysUtils,
Classes,
Controls,
Forms,
Windows,
dll in 'dll.pas' {Frame2: TFrame};
{$R *.res}
procedure ShowFrame(ApplicationHandle, ParentHandle: THandle); stdcall;
var
Frame1: TFrame2;
AppHandle: THandle;
begin
AppHandle := Application.Handle;
Application.Handle := ApplicationHandle;
Frame1 := TFrame2.Create(Application);
[b]Frame1.ParentWindow := ParentHandle[/b];
SetParent(Frame1.Handle, ParentHandle);
Frame1.Align := alClient;
Frame1.Visible := True;
Application.Handle := AppHandle;
end;
exports
ShowFrame;
begin
end.
I dostaję błąd 1400: Nieprawidłowe dojście okna :|
Błąd pojawia się w pogrubionej linii, bądź następnej. Dodam że jeśli załaduję sobie statycznie biliotekę to ramka elegancko się pojawia...