使用DLL中的COM对象而无需注册

时间:2012-06-18 17:46:32

标签: c++ dll com

是否可以使用DLL中的COM对象而不使用C ++中的寄存器而不是托管代码?

3 个答案:

答案 0 :(得分:8)

是的,如果它不依赖其他注册对象。

  1. LoadLibrary DLL
  2. GetProcAddress <{1}}
  3. 您致电DllGetClassObject获取DllGetClassObject感兴趣的IClassFactory指针
  4. 您最好使用CLSID并实例化coclass

答案 1 :(得分:5)

您可以为DLL创建清单文件并使用Registration-Free COM

答案 2 :(得分:2)

说,需要注册COM DLL,但应用程序没有管理员访问权限。这是一个在HKEY_CURRENT_USER下注册DLL的简单方法,它不需要管理员权限:

  1. 使用LoadLibrary加载COM DLL。
  2. 致电GetGetProcAddress获取DllRegisterServer
  3. 的地址
  4. 致电RegOverridePredefKey以使临时注册表重定向:HKEY_LOCAL_MACHINEHKEY_CURRENT_USERHKEY_CLASSES_ROOTHKEY_CURRENT_USER\Software\Classes
  5. 致电步骤2中获得的DllRegisterServer
  6. 撤消注册表重定向。
  7. 像往常一样使用COM服务器,它现在已在HKEY_CURRENT_USER下注册。