簡體   English   中英

元帥。復制引發ArgumentOutOfRangeException

[英]Marshal.Copy Throws ArgumentOutOfRangeException

我試圖將數據從C#應用程序中的托管內存封送到非托管內存位置,以供專有DLL使用。 該值是一個浮點數,但是DLL需要一個指向浮點數的指針。 在構造函數中,我的想法是將非托管內存分配給指針,然后將傳入的float值復制到非托管內存。

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 有任何想法嗎?

Marshal.Copy的最后一個參數是要復制的元素數

我懷疑您應該使用1 (或MyInternalClass.fltArry.Length ),而不是sizeof(float) * MyInternalClass.fltArry.Length 您傳遞的值太大,因此:

例外

ArgumentOutOfRangeException-startIndex和length無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM