我正在嘗試將數據從 C# 應用程序中的托管內存編組到非托管內存位置,以供專有 DLL 使用。該值是一個浮點型,但 DLL 需要一個指向浮點型的指針。在構造函數中,我的想法是將非托管內存分配給指針,然后將傳入的浮點值復制到非托管內存。internal class MyInternalClass{ private static float[] fltArry; public struct MY_DLL_STRUCT { public IntPtr fltPtr; public MY_DLL_STRUCT(float flt) { MyInternalClass.fltArry = new float[] { flt }; this.fltPtr = Marshal.AllocHGlobal(sizeof(float) * MyInternalClass.fltArry.Length); Marshal.Copy(MyInternalClass.fltArry, 0, this.fltPtr, sizeof(float) * MyInternalClass.fltArry.Length); } }}這些大小對我來說看起來不錯,但是每當Marshal.Copy調用該函數時ArgumentOutOfRangeException就會拋出一個異常。有任何想法嗎?
1 回答

溫溫醬
TA貢獻1752條經驗 獲得超4個贊
最后一個參數Marshal.Copy
是要復制的元素數。
我懷疑你應該使用1
(或MyInternalClass.fltArry.Length
) 而不是sizeof(float) * MyInternalClass.fltArry.Length
。您傳遞的值太大,因此:
例外情況
ArgumentOutOfRangeException - startIndex 和長度無效。
- 1 回答
- 0 關注
- 242 瀏覽
添加回答
舉報
0/150
提交
取消