1

ハードウェアから情報を読み取る VSTO を使用して Microsft PowerPoint アドイン ソリューションを実行しています。ハードウェア開発者は、このハードウェアを制御するための SDK を提供してくれましたが、制御しようとすると問題が発生します。

私はこのライブラリを持っています ARS

クラスがあります ARS.BaseConnection

私はこの変数を持っています ARS.BaseConnection BaseConn;

問題は、タイプの新しいオブジェクトを作成するときですBaseConnection

BaseConn = new ARS.BaseConnection();

デバッガーには例外は表示されず、POWERPNT.exe がクラッシュして停止するだけです。

POWERPNT をデバッグしようとしましたが、アクセス違反の書き込み場所 0x00d20f78 と表示されます。しかし、私は PowerPoint をプログラミングしていません。

SDK のデモ プログラム (実際に動作する) には main の前に [STAThread] があることがわかったので、STA として実行する必要があると思うので、新しいスレッドを作成します。

    ARS.BaseConnection BaseConn;`

    public form1()
    {
        InitializeComponent();

        System.Threading.Thread thread = new System.Threading.Thread(createBase);
        thread.SetApartmentState(System.Threading.ApartmentState.STA);
        thread.Start();
        thread.Join();

        BaseConn.Open(); // There is the problem, when I'm trying to use open() BaseConn debuger says: COM object that has been separated from its underlying RCW cannot be used.
    }

    private void createBase()
    {
        BaseConn = new ARS.BaseConnection(); //If it runs in a STA tread doesn't crash.
    }

基になる RCW から分離されたCOM オブジェクトを使用できません。

どうすればこれを機能させることができますか?

4

1 に答える 1

0

そのオブジェクトには、その作成スレッドからのみアクセスできます。

別のスレッドからオブジェクトにアクセスする必要がある場合は、ディスパッチャーを使用してそのスレッドに切り替えることができます。

メイン スレッドで作成することを検討してください (最初にメイン スレッドを STA に設定します)。

于 2012-06-26T18:51:38.010 に答える