使用Windows运行时模板库(WRL)的进程外经典COM EXE

时间:2013-10-08 06:49:46

标签: com wrl

我已按照此处的示例:http://msdn.microsoft.com/en-us/library/vstudio/jj822931.aspx使用Windows运行时模板库(WRL)创建进程内经典COM DLL。我也可以修改代码来运行DLL作为COM代理(包含在DllHost.exe中)。

但是,我找不到使用WRL创建进程外COM EXE的方法。这里有一个使用准系统COM API的简单示例:http://www.codeproject.com/Articles/3173/A-simple-yet-debuggable-COM-skeleton-code,但我想知道如何利用WRL来简化它。

感谢。

1 个答案:

答案 0 :(得分:4)

是的,这是可能的。我只有一个工作。与实现in-proc coclass相比,这是所需的基础知识。

  • 使用WRL :: RuntimeClass实现您的coclass,就像使用in-proc类一样。 (https://msdn.microsoft.com/en-us/library/jj822931.aspx
  • 在main函数中,使用WRL :: Module< OutOfProc> :: Create()创建模块对象,并在启动时调用module.RegisterObjects(),并在关闭时调用module.UnregisterObjects()和module.Terminate()
  • 您需要构建一个DLL来托管代理:https://msdn.microsoft.com/en-us/library/windows/desktop/ms688707(v=vs.85).aspx
  • 静态注册:请注册接口和代理存根的CLSID。请勿静态注册您的coclass。
  • 在客户端中,当您调用CoCreateInstance时,请务必使用适当的CLSCTX。 (当托管模型对客户端不重要时,我使用CLSCTX_ALL。)

(我知道已经差不多4年了,但本周我有同样的问题。)