У меня возникли проблемы при возврате символов из кода 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.
Если вы используете версию q до 2.4, вам нужно интернировать строку C, используя ss()
функция, прежде чем передать его ks()
, Вы не должны видеть эту проблему с последними версиями.