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

EOG*_*EOG 11 c++ com dll

是否可以使用DLL中的COM对象而无需在C++中注册而不是托管代码?

Rom*_* R. 8

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

  1. LoadLibrary的DLL
  2. GetProcAddressDllGetClassObject
  3. 您调用DllGetClassObject获取感兴趣的IClassFactory指针CLSID
  4. 你很高兴IClassFactory::CreateInstance和coclass 一起实例化

  • 2½.在调用`DllGetClassObject`之前确保你在正确的公寓里.即便如此,您也无法获得特定对象模型接口的编组.即使C++ COM对象本身实现了"IMarshal"或"IProvideClassInfo",如果您提供实现任何这些接口的对象(例如事件调度接口),您也需要这样做.由于这些原因和许多其他原因,这是不好的做法.您应该使用免注册COM. (4认同)

Ser*_*bry 5

您可以为DLL创建清单文件并使用免注册COM.


nos*_*tio 5

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

  1. 用于LoadLibrary加载 COM DLL。
  2. 致电GetGetProcAddress获取 的地址DllRegisterServer
  3. 调用RegOverridePredefKey以使临时注册表重定向:HKEY_LOCAL_MACHINEtoHKEY_CURRENT_USERHKEY_CLASSES_ROOTto HKEY_CURRENT_USER\Software\Classes
  4. DllRegisterServer步骤 2 中获得的呼叫。
  5. 反转注册表重定向。
  6. 照常使用 COM 服务器,它现在已在HKEY_CURRENT_USER.

  • “简单”的黑客。不过很聪明。 (2认同)