C++ cli 如何将System::IntPtr转换为字符* 可以告诉任何人如何在托管C++中转换系统:: 这是我的主要功能 int main(void) { String* strMessage = "Hello world"; CManagedClass* pCManagedClass = new CManagedClass();//working pCManagedClass->ShowMessage(strMessage);//working ****above said error here*** char* szMessage = (char*)Marshal::StringToHGlobalAnsi(strMessage); CUnmanagedClass cUnmanagedClass; cUnmanagedClass.ShowMessageBox(szMessage); Marshal::FreeHGlobal((int)szMessage); return 0; }

C++ cli 如何将System::IntPtr转换为字符* 可以告诉任何人如何在托管C++中转换系统:: 这是我的主要功能 int main(void) { String* strMessage = "Hello world"; CManagedClass* pCManagedClass = new CManagedClass();//working pCManagedClass->ShowMessage(strMessage);//working ****above said error here*** char* szMessage = (char*)Marshal::StringToHGlobalAnsi(strMessage); CUnmanagedClass cUnmanagedClass; cUnmanagedClass.ShowMessageBox(szMessage); Marshal::FreeHGlobal((int)szMessage); return 0; },c++-cli,C++ Cli,提前感谢我不是一个巨大的C++/CLI程序员,但是下面的内容应该可以很好地工作 IntPtr p = GetTheIntPtr(); char* pChar = reinterpret_cast<char*>(p.ToPointer()); IntPtr p=gettheintpr(); char*pChar=reinterpret_cast(p.ToPointer()); IntPtr类有一个名为ToPointer的方法,它以void*类型返回地址。在C++/CLI中可转换为c

提前感谢

我不是一个巨大的C++/CLI程序员,但是下面的内容应该可以很好地工作

IntPtr p = GetTheIntPtr();
char* pChar = reinterpret_cast<char*>(p.ToPointer());
IntPtr p=gettheintpr();
char*pChar=reinterpret_cast(p.ToPointer());
IntPtr类有一个名为ToPointer的方法,它以
void*
类型返回地址。在C++/CLI中可转换为
char*

编辑


在VS2008和VS2015上验证了这一点,我不是一个庞大的C++/CLI程序员,但以下内容应该可以正常工作

IntPtr p = GetTheIntPtr();
char* pChar = reinterpret_cast<char*>(p.ToPointer());
IntPtr p=gettheintpr();
char*pChar=reinterpret_cast(p.ToPointer());
IntPtr类有一个名为ToPointer的方法,它以
void*
类型返回地址。在C++/CLI中可转换为
char*

编辑


在VS2008和VS2015上验证了这一点注意

我想在JaredPar答案中添加一些内容。我不知道你的IntPtr来自何处,但你也应该使用pin_ptr,以防止垃圾收集器弄乱你的内存。我过去做过很多CLR/本机交互,使用pin_ptr是我通过艰苦的方式学会的事情之一

阅读以下内容:
注意

我想在JaredPar答案中添加一些内容。我不知道你的IntPtr来自何处,但你也应该使用pin_ptr,以防止垃圾收集器弄乱你的内存。我过去做过很多CLR/本机交互,使用pin_ptr是我通过艰苦的方式学会的事情之一

阅读以下内容: 而不是

char* szMessage = (char*)Marshal::StringToHGlobalAnsi(strMessage).ToPointer();
Marshal::FreeHGlobal((int)szMessage);
使用

封送上下文转换。
const char*szMessage=conversions.marshal_as(strMessage);

它自己清理,C++的魔力。< /P> < P>代替

char* szMessage = (char*)Marshal::StringToHGlobalAnsi(strMessage).ToPointer();
Marshal::FreeHGlobal((int)szMessage);
使用

封送上下文转换。
const char*szMessage=conversions.marshal_as(strMessage);

它自己清理,C++RAII. < /P>魔法> C++的返回值::StuttoToGualAlnsi是非托管内存,不需要被钉住。<代码>返回::StrugtoHgLoLalAnsi/<代码>处于非托管内存,不需要是PNNED。FYI,第二个代码块中有一个键入。(没有足够的重复更改)。
封送上下文转换。
应该是
封送上下文转换;
仅供参考,第二个代码块中有一个打字错误(没有足够的重复更改)。
封送上下文转换。
应该是
封送上下文转换;