是否可以将COM DLL包装在应用程序中而无需注册它?

jus*_*tyy 2 delphi com delphi-xe8

目前,您必须先使用regsvr32 COM.dll,然后才能在应用程序(EXE)中使用COM对象.

有没有办法在部署时以某种方式将COM.dll包装在EXE中,以便用户不必手动注册COM.dll?

我正在使用Delphi XE8

Sti*_*ers 5

我最近在研究类似的东西,事实证明这很简单.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)