0

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);
4

1 に答える 1

2

記憶が正しければ、それは古い COM ランタイム スクリプト ライブラリの Dictionary オブジェクトです: SCRRUN.dll COM-TLB をプロジェクトにインポートし、取得するバリアントをその型にキャストします。

于 2012-06-25T16:09:42.400 に答える