我目前正在为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
?
答案 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[])