如何从C ++函数库中调用.Net COM +对象?

时间:2011-03-30 13:39:59

标签: c# c++ api com+

我没有找到一些真正有用的例子。我需要为MetaTrader创建一个交互系统。最好使用像WCF这样的现代技术或使用C#的其他技术,但MetaTrader根本不支持COM或只支持OOP。所以我需要一些必须是具有非对象接口的函数库的网关组件。当然,它需要使用C ++。但我没有成功通过Web找到一些如何从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 Class not registered”。我不确定需要什么标志或什么接口,但无论我尝试什么,我都会得到同样的错误。虽然在C#中一切正常。请告诉我,我需要更改什么才能使C ++成功创建COM +对象实例。

1 个答案:

答案 0 :(得分:1)

我认为问题在于您注册组件的方式。 你应该使用:

  

regasm your_component_name.dll / tlb   /代码库

OR

  

regasm your_component_name.dll / tlb

将您的组件库放到GAC或您的可执行位置。 希望这可以帮助。 ComponentService GUI不一样。