Выделение строк, C ++ в C #: «преобразование не поддерживается библиотекой» - PullRequest
1 голос
/ 29 октября 2009

Резюме:

При попытке использовать маршаллинг для передачи строковых данных в 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.

1 Ответ

2 голосов
/ 02 ноября 2009

В документации не сказано, что требуется const String ^. Снимите констант.

...