编组字符串,C ++到C#:库不支持'转换'

时间:2009-10-29 16:59:09

标签: c# string visual-c++ marshalling

要点:

当尝试使用编组将字符串数据从C#传递到C ++ DLL时,我得到了

  

'msclr ::互操作:: error_reporting_helper< _To_Type,_From_Type> :: marshal_as':   不支持此转换   库或所需的头文件   此转换不包括在内。   请参阅文档   '如何:延长封缄   图书馆'用于添加您自己的   编组方法。 C:\程序   files \ microsoft visual studio   9.0 \ vc \ include \ msclr \ marshal.h 203

我正在使用Visual Studio 2008专业版; Visual C ++ 2008; .Net 3.5。

详情:

有关方法(最简单的形式)如下:

LibDSSDLL::DssOutputSocketFacade::DssOutputSocketFacade(const System::String^ name)
{
    marshal_context^ context = gcnew marshal_context();
    std::string n = context->marshal_as<std::string>(name);

    this->socket = new DssOutputSocket( n);
}

标题包括它们呈现给预处理器的顺序

#include "StdAfx.h"
#include <string>
#include <iostream>
#include <msclr\marshal_cppstd.h>

#using <mscorlib.dll>
using namespace System;
using namespace msclr::interop;

这看起来好像它符合引用的示例here和MSDN上的文档(Stack Overflow拒绝让我引用第二个URL);但很明显,C ++编译器没有找到它所需的转换。

我错过了什么?我承认我对C ++或Windows不是很专业。

1 个答案:

答案 0 :(得分:2)

文档没有说它需要 const 字符串^。删除const。