dll说明如下:C formatint32 pisn_getsnapshots( int32 PIPTR * ptfloat PIPTR * rval, int32 PIPTR * istat,int32 PIPTR * timedate, int32 PIPTR * error,int32 count ); Argumentspt (passed)Array of point numbersrval (returned)Array of values in engineering units, undefined for integer and digital pointsistat (returned)Array of statuses for type real points and values for integer and digital pointstimedate (returned)Array of time stampserror (returned)Array of error codescount(passed)Size of the arrays
我定义成下面的,但是调用的时候会出现各种异常,其中包括:
1.尝试读取或写入受保护的内存。
2.“System.ExecutionEngineException”的异常。
3.签名类型不符。
4.堆栈溢出。
[DllImport("piapi32.dll")]
public extern static int pisn_getsnapshots(int[] pt, ref float[] rval, ref int[] istat, ref int[] timedate, ref int[] error, int count);
我定义成下面的,但是调用的时候会出现各种异常,其中包括:
1.尝试读取或写入受保护的内存。
2.“System.ExecutionEngineException”的异常。
3.签名类型不符。
4.堆栈溢出。
[DllImport("piapi32.dll")]
public extern static int pisn_getsnapshots(int[] pt, ref float[] rval, ref int[] istat, ref int[] timedate, ref int[] error, int count);
解决方案 »
- richtextbox显示图片问题
- 如何在c#中的treeview的节点前加个"+"的图标
- datetime只取time部分的函数有吗?
- 跳圈游戏...拜托大家帮忙有没有改进一下..随便什么语言...谢谢了...
- 关于Jquery的Ajax问题
- winform gridview 批量保存 更新 删除
- c#用csc编译,想在Dos提示符后出现不断变化的效果,如何实现?
- 为何微软只弄了个webform的MVC?
- 如何访问dll的某类的static方法。不用初始化那个类,用动态的方法来访问。
- vs2003代码运行报未将对象设置到对象的引用错误 vs2005下正常 是我的vs2003有软件问题吗 请高手指点
- 多线程程序运行中不能计算数据
- 暂停一个线程,无响应后继续
将rval直接传给第二个参数,就能让函数数据了你用的ref float[] rval,请问这个float数组长度是多少? 定义这个长度的依据是什么?
ref float[] rval 的数组长度是根据 int[] pt 的长度决定的,因为着方法是一个pt对应一个rval。可是我把传入的Count参数设置为比 int[] pt 的长度大的时候,异常1就不会出现了,就会异常2。
int count = 5;
int[] pt = new int[count];
IntPtr rval = AllocHGlobal(sizeof(float)*count);
IntPtr istat = AllocHGlobal(sizeof(int)*count);
IntPtr timedate = AllocHGlobal(sizeof(int)*count);
IntPtr error = AllocHGlobal(sizeof(int)*count);pisn_getsnapshots(pt[],rval,istat,timedate,error,count);
试试