How do i convert const wchar_t* to System::String?
Solution 1
Use the constructor; like this:
const wchar_t* const pStr1 = ...;
System::String^ const str1 = gcnew System::String(pStr1);
const char* const pStr2 = ...;
System::String^ const str2 = gcnew System::String(pStr2);
If you're using the standard C++ string classes (std::wstring
or std::string
), you can get a pointer with the c_str()
method. Your code then might be
const std::wstring const std_str1 = ...;
System::String^ const str1 = gcnew System::String(std_str1.c_str());
See System.String and extensive discussion here.
Solution 2
You could also try:
#include <msclr\marshal_cppstd.h>
...
String^ managedString = msclr::interop::marshal_as<String^>(/* std::string or wchar_t * or const wchar_t * */);
You can refer to Overview of Marshaling in C++ for all the supported types you could use
Solution 3
If on doing Dan's solution you get an error cannot convert parameter 1 from 'std::string' to 'const wchar_t *'
, then you're asking the wrong question. Instead of asking how to convert wchar_t*
to String^
, you should be asking how to convert std::string
to String^
.
Use the built-in c_str
function to get a plain char*
out of the std::string
, and pass that to the constructor.
std::string unmanaged = ...;
String^ managed = gcnew String(unmanaged.c_str());
FreelanceCoder
Currently working on a game using LWJGL and Java. Really struggling to get things working the way I want them to though :(
Updated on June 11, 2022Comments
-
FreelanceCoder almost 2 years
I need to convert my SHA1 (wchar_t*) to a normal String^ in order to use it in a certain function. Any ideas? I tried Google but all the results were the exact opposite of my question. :\
NOTE: I am using C++.NET framework and Windows Forms Applications