C# 调用 vc++写的com组件: 环境 vs2008.
目的, 转换 BSTR  为 std:string
以下用例毫无意外的在C#调用时都会抛出异常:“尝试读取或写入受保护的内存”
而在纯vc++环境中全部可以正常运行。用例1:STDMETHODIMP CGaAnn::InitSettings(BSTR appPath, BSTR fileName)
{
BSTR bstrText = _bstr_t("This is a test"); return S_OK;
}用例2:
STDMETHODIMP CGaAnn::InitSettings(BSTR appPath, BSTR fileName)
{
string str = (const char*)_bstr_t(appPath); return S_OK;
}用例3:
STDMETHODIMP CGaAnn::InitSettings(BSTR appPath, BSTR fileName)
{
_com_util::ConvertBSTRToString(appPath); return S_OK;
}

解决方案 »

  1.   

    连std:的 ifstream fin(pinipath); 在com里用了都会报错 “尝试读取或写入受保护的内存” 啊。
      

  2.   

    楼上是我的另一个id,
    连std:的 ifstream fin(pinipath); 在com里用了都会报错 “尝试读取或写入受保护的内存” 啊。
    但是我在cmd窗口中运行程序,什么都正常, C#调用程序是winfrom的, 我在cmd窗口中引导打开,什么问题都没有,如果用鼠标双击打开,就不行,救命啊,我快疯了~~
      

  3.   

    不应该有问题, .NET会marshal到COM这边
    你把复现问题的代码发给我,[email protected]我帮你看一下