如何调用 .Net COM+来自 C++ 的对象函数库?
我还没有找到真正有效的例子。我需要为 MetaTrader 创建一个交互系统。最好使用 WCF 等现代技术或使用 C# 的其他技术,但 MetaTrader 根本不支持 COM 或仅支持 OOP。所以我需要一些网关组件,它必须是具有非对象接口的函数库。当然,它需要使用C++。但我没有成功地在网上找到一些如何从 C++ 函数库调用 C# COM+ DLL 的示例。我能找到的所有示例都使用 MetaTrader 不支持的组件 C++ 程序集。所以,我不能在 C++ 中使用命名空间等。我编写了一个 COM+ 服务器应用程序,可以通过以下几行轻松从 C# 调用
object c2 = Activator.CreateInstance(Type.GetTypeFromProgID("Imutome.COMPlusCache.Cache"));
c2.GetType().InvokeMember("OnTransfer", BindingFlags.InvokeMethod, null, c2, null);
但是当我尝试用 C++ 编写类似的内容时,
CLSIDFromProgID(OLESTR("Imutome.COMPlusCache.Cache"), &rclsid);
HRESULT hres = CoCreateInstance(rclsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&ppv);
我在 ppv 中只得到零,在 hres 中得到“0x80040154 类未注册”。我不确定需要什么标志或什么接口,但无论我尝试什么,我都会遇到相同的错误。尽管在 C# 中一切正常。请告诉我需要更改什么才能使 C++ 成功创建 COM+ 对象实例。
I've not found some example that really works. I need to create an interaction system for MetaTrader. It's better to use modern technologies like WCF or somehting else using C#, but MetaTrader doesn't support COM or just OOP at all. So I need some gateway component that must be functions library with non-object interface. Surely, it requires usage of C++. But I'm not succeeded to find over the Web some example how to call from a C++ functions library a C# COM+ DLL. All the examples I could find use component C++ assemblies that are not supported by MetaTrader. So, I can't use namespace, etc. in C++. I wrote a COM+ server application that is easy to call from C# by the following lines
object c2 = Activator.CreateInstance(Type.GetTypeFromProgID("Imutome.COMPlusCache.Cache"));
c2.GetType().InvokeMember("OnTransfer", BindingFlags.InvokeMethod, null, c2, null);
But when I'm trying to write in C++ something like this
CLSIDFromProgID(OLESTR("Imutome.COMPlusCache.Cache"), &rclsid);
HRESULT hres = CoCreateInstance(rclsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&ppv);
I get just zeros in ppv and "0x80040154 Class not registered" in hres. I'm not sure what flags or what interface are required but I get the same error whatever I try. Although in C# everything works. Tell me please what do I need to change to make C++ succesfully create a COM+ object instance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为问题出在您注册组件的方式上。
你应该使用:
或
并将您的组件库放入 GAC 或可执行位置。
希望这有帮助。
ComponentService GUI 不一样。
I believe the problem is in the way you register your component.
You shoud use:
OR
AND put your component library to GAC or your executable location.
Hope this helps.
ComponentService GUI is not the same.