0

現在、Silverlight でいくつかの COM dll を使用していますが、奇妙な問題が発生しています。私が作成した 2 つの .NET COM dll を使用していましたが、どちらも DllImport を通じて他の dll を参照しています。彼らはうまく機能していました。

次に、3 つ目の COM dll をプロジェクトに追加しました。これは、DllImport を介して他の dll も参照します。作成するとすぐに、他の2つは壊れます。彼らは、使用している他の dll が見つからないというエラーをスローします。ただし、3 番目の dll は正常に動作します。

これが私がそれらを作成している方法です

AutomationFactory.CreateObject("Com1");
AutomationFactory.CreateObject("Com2");
AutomationFactory.CreateObject("Com3");

ここでも、Com1 と Com2 のみを使用すると、完全に正常に動作します。Com3 を追加すると正常に動作しますが、他の 2 つはネイティブ dll を見つけることができません。

Com3 で関数を呼び出すことさえしません。作成するだけで、他の関数は機能しなくなります。

何か案は?どういうわけかそれがネイティブdllである可能性があると思いますか? 3 番目の機能がどのように機能するかはわかりませんが、他の機能は機能しません。ネイティブ dll が何かを壊すと、すべての機能が停止すると思われるでしょう。

4

1 に答える 1

0

私はそれを機能させる方法を考え出しました。なぜこれを行う必要があるのか​​ 、まだ100%確信が持てません。

Directory.SetCurrentDirectory を使用して、現在のディレクトリをネイティブ dll のあるディレクトリに設定すると、機能します。

Com3 がディレクトリを変更しているようには見えませんが、何らかの理由で、他の COM dll が登録された場所ではなく、現在の作業ディレクトリを参照するようになっています。

于 2012-07-12T02:21:54.573 に答える