TLBIMP.EXEを使用して、商用のクローズドソースプログラムのラッパーを作成しました。(プログラムはVB6で参照できますが、Visual Studioで直接参照することはできません。)VSはラッパーを適切に参照し、オブジェクトを作成できます。ただし、オブジェクトのメソッドを呼び出すとすぐに、次のエラーでクラッシュします。
{"タイプ'InfoWorksLib.InfoWorksClass'のCOMオブジェクトをインターフェイスタイプ'InfoWorksLib.IIW'にキャストできません。IIDを持つインターフェイスのCOMコンポーネントに対するQueryInterface呼び出しが原因で、この操作は失敗しました' {61305DAA-3868-41AD-956D-081010E80E8B }'は、次のエラーのために失敗しました:そのようなインターフェイスはサポートされていません(HRESULTからの例外:0x80004002(E_NOINTERFACE))。 "}
私のコードは次のようになります:
void Function()
{
InfoWorksLib.IIW iw = new InfoWorksLib.InfoWorksClass(); // Works
iw.InitForTest(0, "", ""); // crashes with the above exception
}
宣言と作成の可能なすべての組み合わせを試しました(例InfoWorks iw = new InfoWorksClass()
など)
VSのオブジェクトエクスプローラーは次のことを示しています。
InfoWorksLib
InfoWorksLib
EIWErrors
IIW (interface)
InfoWorks (interface)
Base Types (folder)
IIW (interface)
InfoWorksClass
Base Types (folder)
IIW
InfoWorks
IIW
Object
これはWindows7の場合です。WindowsXP仮想マシンでは、同じコードが正常に機能します。
上記の例外を引き起こしている可能性のあるWindows7のセキュリティ問題はありますか?ラッパーアセンブリは、システム以外のディレクトリに配置する必要がありますか?