[英]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.