是否可以使用 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_MACHINEtoHKEY_CURRENT_USER和HKEY_CLASSES_ROOTtoHKEY_CURRENT_USER\Software\Classes。 DllRegisterServer在步骤 2 中获得的调用。- 反转注册表重定向。
- 像往常一样使用 COM 服务器,它现在注册在
HKEY_CURRENT_USER.
于 2015-02-11T06:48:54.097 回答