Frage

Zusammenfassung:

Beim Versuch, Rangier- zu verwenden String-Daten in eine C ++ DLL von C # passieren, ich bin immer

  

'msclr :: Interop :: error_reporting_helper <_To_Type, _From_Type> :: marshal_as':   Diese Umwandlung wird nicht unterstützt durch   die Bibliothek oder die Header-Datei benötigt   für diese Umwandlung ist nicht enthalten.   Bitte beachten Sie die Dokumentation auf   ‚Gewusst wie: Erweitern Sie die Marshalling   Library‘für die eigene Zugabe   Ordnende Methode. c: \ program   \ Microsoft Visual Studio   9.0 \ vc \ include \ msclr \ marshal.h 203

Ich bin mit Visual Studio 2008 Professional Edition; Visual C ++ 2008; .Net 3.5.

Detail:

Das Verfahren betrifft (in ihrer einfachsten Form) ist wie folgt:

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);
}

Der Header in der Reihenfolge enthält sie an den Präprozessor präsentiert werden, sind

#include "StdAfx.h"
#include <string>
#include <iostream>
#include <msclr\marshal_cppstd.h>

#using <mscorlib.dll>
using namespace System;
using namespace msclr::interop;

Das sieht mir, als ob es zum Beispiel entspricht zitiert hier und in der Dokumentation auf MSDN (Stack-Überlauf weigert sich, lassen Sie mich eine zweite URL zitieren); jedoch eindeutig die C ++ Compiler ist die Umwandlung nicht zu finden, die es braucht.

Was habe ich verpasst? Ich bekenne, ich bin nicht sehr erfahren mit C ++ oder Windows.

War es hilfreich?

Lösung

Die Dokumentation sagt nicht, es braucht ein const String ^. Entfernen Sie die konst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top