这些天我编写了一个由kdb +调用的C ++接口。在我的cpp文件中,我按如下方式定义我的函数:
enter extern "C" K printInfo(K firstName, K secondName, K age)
{
if (firstName->t != -KS || secondName->t != -KS || age->t != -KJ) {
printf("Invalid params\n");
return krr("Invalid params");
}
printf("firstName:%s\tsecondName:%s\tage:%ld", firstName->s, secondName->s, age->j);
return (K)0;
}
在我将它编译成dll后,我编写了q脚本文件来调用它。代码如下:
/ from the DLL mymoving load the functions and assign to named variables
/ The 2: is used for loading
/ 3 at the end specifies the number of arguments
printInfo:`myPrint 2:(`printInfo;3)
printInfo["yunfeng";"zhou";23]
/ printInfo[`yunfeng;`zhou;23]
然而,它没有用。我试过谷歌和kx网站来解决这个问题,我所做的一切都是徒劳的。
答案 0 :(得分:0)
如果将名称作为符号传递,则代码应该可以正常工作。如果要允许字符向量,则在检查参数类型时应允许firstName->t == 10
和secondName
相同。此外,您无法使用->s
来访问字符向量数据。您需要使用->n
来查找字符数,并使用kC()
来获取指向第一个字符的指针。请注意,字符向量(与符号不同)不是以空值终止的,因此您不能使用期望指针指向kC()
返回的指针上以空字符结尾的字符串的C函数。