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

nik*_*iko 6 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简化了这一点.

谢谢.

小智 4

对的,这是可能的。我刚刚得到一个工作。与实现进程内组件类相比,以下是所需的基础知识。

  • 使用 WRL::RuntimeClass 实现您的组件类,就像处理进程内类一样。(https://msdn.microsoft.com/en-us/library/jj822931.aspx
  • 在主函数中,使用 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。不要静态注册您的组件类。
  • 在Client中,当你调用CoCreateInstance时,一定要使用合适的CLSCTX。(当托管模型对客户端不重要时,我使用 CLSCTX_ALL。)

(我知道已经过去快四年了,但这周我也有同样的问题。)