3

Visual Studio 2008 (C#) は、COM オブジェクトの相互運用機能を作成しました。私が使用している主なオブジェクトはOPCHDAServerClass、 、IOPCHDAItems、およびOPCHDAItemです。コードは次のとおりです。

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

3 行目で、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)

誰かが同様の問題を見て、回避策を知っていますか?

4

1 に答える 1

0

宣言されたプロパティの型は でOPCHDAItemsはないようですIOPCHDAItems- それはOPCHDAServerClassです。C# は静的に型付けされた言語です。明示的に指示されない限り COM インターフェイスを型キャストしません。次のように言い換えます。

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 に答える