从DLL使用COM对象,而寄存器(Use COM Object from DLL without r

2019-06-25 13:37发布

是否有可能使用从DLL COM对象,而寄存器C ++不托管代码?

Answer 1:

是的,如果它没有内部的其他注册的对象依赖。

  1. LoadLibrary的DLL
  2. GetProcAddressDllGetClassObject
  3. 你叫DllGetClassObject获得IClassFactory指针CLSID感兴趣
  4. 你是好去IClassFactory::CreateInstance和实例化组件类


Answer 2:

您可以创建DLL和使用清单文件免注册COM 。



Answer 3:

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

  1. 使用LoadLibrary来加载COM DLL。
  2. 呼叫GetGetProcAddress得到的地址DllRegisterServer
  3. 呼叫RegOverridePredefKey使临时注册表重定向: HKEY_LOCAL_MACHINEHKEY_CURRENT_USERHKEY_CLASSES_ROOTHKEY_CURRENT_USER\Software\Classes
  4. 调用DllRegisterServer在步骤2中获得的。
  5. 反向注册表重定向。
  6. 使用COM服务器像往常一样,它现在下注册HKEY_CURRENT_USER


文章来源: Use COM Object from DLL without register
标签: c++ dll com