C#COM服务器,C ++ COM客户端,回调崩溃

时间:2013-08-22 11:18:39

标签: c# multithreading boost com

我有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"

导致此错误。

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

0 个答案:

没有答案