- 积分
- 874
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2006-10-31
- 精华
|
马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
近些天一个上位机需要调用C++写的DLL库函数,查硬件手册,该函数原型是:
DWORD d1000_start_t_line (short TotalAxis, short *AxisArray, short *DistArray, long StrVel, long MaxVel, double Tacc) ;
其中,AxisArray,DistArray变量是2个数组,类型是short 。
在该硬件开发手册上提到转换为C#,静态调用的方法:
namespace csDmc1000
{
public class Dmc1000
{
。。。。。。。。。。。。
[DllImport("Dmc1000.dll", EntryPoint = "d1000_start_t_line", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int d1000_start_t_line(short TotalAxis, ref short AxisArray, ref int DistArray, int StrVel, int MaxVel, double Tacc);
}
}
在一个按钮单击事件中调用:
XCH=0 //常量
YCH=1
short[] AxisArray=new short[XCH,YCH];
short[] DistArray=new short[] { 2000,1000 };
Dmc1000.d1000_start_t_line(2, ref AxisArray, ref DistArray, 500, 2000, 0.1);
却编译出错。。。。。找了好多资料,都是这样写的。。。由于是初学C#,被困扰了好久。。。。
结果找到正确的方法。
导出函数的原型应该这样定义:
public static extern int d1000_start_t_line(short TotalAxis, short[] AxisArray, int[] DistArray, int StrVel, int MaxVel, double Tacc);
这里不需要用 ref 关键字来引用,直接用 short[]和int[] 声明其是一个数组。
在调用时,正确的语句:
Dmc1000.d1000_start_t_line(2, AxisArray, DistArray, 500, 2000, 0.1);
完全不需要啥 ref 关键字。。。。NND。。。网上的教程、资料太害人了,好多是瞎胡抄。。。。写这这里做个笔记,免得下次忘记。
|
|