3

Visual Studio 2008 (C#) 为我的 COM 对象创建了互操作。我使用的主要对象是:OPCHDAServerClass、、IOPCHDAItemsOPCHDAItem。代码是:

OPCHDAServerClass server = new OPCHDAServerClass();
server.Connect("OPC.PHDServerHDA.1");
OPCHDAItem item = server.OPCHDAItems.AddItem("MyItem",1);

在第三行,该AddItem方法应该返回一个OPCHDAItem. 互操作定义为AddItem

[DispId(1610743813)]
OPCHDAItem AddItem(string ItemID, int ClientHandle);

我得到的例外是:

无法将“OPCHDAServerClass”类型的对象转换为“IOPCHDAItems”类型。

我不明白为什么我会收到此错误消息。 server.OPCHDAItems实现IOPCHDAItems。我不知道为什么 server( OPCHDAServerClass) 被强制转换为IOPCHDAItems

我在 python 中进行了初始原型设计,效果很好,所以我知道 COM 组件是正常的。这是python代码:

server = win32com.client.dynamic.Dispatch("Uniformance.OPCHDA.Automation.1")
server.Connect("OPC.PHDServerHDA.1")
item = server.OPCHDAItems.AddItem("MyItem", 1)

有没有人见过类似的问题并知道解决方法?

4

1 回答 1

0

看起来声明的属性类型OPCHDAItems不是IOPCHDAItems- 它是OPCHDAServerClass. C# 是一种静态类型语言——除非明确告知,否则它不会对 COM 接口进行类型转换,除非告知,否则它不会使用 IDispatch。改写如下:

server.Connect("MyServerName");
OPCHDAItem item = (server.OPCHDAItems as IOPCHDAItems).AddItem("MyItem",1);

编辑:先试试这个:

IOPCHDAItems Items = server.OPCHDAItems;

还是同样的错误?怎么样

IOPCHDAItems Items = server.OPCHDAItems as IOPCHDAItems;
于 2013-01-25T01:01:09.443 回答