C#プログラムから呼び出す必要のあるサードパーティのDLLがあります。
プロジェクトの参照にdllを追加し、VS2010がCOM-相互運用ラッパーdllを生成しました。DLLで定義されたインターフェイスとクラスが私のプログラムで利用可能になり、正常に機能するようになりました。
ここで問題となるのは、整数とTSEntオブジェクトのキーと値のペアで構成される「ディクショナリ」を返すメソッドです。DLLでは、戻りタイプはVARIANT *として定義され、ラッパーでは「オブジェクト」として定義されます。DLLには辞書インターフェイスは含まれていません。
この戻り値を正常にキャストできるC#で見つけた唯一のインターフェイスは、IEnumerableです。ただし、foreachステートメントを使用して戻り値から値をフェッチすると、基になるキーと値のペアのキー部分であるint32のみが返されます。
この辞書の値部分を取得するにはどうすればよいですか?
これをIDictionary、IDictionary <int、object>、Hashtableなどにキャストしようとしましたが、すべて同じ結果になりました...キャストエラー。DLLは元々VisualBasicの初期バージョンで書かれていると思います。
助けてください...この問題は過去2週間私を悩ませてきました...
よろしくジェスパーサンドガード
ドキュメントから:
Query(String ObjectType, String PropName, String Pattern)
Queries the repository for Objects of type ObjectType with the property PropName
that have the value Pattern. Returns a Dictionary object containing a list of TSEnt
objects that the repository returns. This list is keyed by the index of the elements
in the list starting from 0. Pattern can contain ‘*’ as wildcard. If the Property
name is a Domained value, use the Display Value in the repository model.
DLL(ITypeLib Viewer)から:
[id(0x00000006), helpstring("method Query")]
HRESULT Query(
[in] BSTR Type,
[in] BSTR PropertyName,
[in] BSTR Pattern,
[out, retval] VARIANT* result);
VSでの定義:
[DispId(6)]
object Query(string Type, string PropertyName, string Pattern);