Ordonnancement des chaînes, C ++ en C #: 'la conversion n'est pas prise en charge par la bibliothèque'
-
10-07-2019 - |
Question
Résumé:
Lorsque je tente d'utiliser le marshalling pour transmettre des données de chaîne dans une DLL C ++ à partir de C #, je reçois
'msclr :: interop :: error_reporting_helper < _To_Type, _From_Type > :: marshal_as': Cette conversion n'est pas supportée par la bibliothèque ou le fichier d'en-tête nécessaire pour cette conversion n'est pas inclus. Veuillez vous référer à la documentation sur 'Comment: prolonger le marshaling Bibliothèque 'pour ajouter votre propre méthode de marshaling. c: \ programme fichiers \ microsoft visual studio 9.0 \ vc \ include \ msclr \ marshal.h 203
J'utilise Visual Studio 2008 Professional Edition; Visual C ++ 2008; .Net 3.5.
Détail:
La méthode concernée (dans sa forme la plus simple) est la suivante:
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'en-tête inclut dans l'ordre dans lequel ils sont présentés au préprocesseur
#include "StdAfx.h"
#include <string>
#include <iostream>
#include <msclr\marshal_cppstd.h>
#using <mscorlib.dll>
using namespace System;
using namespace msclr::interop;
Cela me semble conforme à l'exemple cité ici . et à la documentation de MSDN (Stack Overflow refuse de me laisser citer une deuxième URL); toutefois, le compilateur C ++ ne trouve pas la conversion dont il a besoin.
Qu'est-ce que j'ai manqué? J'avoue que je ne suis pas très expert en C ++ ni avec Windows.
La solution
La documentation ne dit pas qu'il faut une const chaîne ^. Enlevez le const.