是否可以使用 DLL 中的 COM 对象而不在 C++ 非托管代码中注册?
问问题
8717 次
3 回答
10
是的,如果它在内部不依赖其他注册对象。
- 你
LoadLibrary
是 DLL - 你
GetProcAddress
它的DllGetClassObject
- 您调用
DllGetClassObject
以获取感兴趣的IClassFactory
指针CLSID
- 你很适合去
IClassFactory::CreateInstance
实例化 coclass
于 2012-06-18T17:51:54.800 回答
7
您可以为 DLL 创建清单文件并使用无注册 COM。
于 2012-06-18T17:59:53.717 回答
3
比如说,需要注册 COM DLL,但应用程序没有管理员访问权限。HKEY_CURRENT_USER
这是在不需要管理员权限的情况下注册 DLL 的简单技巧:
- 用于
LoadLibrary
加载 COM DLL。 - 打电话
GetGetProcAddress
获取地址DllRegisterServer
。 - 调用
RegOverridePredefKey
以使临时注册表重定向:HKEY_LOCAL_MACHINE
toHKEY_CURRENT_USER
和HKEY_CLASSES_ROOT
toHKEY_CURRENT_USER\Software\Classes
。 DllRegisterServer
在步骤 2 中获得的调用。- 反转注册表重定向。
- 像往常一样使用 COM 服务器,它现在注册在
HKEY_CURRENT_USER
.
于 2015-02-11T06:48:54.097 回答