在托管代码和非托管代码之间进行转换

时间:2011-06-19 12:04:58

标签: visual-c++ c++-cli

我想知道以下内容对于在托管字符串和标准字符串之间进行转换是否有效:

String ^ mymgdstring;
std::string mystdstring = *[PTR TO MYMGDSTRING, NOT SURE OF SYNTAX]

(即创建一个std字符串,它等于取消引用指向托管字符串的指针)

如果这是无效的,为什么不呢?在这些之间进行转换的最佳方法(即最有效)是什么? 另外,如何获得指向托管字符串的指针?

2 个答案:

答案 0 :(得分:1)

复制是必要的,因为在垃圾收集过程中可以移动.NET String数据。

您可以认为marshal_as是执行此转换的最有效方式。如果找到更快的方法,marshal_as将被更新以使用它(它是一个模板,可以是专门的)。

您可以使用PtrToStringChars获取指向System::String(它将使用Unicode,这是.NET字符串的内部格式)数据的内部指针。要将其与原生代码一起使用,您必须先使用pin_ptr代替interior_ptr 固定字符串。

答案 1 :(得分:0)

C ++ / CLI附带一个名为MarshalAs的函数,可以执行转换。