kdb — несоответствие между символами C ++ и символами Q

У меня возникли проблемы при возврате символов из кода 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.

0

Решение

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

0

Другие решения


По вопросам рекламы [email protected]