Triagem cordas, C ++ para C #: 'conversão não é suportado pela biblioteca'
-
10-07-2019 - |
Pergunta
Sumário:
Ao tentar usar triagem para passar dados de cadeia em um ++ DLL C de C #, estou ficando
'msclr :: interoperabilidade :: error_reporting_helper <_To_Type, _From_Type> :: marshal_as': Esta conversão não é suportada pela a biblioteca ou o arquivo de cabeçalho necessária para esta conversão não é incluído. Consulte a documentação sobre 'Como: Estender o empacotamento Biblioteca' para adicionar seu próprio método de empacotamento. C: \ Program Microsoft Visual Studio arquivos \ 9.0 \ vc \ include \ msclr \ marshal.h 203
Estou usando o Visual Studio 2008 Professional Edition; Visual C ++ 2008; Net 3.5.
Detalhe:
O método em questão (na sua forma mais simples) é como se segue:
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);
}
O cabeçalho inclui na ordem em que são apresentados para o pré-processador são
#include "StdAfx.h"
#include <string>
#include <iostream>
#include <msclr\marshal_cppstd.h>
#using <mscorlib.dll>
using namespace System;
using namespace msclr::interop;
Este parece-me como se ele está de acordo com o exemplo citado aqui e a documentação no MSDN (Stack Overflow se recusa a deixar-me citar uma segunda URL); no entanto claramente o compilador C ++ não é encontrar a conversão ele precisa.
O que eu perdi? Confesso que não sou muito perito com C ++ ou com o Windows.
Solução
A documentação não diz que leva um const String ^. Remova a const.