[英]D Style Arrays to C Style Arrays
我正在D中创建一个Window,并且CreateWindowA
函数需要指向字符(基本上是C字符数组)的指针。
如何将D样式数组( char[]
)转换为C样式数组( char*
)?
通常std.string.toStringz
的两个函数是std.string.toStringz
和std.utf.toUTFz
。
toStringz
会将string
转换为immutable(char)*
,您可以将其传递给采用const char*
的C函数。 如果它可以确定string
以null终止(通常只有字符串文字,这种情况的末尾有一个null终止符),则它不会分配,而只会使用string
的ptr
属性,但在大多数情况下,它将分配。
toUTFz
将从任何字符串类型转换为任何字符指针类型。 由于Windows的所有W
函数都采用UTF-16,因此它可能最常用于Windows的const(wchar)*
转换,但是它也可以用于转换为char*
-例如str.toUTFz!(char*)()
。 像toStringz
一样,如果它可以确定不必要,它将尝试不分配,但几乎总是必需的。
现在,对于您的特殊情况,您尝试使用Windows中的A
函数之一。 这几乎总是一个坏主意,我强烈建议不要这样做。 使用toUTFz
将您的string
转换为const(wchar)*
并将其传递给CreateWindowW
。 AFAIK, A
函数的唯一优点是它们可与Win2K之前的版本一起使用。 关于他们的其他一切都更糟。 但是,如果由于某种原因坚持使用A
函数,则将不得不使用std.windows.charset.toMBSz
,因为A
函数使用的不是UTF-8,而是使用“ Windows 8-位字符集”和toMBSz
会将字符串转换为该格式。
您可以获取D数组的ptr
字段。 和length
字段来获取长度
但是,如果需要C样式的字符串,则需要toStringz
方法,该方法将添加空终止符并将指针返回第一个字符。 k
EEP一个它的参考,如果API不创建它自己的拷贝操作,以避免由GC悬摆指针
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.