Маршалинг строк с C++ на C#:«конвертация не поддерживается библиотекой»
-
10-07-2019 - |
Вопрос
Краткое содержание:
При попытке использовать маршалинг для передачи строковых данных в C++ DLL из C# я получаю
'msclr::interop::error_reporting_helper<_To_Type,_From_Type>::marshal_as':Это преобразование не поддерживается библиотекой или файл заголовка, необходимый для этого преобразования, не включен.Пожалуйста, обратитесь к документации «Как:Расширьте библиотеку маршалирования «для добавления своего собственного метода маршалирования.C: Program Files Microsoft Visual Studio 9.0 vc include msclr marshal.h 203
Я использую Visual Studio 2008 Professional Edition;Визуал С++ 2008;.Нет 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;
Мне кажется, это соответствует приведенному примеру. здесь и к документации в MSDN (Stack Overflow отказывается позволить мне указать второй URL-адрес);однако очевидно, что компилятор C++ не находит нужного ему преобразования.
Что я пропустил?Признаюсь, я не очень разбираюсь в C++ и Windows.
Решение
В документации не сказано, что это требует константа Строка^.Удалите константу.