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.

¿Fue útil?

Solución

La documentación no dice que se necesita una const String ^. Retire el const.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top