Резюме:
При попытке использовать маршаллинг для передачи строковых данных в C ++ DLL из C #, я получаю
msclr :: Interop :: error_reporting_helper <_To_Type, _From_Type> :: marshal_as ':
Это преобразование не поддерживается
необходимая библиотека или файл заголовка
для этого преобразования не входит.
Пожалуйста, обратитесь к документации по
Как: расширить маршалинг
Библиотека »для добавления своих
метод маршалинга. C: \ Program
файлы \ Microsoft Visual Studio
9.0 \ vc \ include \ msclr \ marshal.h 203
Я использую Visual Studio 2008 Professional Edition; Visual C ++ 2008; .Net 3.5.
Detail:
Рассматриваемый метод (в простейшем виде) выглядит следующим образом:
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;
Мне кажется, что это соответствует приведенному примеру здесь и документации MSDN (переполнение стека отказывается разрешать мне ссылаться на второй URL); однако ясно, что компилятор C ++ не находит нужного преобразования.
Что я пропустил? Признаюсь, я не очень разбираюсь в C ++ или Windows.