4

こんにちは

この例WritableBitmap.BackBufferで使用されているように使用しようとしています。セクションの例を参照してください。 私が実際にやろうとしているのは、a が指すスペースに an を書き込むことです。
int[]nativeint

int [] からメモリに書き込めるようにするために、SO のこの回答から始めました。Microsoft.FSharp.NativeInterop.NativePtr.write書き込みに使用するのに適した機能のようです。

少し試して読んだ後、2つの質問が生じます。

  1. WritableBitmap.BackBufferタイプはnativeintですが、必要なnativeptrに変換する方法NativePter.writeは?

  2. 一度に1つしか書けないようintですが、全体を書きたいですint []

私は深海にいることを認めますが、あなたが泳ぐことを学ぶのは深海です:)

よろしくお願いし
ます

4

2 に答える 2

3

NativePtr.writeこの関数は一度に 1 つの値を書き込むためにしか使用できないと思うので、配列をコピーする場合はforループを使用する必要があります。

より簡単なオプションは、ソース配列 (さまざまな型の要素を含む配列のオーバーロードがあります) を宛先として受け取るMarshal.Copyメソッド ( MSDN を参照) を使用することです。intptr

このようなものが動作するはずです:

let imageData = [| ... |] // generate one dimensional array with image data
writeableBitmap.Lock()

let buffer = writeableBitmap.BackBuffer
Marshal.Copy(imageData, 0, buffer, imageData.Length)
于 2010-11-22T15:19:20.177 に答える
3

トーマスが提案したアプローチは理にかなっていると思います。ただし、最初の質問に答えるために、関数を使用してnativeinta を a に変換できます。nativeptrNativeInterop.NativePtr.ofNativeInt

于 2010-11-22T15:28:36.613 に答える