使用Visual c + + 6.0,我创建了一个基于ATL的.EXE服务器。 (VC6,因为我正在处理遗留代码,一个.exe服务器,因为我需要在进程外上下文中测试操作,目前.exe服务器本质上是一个没有操作)
我已经构建并注册了相应的代理存根DLL。
我有一个客户端应用
这些步骤是从(comip.h :: CreateInstance)
复制而来的问题似乎是没有调用proxystub dll(它没有出现在IDE的Modules列表中,也没有出现在调试窗口的已加载模块列表中)
The OleCom Object viewer for my class and interface can be seen here https://skydrive.live.com/redir?resid=AE43106917EBD9E1!191&authkey=!AIOWeS5P3o2mlpw
8891..ca4d是我的对象的类接口ID
A298 ... 420c是我的服务器对象的接口ID(基于IDispatch)
任何协助的TIA
答案 0 :(得分:0)
您的问题可能是实现IRunnableObject接口的组件未在运行对象表中注册。这意味着CoCreateInstance本身会成功,但是,当它调用它的对象时,RPC代码将无法找到它。
此MSDN页面指示: http://msdn.microsoft.com/en-us/library/windows/desktop/ms694517(v=vs.85).aspx
Notes to Implementers
The object should register in the running object table if it has a
moniker assigned. The object should not hold any strong locks on itself;
instead, it should remain in the unstable, unlocked state. The object
should be locked when the first external connection is made to the object.
我有点担心你为什么还要使用IMarshall界面。通常没有必要编写自定义编组代码,因此您不需要使用此接口。
只要您不引用自定义界面,就会使用ole32.dll或oleauto32.dll中的默认编组程序。这很可能是因为您没有看到您的代理被加载。
In the case of most COM interfaces, the proxies and stubs for standard
marshaling are in-process component objects which are loaded from a
systemwide DLL provided by COM in Ole32.dll.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms692621(v=vs.85).aspx