如何在 D 2.0 中使用 wchar** 初始化 wstring[]
在 C++ 中,我可以初始化一个向量
#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);
}
}
但是,有没有办法在 D 2.0 中使用 wchar** 初始化 wstring[] ?
我可以通过这种方式将 wchar** 的内容添加到 wstring[] 中:
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);
}
}
但是,我想找到一种更干净、更简单的方法,例如 C++ 版本。 (性能不是问题)
In C++, I can initialize a vector<wstring> with a wchar_t** like in this example:
#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);
}
}
However, is there a way to initialize a wstring[] with a wchar** in D 2.0?
I can add the contents of the wchar** to the wstring[] this way:
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);
}
}
But, I'd like to find a cleaner, simpler way like the C++ version. (Performance is not an concern)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是使用切片的更简单的版本:
另一个选择是使用 void main(string[] args) 并转换为 args wstring(如果您确实需要)。
Here is a simpler version using slices:
Another option would be to use
void main(string[] args)
and convert to args wstring if you really need.您可以使用它
来更轻松地
编辑命令行参数:在 D 中获得 char 指针的唯一原因是如果您直接使用 C 函数,而 90% 的时间您不需要(或者应该抽象它)离开)
you can use
to get the commandline arguments much easier
edit: and the only reason you'd get a char pointer in D is if you are using C functions directly while 90% of the time you shouldn't need to (or should abstract it away)