我正在嘗試將數(shù)據(jù)從 C# 應(yīng)用程序中的托管內(nèi)存編組到非托管內(nèi)存位置,以供專有 DLL 使用。該值是一個(gè)浮點(diǎn)型,但 DLL 需要一個(gè)指向浮點(diǎn)型的指針。在構(gòu)造函數(shù)中,我的想法是將非托管內(nèi)存分配給指針,然后將傳入的浮點(diǎn)值復(fù)制到非托管內(nèi)存。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); } }}這些大小對(duì)我來(lái)說(shuō)看起來(lái)不錯(cuò),但是每當(dāng)Marshal.Copy調(diào)用該函數(shù)時(shí)ArgumentOutOfRangeException就會(huì)拋出一個(gè)異常。有任何想法嗎?
1 回答

溫溫醬
TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
最后一個(gè)參數(shù)Marshal.Copy
是要復(fù)制的元素?cái)?shù)。
我懷疑你應(yīng)該使用1
(或MyInternalClass.fltArry.Length
) 而不是sizeof(float) * MyInternalClass.fltArry.Length
。您傳遞的值太大,因此:
例外情況
ArgumentOutOfRangeException - startIndex 和長(zhǎng)度無(wú)效。
- 1 回答
- 0 關(guān)注
- 233 瀏覽
添加回答
舉報(bào)
0/150
提交
取消