Cálculo de cadenas, C ++ a C #: 'la biblioteca no admite la conversión'
-
10-07-2019 - |
Pregunta
Resumen:
Cuando intento utilizar la clasificación para pasar datos de cadena a una DLL de C ++ desde C #, obtengo
'msclr :: interop :: error_reporting_helper < _To_Type, _From_Type > :: marshal_as': Esta conversión no es compatible con la biblioteca o el archivo de encabezado necesario Para esta conversión no está incluido. Consulte la documentación en 'Cómo: extender el Marshaling Biblioteca 'para agregar la suya método de cálculo de referencias. c: \ programa archivos \ microsoft visual studio 9.0 \ vc \ include \ msclr \ marshal.h 203
Estoy usando Visual Studio 2008 Professional Edition; Visual C ++ 2008; .Net 3.5.
Detalle:
El método en cuestión (en su forma más simple) es el siguiente:
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);
}
Los encabezados incluidos en el orden en que se presentan al preprocesador son
#include "StdAfx.h"
#include <string>
#include <iostream>
#include <msclr\marshal_cppstd.h>
#using <mscorlib.dll>
using namespace System;
using namespace msclr::interop;
Esto me parece que se ajusta al ejemplo citado aquí y a la documentación en MSDN (Stack Overflow se niega a dejarme citar una segunda URL); sin embargo, claramente el compilador de C ++ no encuentra la conversión que necesita.
¿Qué me he perdido? Confieso que no soy muy experto con C ++ o con Windows.
Solución
La documentación no dice que se necesita una const String ^. Retire el const.