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.

È stato utile?

Soluzione

La documentazione non dice che richiede una const stringa ^. Rimuovi la const.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top