Преобразовать Ref{Cwstring}() в строку
Я сейчас пишу ccall
привязка для движка JavaScript ChakraCore и есть одна функция с этим определением:
CHAKRA_API JsStringToPointer(
_In_ JsValueRef stringValue,
_Outptr_result_buffer_(*stringLength) const WCHAR **stringPtr,
_Out_ size_t *stringLength
)
Поэтому я создаю ссылку на WCHAR через: resultWC = Ref{Cwstring}()
Я попробовал несколько функций преобразования, чтобы получить String
назад, но пока ничего не получалось. Я думаю, мне нужно это: https://docs.julialang.org/en/v0.6.1/stdlib/strings/
Но Base.transcode
хочет Vector/Array, и я не знаю, как сделать простое приведение в стиле C в Julia для этого случая.
Есть идеи как превратить Ref{Cwstring}()
в String
?
1 ответ
Решение
Вы правы, это проблема.
Пока это не исправлено, вы можете добавить свой собственный метод:
function Base.unsafe_string(w::Cwstring)
ptr = convert(Ptr{Cwchar_t}, w)
ptr == C_NULL && throw(ArgumentError("cannot convert NULL to string"))
buf = Cwchar_t[]
i = 1
while true
c = unsafe_load(ptr, i)
if c == 0
break
end
push!(buf, c)
i += 1
end
return String(transcode(UInt8, buf))
end
Тогда вы можете просто позвонить по
unsafe_string(resultWC[])