2013-10-08 23 views
5

我使用Windows运行时模板库(WRL)创建了一个进程内经典COM DLL的示例:http://msdn.microsoft.com/en-us/library/vstudio/jj822931.aspx。我也能够修改代码来运行DLL作为COM代理(包装在DllHost.exe中)。使用Windows运行时间模板库(WRL)的进程外经典COM EXE

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

谢谢。

+0

有什么不对COM代孕? – sharptooth

+0

COM代理没有错。我只是好奇如何使用WRL实现超出COM COM EXE。 – nikoniko

+0

流程外COM是如此的痛苦,这是WCF发明的原因之一。 –

回答

3

是的,这是可能的。我只有一个工作。以下是需要的基础知识,与实施一个进程内的coclass相比。

  • 使用WRL :: RuntimeClass实现您的coclass的方式与您为pro-proc类使用的方法相同。 (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
  • 静态注册:DO注册您的代理存根的接口和CLSID。不要静态注册你的coclass。
  • 在客户端中,当您调用CoCreateInstance时,请务必使用相应的CLSCTX。 (我用CLSCTX_ALL当托管模式并不是很重要的客户。)

(我知道这是近4年时间,但我有这个星期同样的问题。)

+0

谢谢,将确认下一次我需要再次与COM战斗:) – nikoniko

相关问题