jus*_*tyy 2 delphi com delphi-xe8
目前,您必须先使用regsvr32 COM.dll,然后才能在应用程序(EXE)中使用COM对象.
有没有办法在部署时以某种方式将COM.dll包装在EXE中,以便用户不必手动注册COM.dll?
我正在使用Delphi XE8
我最近在研究类似的东西,事实证明这很简单.COM DLL必须在其他几个中导出DllGetClassObject条目.一般来说,选定的开发平台会为您完成此任务,但在最终的DLL中它就在那里,它们都可以供COM子系统使用,但是您自己也可以使用以下代码:
type
T_DGCO=function(const CLSID, IID: TGUID; var Obj): HResult; stdcall;//DllGetClassObject
var
p:T_DGCO;
f:IClassFactory;
x:IMyObject;//replace by an interface of choice
begin
p:=GetProcAddress(LoadLibrary(FullPathToDLL),'DllGetClassObject');
if @p=nil then RaiseLastOSError;
OleCheck(p(CLASS_MyObject,IClassFactory,f));
OleCheck(f.CreateInstance(nil,IMyObject,x));
x.Hello('World');//or whatever your object does
end;
Run Code Online (Sandbox Code Playgroud)