我有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 Client中使用boost线程创建了一个工作线程来进行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"
导致此错误。
有人能解释一下这里发生了什么。 非常感谢。