[英]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.