C#无法查看或使用COM对象的方法

时间:2015-11-01 23:58:58

标签: c# com

在阅读有关从C#访问COM对象的无数问题后,似乎没有解决我的问题。我用C ++创建了一个COM对象并成功注册了它。 OLEView可以查看和创建我的对象的实例。我还能够创建一个实例并使用一个简单的单独C ++应用程序调用它的方法。

在C#中,我在参考管理器中添加了DLL - > COM - >键入Libraries,似乎能够创建对象的实例(名为Coffee):

System.Guid g = new System.Guid("D857715A-BEB9-4436-BBB7-1143F651196C");
Type myType = Type.GetTypeFromCLSID(g);
dynamic obj = Activator.CreateInstance(myType);
Coffee xx = (Coffee)obj;

GUID表示我的.idl中COM对象的coclass:

...
[
    uuid(D857715A-BEB9-4436-BBB7-1143F651196C)      
]
coclass Coffee
{
    [default] interface ICoffee;
    [default, source] dispinterface _ICoffeeEvents;
};

这个对象包含一个成员变量'ounces',一个get_和put_,以及一个名为TestMethod的方法,除了返回S_OK之外什么都不做。所有都可以从C ++中调用。在C#中,除了'int ICoffee.Ounces'之外,intellisense看不到任何对象。 get_和put_没有显示,TestMethod也没有显示。

我也尝试过Type.GetMethod(“TestMethod”)并调用它,但MethidInfo最终为null:

MethodInfo testMethod = myType.GetMethod("TestMethod");
object value = testMethod.Invoke(obj, new object[] { });

还尝试在动态对象上调用它:

obj.TestMethod();

Additional information: 'System.__ComObject' does not contain a definition for 'TestMethod'

我到底错过了什么,不让C#完全使用该对象?

编辑: ICoffee in .idl:

[
  object,
  uuid(35B4618D-733B-453D-9714-FFCB35740FB2),
  dual,
  nonextensible,
  pointer_default(unique)
]
interface ICoffee : IDispatch{

  [propget, id(1)] HRESULT Ounces([out, retval] LONG* pVal);
  [propput, id(1)] HRESULT Ounces([in] LONG newVal);
  [id(2)] HRESULT GetOunces([in] LONG* nOunces);
  [id(3), helpstring("This is a test method")] HRESULT TestMethod();
};

1 个答案:

答案 0 :(得分:0)

好吧,我从头开始学习了两个测试项目,这次(使用早期访问)我能够访问我的方法。不知道出了什么问题..但这已经解决了。