亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Marshal.Copy 拋出 ArgumentOutOfRangeException

Marshal.Copy 拋出 ArgumentOutOfRangeException

C#
回首憶惘然 2023-07-09 17:10:57
我正在嘗試將數據從 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 和長度無效。


查看完整回答
反對 回復 2023-07-09
  • 1 回答
  • 0 關注
  • 242 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號