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>. Essayez
msclr \ marshal_cppstd.h code>.
@Chris Schmich: Merci - Maintenant, il compile parfaitement =)