将Ref {Cwstring}()转换为String

时间:2018-08-23 21:14:01

标签: javascript julia chakracore

我目前正在为ChakraCore JavaScript引擎编写一个ccall绑定,并且有一个函数具有以下定义:

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

但是Base.transcode想要一个Vector / Array,对于这种情况,我不知道如何在Julia中进行简单的C样式转换。

有什么主意如何将Ref{Cwstring}()变成String

1 个答案:

答案 0 :(得分:2)

您是对的,it's a problem

在此之前,您可以添加自己的方法:

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[])