如何将字符串值传递给kdb +中的K对象

时间:2015-07-14 11:51:56

标签: c++ c kdb

这些天我编写了一个由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网站来解决这个问题,我所做的一切都是徒劳的。

1 个答案:

答案 0 :(得分:0)

如果将名称作为符号传递,则代码应该可以正常工作。如果要允许字符向量,则在检查参数类型时应允许firstName->t == 10secondName相同。此外,您无法使用->s来访问字符向量数据。您需要使用->n来查找字符数,并使用kC()来获取指向第一个字符的指针。请注意,字符向量(与符号不同)不是以空值终止的,因此您不能使用期望指针指向kC()返回的指针上以空​​字符结尾的字符串的C函数。