【发布时间】:2013-01-08 22:20:56
【问题描述】:
Visual Studio 2008 (C#) 为我的 COM 对象创建了互操作。我使用的主要对象是:OPCHDAServerClass、IOPCHDAItems 和 OPCHDAItem。代码是:
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。我不知道为什么服务器(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)
有没有人看到类似的问题并知道解决方法?
【问题讨论】:
-
您说这是您在伪代码中所做的,但您的实际代码是什么?另外,OPCHDAServerClass 是否真的有一个名为 OPCHDAItems 的属性?
-
避免使用以“Class”结尾的类型名称。它们是 COM 服务器中实际不存在的合成类型,在某些情况下可能会导致此类问题。尝试新的 OPCHDAServer 或 IOPCHDAServer
-
你能进入生成的COM吗?
-
我使用的 COM 对象不是我开发的。它们是购买的软件平台的一部分。我刚刚使用 VS2008 中的“添加引用”让 VS2008 为它们创建互操作。作为汉斯评论的一部分。 OPCHDAServerClass 是互操作创建的。我纠正了我上面的问题。那里列出的代码是真实代码,而不是伪代码。我的 python 代码(在运行 Makepy 之后)被添加到问题中。