3
我想使用BPL在delphi2010中创建一个模块化应用程序。 问题是当我尝试在BPL内创建类时,出现此错误消息。德尔福:资源未找到错误?
我没有做关于资源(RES文件)进行任何操作!
Procedure TControllerMain.Btn1OnClick(Sender: TObject);
type
TInitProcedure = function: TModuleBaseClass; stdcall;
TModuleBaseClass= class of TModuleBase;
var
h: HMODULE;
proc: TInitProcedure;
vClass: TModuleBaseClass;
begin
h := LoadPackage('test.bpl');
@proc := GetProcAddress(h, 'InitializePlugin');
vClass := proc();
vClass.Create(nil); // error here
UnloadPackage(h);
end;
DLL的代码
TModuleBase是TCustomPanel
type
TVLCVideo = class(TModuleBase)
private
...
public
...
end;
function InitializePlugin: TModuleBaseClass; stdcall;
implementation
function InitializePlugin: TModuleBaseClass;
begin
Result := TVLCVideo;
end;
exports
InitializePlugin;
end.
DFM流时会发生这种类型的错误,但只有当'TModuleBase'从'TForm'推导建立主要应用,'TFrame'或'TDataModule',而不是'TCustomPanel'。 –
Okey,你能告诉我有什么方法可以在dll中使用组件吗?我不想创建ActiveX组件 – relativ
如果'InitializePlugin()'返回一个实例化对象而不是类类型,是否也有同样的问题?调用堆栈在发生错误时的样子是什么? –