-1

Wcf サービス ライブラリを作成していて、アンマネージ com dll をロードしたいと考えています。com dll スレッド モデルは設定されていないため、メインの STAスレッド モデルでのみ実行されるシングル スレッドのレガシー コンポーネントです。

wcf サービスでは、アパートを STAのように設定しました

com コンポーネントのインスタンスを作成しようとすると、例外が発生します。

System.Runtime.InteropServices.SEHException : External component has thrown an exception.

com dll をデバッグすると、エラーがスローされましたRPC_E_WRONG_THREAD

スレッド モデルを に設定することで問題を解決できますFree Threaded Marshaller。しかし、com dll の現在のスレッド モデルを変更することはできません。

どうすれば wcf サービスから com dll にアクセスできますか?

.Net フレームワーク 4.0、Windows 7 x64

4

1 に答える 1

0

さて、ようやく問題が解決しました....

手順:

  1. wcf サービス ライブラリを WindowsForm アプリにホストします。
  2. WindowsForm アプリのスレッド アパートメントを STA に設定する
  3. wcf サービスで定義されたディスパッチャーを現在のディスパッチャーに設定します

    WcfTest.Service1.disp = System.Windows.Threading.Dispatcher.CurrentDispatcher;

それだけです:)

于 2013-03-06T10:04:44.473 に答える