使用F#中的本机指针和可写位图

使用F#中的本机指针和可写位图,f#,native-code,F#,Native Code,你好 我正在尝试使用中使用的writeablebitmap.BackBuffer,请参阅部分示例。 我真正想做的是将int[]写入nativeint指向的空间 为了能够从int[]写入一些内存,我从一开始就这么做了。 似乎是一个很好的函数用来写 在尝试并阅读了一点之后,出现了两个问题 writeablebitmap.BackBuffer具有nativeint类型,如何转换为NativePter.write想要的nativeptr 似乎我一次只能写一个int,但我想写一个完整的int[] 我承认我

你好

我正在尝试使用中使用的
writeablebitmap.BackBuffer
,请参阅部分示例。
我真正想做的是将
int[]
写入
nativeint
指向的空间

为了能够从int[]写入一些内存,我从一开始就这么做了。 似乎是一个很好的函数用来写

在尝试并阅读了一点之后,出现了两个问题

  • writeablebitmap.BackBuffer
    具有nativeint类型,如何转换为
    NativePter.write
    想要的nativeptr

  • 似乎我一次只能写一个
    int
    ,但我想写一个完整的
    int[]

  • 我承认我在深水中,但正是在深水中你才学会游泳:)

    提前感谢

    Gorgen

    我认为
    NativePtr.write
    函数一次只能用于写入单个值,因此如果要复制数组,必须使用
    for
    循环

    一个更简单的选择可能是使用
    Marshal.Copy
    方法(),该方法将源数组(包含各种类型元素的数组有重载)和
    intptr
    作为目标

    像这样的方法应该会奏效:

    let imageData = [| ... |] // generate one dimensional array with image data
    writeableBitmap.Lock()
    
    let buffer = writeableBitmap.BackBuffer
    Marshal.Copy(imageData, 0, buffer, imageData.Length)
    

    我认为托马斯建议的方法是有道理的。但是,要回答第一个问题,您可以使用nativeint的
    NativeInterop.nativeptr.
    功能将
    nativeint
    转换为
    nativeptr