为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信