Stringhe di marshalling, da C ++ a C #: "la conversione non è supportata dalla libreria"
-
10-07-2019 - |
Domanda
Sommario:
Quando tento di usare il marshalling per passare i dati di stringa in una DLL C ++ da C #, ottengo
'msclr :: :: interoperabilità error_reporting_helper lt; _To_Type, _From_Type gt; :: marshal_as & &': Questa conversione non è supportata da la libreria o il file di intestazione necessari per questa conversione non è incluso. Si prega di fare riferimento alla documentazione su 'Come: estendere il marshalling Libreria "per aggiungere la tua metodo di marshalling. C: \ Program files \ microsoft visual studio 9.0 \ vc \ include \ msclr \ marshal.h 203
Sto usando Visual Studio 2008 Professional Edition; Visual C ++ 2008; .Net 3.5.
Particolare:
Il metodo in questione (nella sua forma più semplice) è il seguente:
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);
}
L'intestazione include nell'ordine in cui sono presentati al preprocessore
#include "StdAfx.h"
#include <string>
#include <iostream>
#include <msclr\marshal_cppstd.h>
#using <mscorlib.dll>
using namespace System;
using namespace msclr::interop;
Mi sembra che sia conforme all'esempio citato qui e alla documentazione su MSDN (StackTranslate.it si rifiuta di farmi citare un secondo URL); tuttavia chiaramente il compilatore C ++ non trova la conversione di cui ha bisogno.
Cosa mi sono perso? Confesso di non essere molto esperto di C ++ o di Windows.
Soluzione
La documentazione non dice che richiede una const stringa ^. Rimuovi la const.