我正在将C实用程序与Nim连接。 C util main
函数需要 argc 和 argv 。我可以从paramCount
获取argc,但如何获取argv的C兼容args列表?
int main (int argc, char **argv);
proc main*(argc: cint; argv: cstringArray): cint
答案 0 :(得分:2)
您的字符串序列变量:
var data: seq[string] = @["A", "B", "C", "D"]
然后在将其发送到C函数之前对其进行分配:
var cdata: cstringArray = data.allocCStringArray()
main(5, cdata)
cdata.deallocCStringArray()
答案 1 :(得分:1)
除了paramCount()
外,还有函数paramStr()
实际上得到参数字符串。
如果您的C程序是:
int cmain(int argc, char **argv)
{
int x;
for (x=0; x < argc; x++)
printf("%d: %s\n", x, argv[x]);
}
然后您的Nim程序test.nim
,需要转换由
对兼容的paramStr()
重复进行的char **
调用:
{.compile: "cmain.c".}
proc cmain(c: cint, a: cstringArray): cint {.importc.}
import os
var nargv = newSeq[string](paramCount())
var x = 0
while x < paramCount():
nargv[x] = paramStr(x+1) # first is program name
x += 1
var argv: cStringArray = nargv.allocCStringArray()
discard cmain(cint(paramCount()), argv)
argv.deallocCStringArray()
然后运行nim c -r test.nim def ghi
将给出:
0: def
1: ghi
(使用compile
编译指示,您无需从C文件中创建共享库,也不必为此链接一个共享对象,但是当然也可以)