Преобразовать 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[])
Другие вопросы по тегам