私は 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"
このエラーが発生します。
ここで何が起こっているのか誰か説明してくれませんか。どうもありがとう。