是否有可能使用从DLL COM对象,而寄存器C ++不托管代码?
Answer 1:
是的,如果它没有内部的其他注册的对象依赖。
- 您
LoadLibrary
的DLL - 您
GetProcAddress
它DllGetClassObject
- 你叫
DllGetClassObject
获得IClassFactory
指针CLSID
感兴趣 - 你是好去
IClassFactory::CreateInstance
和实例化组件类
Answer 2:
您可以创建DLL和使用清单文件免注册COM 。
Answer 3:
说,在COM DLL需要注册,但应用程序没有管理员访问权限。 下面是一个简单的黑客注册下的DLL HKEY_CURRENT_USER
,不需要管理员权限:
- 使用
LoadLibrary
来加载COM DLL。 - 呼叫
GetGetProcAddress
得到的地址DllRegisterServer
。 - 呼叫
RegOverridePredefKey
使临时注册表重定向:HKEY_LOCAL_MACHINE
到HKEY_CURRENT_USER
和HKEY_CLASSES_ROOT
到HKEY_CURRENT_USER\Software\Classes
。 - 调用
DllRegisterServer
在步骤2中获得的。 - 反向注册表重定向。
- 使用COM服务器像往常一样,它现在下注册
HKEY_CURRENT_USER
。
文章来源: Use COM Object from DLL without register