当前位置:  开发笔记 > 编程语言 > 正文

DLLImport Int** - 如果可以的话,如何做到这一点

如何解决《DLLImportInt**-如果可以的话,如何做到这一点》经验,为你挑选了1个好方法。

我试图使用第三方DLL,它想要一个int**作为方法的参数之一.它将参数描述为指向内存分配的指针的地址.

对不起任何困惑.我认为参数是双向的.DLL用于与FPGA板通信,该方法是在主机PC和PCI板之间建立DMA传输.



1> Mark Cidade..:

使用副编辑System.IntPtr.

 [DllImport("thirdparty.dll")]
 static extern long ThirdPartyFunction(ref IntPtr arg);

 long f(int[] array)
  { long retval = 0;
    int  size   = Marshal.SizeOf(typeof(int));
    var  ptr    = IntPtr.Zero;

    try 
     { ptr = Marshal.AllocHGlobal(size * array.Length);

       for (int i= 0; i < array.Length; ++i) 
        { IntPtr tmpPtr = new IntPtr(ptr.ToInt64() + (i * size));
          Marshal.StructureToPtr(array, tmpPtr, false);
        }

       retval = ThirdPartyFunction(ref ptr);
     }
    finally 
     { if (ptr != IntPtr.Zero) Marshal.FreeHGlobal(ptr);
     }

    return retval;
  }

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有