0

私は C# COM サーバーと C++ com クライアントを持っています。Windows 2008 R2 でテストを行い、Windows 7 で開発しています。

次のように宣言されたロギング用のコールバックインターフェイスがあります

    public interface ILoggerCallback
    {
        void critical(ref string message);
        void debug(ref string message);
        void error(ref string message);
        void infohigh(ref string message);
        void infolow(ref string message);
        void warning(ref string message);
    }/**/

C++ COM クライアントはインターフェイス (クラス log_cb) を実装し、今のところすべてをコンソールに出力します。

 HRESULT __stdcall log_cb::raw_infohigh(BSTR* message )
 {  
    wprintf(L"\nwarning: %s", *message);    
    return S_OK;
 }

ブースト スレッドを使用して COM クライアントでワーカー スレッドを作成し、COM の初期化、インスタンスの作成などを行いました。次のコールバックが c#com サーバーで行われた場合

 log.infohigh("Successfully initialised server");

Windows 2008 R2 テスト マシンではこの例外でログ コールバックが失敗することに気付きましたが、win7 開発マシンでは正常に動作します。

C:\TEMP\COMServerTest>SampleCOMClient.exe

Successfully created instance
Unhandled Exception: System.AccessViolationException: Attempted to read or write    protected memory. This is often an indication that other memory is corrupt.
  at System.StubHelpers.InterfaceMarshaler.ConvertToManaged(IntPtr pUnk, IntPtr itfMT, IntPtr classMT, Int32 flags)

これを Windows スレッディングで試したところ、問題なく動作しました。単なる包含

#include "boost/thread.hpp"

このエラーが発生します。

ここで何が起こっているのか誰か説明してくれませんか。どうもありがとう。

4

0 に答える 0