使用C#调用阿尔泰数采卡读取函数

Lena- 2019-06-18 11:18:29

该数采卡dll的函数定义如上图,然后我在自己程序里调用调试会闪退并且没有任何报错。
底下是程序里的代码。
[DllImport("ACTS1011_32.dll")]
public static extern Boolean ACTS1011_ReadDeviceAD(IntPtr hDevice, ref UInt16[] pADBuffer,UInt32 nReadSizeWords,ref Int32 nRetSizeWords, ref Int32 pAvailSampsPoints, double fTimeout);// DMA 方式读取 AD 数据




 public IntPtr hDevice;
public UInt16[] pADBuffer=new UInt16[204800];
public UInt32 nReadSizeWords=2048;
public Int32 nRetSizeWords=0;
public Int32 pAvailSampsPoints=0;
public double fTimeout=1;
ACTS1011_ReadDeviceAD(hDevice, ref pADBuffer, nReadSizeWords, ref nRetSizeWords, ref pAvailSampsPoints, fTimeout);
...全文
545 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2019-06-18
  • 打赏
  • 举报
回复
核心问题 inptr pADBuffer 传递的实际是数字的第一个元素的地址,无需ref 后面有两个参数说可以为null,我们说他应该是int?,当然这玩意是ref还是out难说,需要试试看
OrdinaryCoder 2019-06-18
  • 打赏
  • 举报
回复
1.HANDLE hDevice是CreateDevice返回值 感觉应该是int 不是intptr
2.根据参数说明pADBuffer这个应该是一个new好的ushort数组,具体new多大你自己看一下那个说明 ,最好看一下PWORD宏定义感觉应该是ushort*
Lena- 2019-06-18
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
核心问题
inptr pADBuffer 传递的实际是数字的第一个元素的地址,无需ref

后面有两个参数说可以为null,我们说他应该是int?,当然这玩意是ref还是out难说,需要试试看

我改了参数类型为intptr pADBuffer,不用ref传入,还是报错。。。

引发的异常:“System.AccessViolationException”(位于 DAS_Demo_PCle8914.exe 中)

其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧