您的位置:首页 > 编程语言 > C语言/C++

C++/CLI 托管C++的托管与非托管字符串的相互转换【1】

2014-07-15 16:45 330 查看
//VS2005版的托管与非托管的字符串的相互转换使用的是Marshal

//之后的版本可以使用Marshaling,该库转换更方便

//这里介绍的是VS2005版的使用Marshal的转换方法

C# Code
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

//-----------------------------------------------------------

// 函数名称:ManagedString2UnmanagedAnsiString

// 函数功能:将托管字符串转成非托管的ANSI字符串

// 参数: String^ str [in] 托管字符串

// 说明: 返出的字符串使用完后,需要手动释放!

//-----------------------------------------------------------

//托管字符串转非托管的ANSI字符串

char *ManagedString2UnmanagedAnsiString(String ^ str)

{

IntPtr p = Marshal::StringToHGlobalAnsi(str);

if (p == IntPtr::Zero)

return NULL;

const char *pTemp = static_cast(p.ToPointer());

if (pTemp == NULL) return NULL;

char *pOut = new char[strlen(pTemp) + 1];

strcpy(pOut, pTemp);

Marshal::FreeHGlobal(p);

return pOut;

}
C#Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

//-----------------------------------------------------------

// 函数名称:UnmanagedToManagedAnsiString

// 函数功能:将非托管字符串转成托管的ANSI字符串

// 参数: char* str [in] 非托管字符串

//-----------------------------------------------------------

//非托管字符串转托管的ANSI字符串

String ^ UnmanagedToManagedAnsiString(char *str)

{

return Marshal::PtrToStringAnsi((IntPtr)str);

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: