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 客户端中创建了一个工作线程,使用 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"

导致此错误。

谁能解释一下这里发生了什么。非常感谢。

4

0 回答 0