4

假设我想将一组命令行选项转发给一个 C 函数,声明如下,其中 D main 接受 args

extern (C) void init(int argc, char** argv);

void main(string[] args) {
    init(args.length, map!(toStringz)(args));
}

第一个参数很简单,但我尝试应用于toStringz数组args似乎不起作用。我明白了cannot implicitly convert expression (map(args)) of type MapResult!(toStringz,string[]) to char**。您如何转换string[]char**(或什至const(char)**)。

4

1 回答 1

4

std.algorithm.map函数返回范围,在您的情况下必须将其更改为数组。您可以使用std.array.array. 然后你可以使用.ptr. 它返回immutable(char**)被转换为char**

extern (C) void init(int argc, char** argv);

void main(string[] args) {
    init(cast(int)args.length, cast(char**)map!(toStringz)(args).array.ptr);
}

这是现场演示:http ://dpaste.dzfl.pl/ff81984c

于 2012-10-29T16:21:25.183 回答