将System::String^转换为无符号字符*

将System::String^转换为无符号字符*,string,c++-cli,unsigned-char,String,C++ Cli,Unsigned Char,我有一个C++Dll,我正在从一个C#项目调用它。在函数中,我需要一个字符串作为参数,然后将其转换为无符号字符*。我正在使用System.String^将C++字符串转换为C++字符串。在C++中,如何将字符串^转换为未签名的字符*?< /p> 我试过这个,但不起作用: void Function(String^ userInput) { unsigned char* msg; strcpy((char*)msg, userInput); // Doesn't work

我有一个C++Dll,我正在从一个C#项目调用它。在函数中,我需要一个字符串作为参数,然后将其转换为无符号字符*。我正在使用System.String^将C++字符串转换为C++字符串。在C++中,如何将字符串^转换为未签名的字符*?< /p> 我试过这个,但不起作用:

void Function(String^ userInput)
{
    unsigned char* msg;
    strcpy((char*)msg, userInput); // Doesn't work    
}

您可以使用以下代码执行此操作:

using namespace System::Runtime::InteropServices;
const unsigned char* str = (const unsigned char*) (Marshal::StringToHGlobalAnsi(managedString)).ToPointer();

另外,请记住,当字符串不再使用时,请使用Marshal::FreeHGlobal()释放新分配的资源,否则将导致内存泄漏。

您可以使用以下代码执行此操作:

using namespace System::Runtime::InteropServices;
const unsigned char* str = (const unsigned char*) (Marshal::StringToHGlobalAnsi(managedString)).ToPointer();

另外,请记住,当字符串不再使用时,请使用Marshal::FreeHGlobal()释放新分配的资源,否则将导致内存泄漏。

谢谢。我需要一个未签名的字符*所以我刚刚将常量改为未签名,现在它可以工作了。谢谢。我需要一个无符号字符*所以我刚刚将常量改为无符号,现在它可以工作了。我稍后在代码中调用另一个需要无符号字符的函数*我稍后在代码中调用另一个需要无符号字符的函数*