C#无法查看或使用COM对象';s方法

C#无法查看或使用COM对象';s方法,c#,com,C#,Com,在阅读了无数关于从C#访问COM对象的问题之后,似乎没有什么能解决我的问题。我在C++中创建了一个COM对象并成功注册了它。OLEView可以查看并创建我的对象的实例。我还可以创建一个实例,并用一个简单的单独的C++应用程序调用它的方法。 在C#中,我在引用管理器->COM->类型库中添加了DLL,似乎能够创建对象的实例(名为Coffee): GUID表示COM对象在my.idl中的coclass: ... [ uuid(D857715A-BEB9-4436-BBB7-1143F6511

在阅读了无数关于从C#访问COM对象的问题之后,似乎没有什么能解决我的问题。我在C++中创建了一个COM对象并成功注册了它。OLEView可以查看并创建我的对象的实例。我还可以创建一个实例,并用一个简单的单独的C++应用程序调用它的方法。 在C#中,我在引用管理器->COM->类型库中添加了DLL,似乎能够创建对象的实例(名为Coffee):

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

...
[
    uuid(D857715A-BEB9-4436-BBB7-1143F651196C)      
]
coclass Coffee
{
    [default] interface ICoffee;
    [default, source] dispinterface _ICoffeeEvents;
};
此对象包含一个成员变量'ounces',一个get_uu和put_uu,以及一个名为TestMethod的方法,该方法除了返回S_OK外不执行任何操作。都可以从C++调用。在C#中,intellisense只看到对象的“int ICoffee.Ounces”。get_uu和put_uu不会显示,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();
};

嗯,我从零开始做了两个测试项目,这次(使用早期绑定访问)我能够访问我的方法。不知道出了什么事。。但这个问题已经解决。

你能显示ICoffee描述吗?@Victor补充说ICoffee可能是你应该使用ICoffee xx=(ICoffee)obj;而是咖啡xx=(咖啡)obj;?
[
  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();
};