En C++, puedo inicializar un vector <wstring> con un wchar_t ** como en este ejemplo:cómo inicializar wstring [] con wchar ** en D 2,0
#include <windows.h>
#include <string>
#include <vector>
#include <cwchar>
using namespace std;
int main() {
int argc;
wchar_t** const args = CommandLineToArgvW(GetCommandLineW(), &argc);
if (args) {
const vector<wstring> argv(args, args + argc);
LocalFree(args);
}
}
Sin embargo, hay una manera de inicializar un wstring [] con un wchar ** en D 2.0?
puedo añadir el contenido de la wchar ** a la wstring [] de esta manera:
import std.c.windows.windows;
import std.c.wcharh;
extern(Windows) {
wchar* GetCommandLineW();
wchar** CommandLineToArgvW(wchar*, int*);
void* LocalFree(void*);
}
void main() {
int argc;
wchar** args = CommandLineToArgvW(GetCommandLineW(), &argc);
if (args) {
wstring[] argv;
for (size_t i = 0; i < argc; ++i) {
wstring temp;
const size_t len = wcslen(args[i]);
for (size_t z = 0; z < len; ++z) {
temp ~= args[i][z];
}
argv ~= temp;
}
LocalFree(args);
}
}
Pero, me gustaría encontrar un limpiador, manera más simple como la versión de C++. (El rendimiento no es una preocupación)
¿Se codificarán las cuerdas de la cadena [] args como UTF-8? Estoy usando CommandLineToArgvW para obtener amplios argumentos de línea de comandos (que podrían contener todo tipo de caracteres Unicode) y luego usar std.utf.toUTF8() para convertir cada argumento en una cadena codificada como UTF-8. Si string [] args satisface eso, entonces lo usaré en su lugar. Pero, no pensé que lo hiciera. – Shadow2531
Dicho esto, si modifico su ejemplo y cambio argv para que sea una cadena [] y use std.utf.toUTF8() en lugar de! Wstring(), creo que produce el resultado que deseo. Pero, si main (string [] args) realmente produce la misma codificación utf-8, definitivamente usaré eso. – Shadow2531
Hay un problema con wcslen() que no mencioné. Si importo std.string, dmd dice que std.string.wcslen entra en conflicto con core.stdc.wchar_.wcslen. Por lo tanto, si hay una buena manera de hacerlo sin wcslen(), sería genial también. – Shadow2531