Ordonnancement des chaînes, C ++ en C #: 'la conversion n'est pas prise en charge par la bibliothèque'

StackOverflow https://stackoverflow.com/questions/1645145

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.

Était-ce utile?

La solution

La documentation ne dit pas qu'il faut une const chaîne ^. Enlevez le const.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top