【问题标题】:How to pass a string value to K object in kdb+如何将字符串值传递给 kdb+ 中的 K 对象
【发布时间】:2015-07-14 11:51:56
【问题描述】:

这几天我写了一个 C++ 接口供 kdb+ 调用。在我的 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]

但是,它没有用。我尝试了 google 和kx web 端来解决这个问题,我所做的一切都是徒劳的。

【问题讨论】:

  • 你能详细说明“没有工作”吗?有任何错误消息或症状吗?
  • 你不能只将字符串转换为符号吗?您的 c++ 代码需要符号,而不是字符串。

标签: c++ c kdb


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2017-12-08
    • 2021-11-27
    • 1970-01-01
    • 2020-02-17
    相关资源
    最近更新 更多