Donc, je travaille dans CLR, Création de .NET DLL dans Visual C ++.
i TRU ce code: P>
#include <msclr\marshal.h>
#include <stdlib.h>
#include <string.h>
using namespace msclr::interop;
namespace NSSTW
{
public ref class CFEW
{
public:
CFEW() {}
static System::String^ echo(System::String^ stringToReturn)
{
return stringToReturn;
}
static bool InitFile(System::String^ fileName, System::String^ container)
{
std::string sys_fileName = marshal_as<std::string>(fileName);;
std::string sys_container = marshal_as<std::string>(container);;
return enc.InitFile(sys_fileName, sys_container);
}
...
4 Réponses :
Comment convertir de System :: String * sur Char * à Visual C ++ p>
Une fois que vous avez un Char * code>, transmettez-le simplement sur le std :: string code> constructeur. p>
Si vous utilisez VS2008 ou plus récent, vous pouvez le faire très simplement avec le Marshaling automatique ajouté à C ++ . Par exemple, vous pouvez convertir de Il s'agit du même maréchalage utilisé pour les appels P / invoquer. < / p> p> System :: string ^ code> sur std :: string code> via marshal_as code> :
J'aime l'idée mais comment déclarer marshal_as dans mon code? où et que dois-je écrire pour le déclarer (se débarrasser de l'erreur C2065), j'utilise vs2008
Pour aller de System :: string ^ code> à std :: string code>, vous devez #include Marshal_as code> est déclaré.
Quand j'essaye #include
Désolé, j'étais légèrement éteint, vous devez inclure msclr \ marshal_cppstd.h code>. Avez-vous toujours ce problème? Votre code ci-dessus indique toujours msclr \ marshal.h code>.
msclr \ marshal.h va aussi bien. Merci btw. :)
de l'article Comment convertir System :: String ^ à stdd :: string ou std :: wstring sur msdn: utilisation: p>
Vous devez inclure Marshal_cppstd.h pour convertir la chaîne ^ à stdd :: String.
Vous ne mentionnez pas si vous vous inquiétez du tout sur les caractères non-ASCII. Si vous avez besoin d'unicode (et sinon, pourquoi pas !?), il y a un maréhal_as qui retourne une STD :: wstring. P>
Si vous utilisez UTF8, vous devrez rouler le vôtre. Vous pouvez utiliser une boucle simple: p>
Vous avez inclus
msclr \ marshal.h code>. Essayezmsclr \ marshal_cppstd.h code>.@Chris Schmich: Merci - Maintenant, il compile parfaitement =)