[英]Unable to cast object … to type
Visual Studio 2008(C#)為我的COM對象創建了Interop。 我使用的主要對象是: 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
為IOPCHDAItems
?
我在python中進行了初始原型設計工作正常,所以我知道COM組件是有用的。 這是python代碼:
server = win32com.client.dynamic.Dispatch("Uniformance.OPCHDA.Automation.1")
server.Connect("OPC.PHDServerHDA.1")
item = server.OPCHDAItems.AddItem("MyItem", 1)
有沒有人看過類似的問題並知道一項工作?
看起來聲明的屬性類型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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.