【问题标题】:Mismatch between C++ symbols and Q symbolsC++ 符号和 Q 符号不匹配
【发布时间】:2015-04-07 18:29:51
【问题描述】:

从 C++ 代码返回符号时遇到了一些问题。我做了一个小例子来说明这个问题。

我们导出如下函数:

extern "C" __declspec(dllexport) K getSym(K x) {
    return ks((S)"sym");
}

然后从 Q 调用它:

q)asdf:(`our_dll 2:(`getSym;1))[1]
q)asdf
`sym
q)asdf = `sym
0b
q)asdf = `$string asdf
0b
q)0N!asdf
`sym
`sym
q)(string asdf) = (string `sym)
111b

为什么这两个值不相等?

这是 32 位 KDB+ 3.2。

【问题讨论】:

  • 0N!asdf的输出是什么;
  • 有时控制台会掩盖变量的实际底层形状/类型。 0N!将显示真实值
  • 我试过这段代码,它可以工作。
  • 我将0N!asdf 的输出添加到问题中。 @KhouriGiordano,您使用的是哪个版本的 KDB?
  • 它是 Win32 并且在启动时,Q 说“KDB+ 3.2 2015.04.07”。我得到了从the wiki 链接的k.hq.lib 文件。直到这个问题我才听说过 Q,尽管我已经制作了很多动态加载的 DLL。

标签: c++ kdb q-lang


【解决方案1】:

如果您使用 2.4 之前的 q 版本,您需要在将 C 字符串传递给 ks() 之前使用 ss() 函数对 C 字符串进行实习。您应该不会在最新版本中看到此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多