Rangier-Strings, C ++ zu C #: ‚Umwandlung wird von der Bibliothek nicht unterstützt‘
-
10-07-2019 - |
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.
Lösung
Die Dokumentation sagt nicht, es braucht ein const String ^. Entfernen Sie die konst.