将 Ref{Cwstring}() 转换为字符串

Convert Ref{Cwstring}() to String

我目前正在为 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 吗?

你是对的,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[])