要点:
当尝试使用编组将字符串数据从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不是很专业。
答案 0 :(得分:2)
文档没有说它需要 const 字符串^。删除const。