迅维网

查看: 3351|回复: 0
打印 上一主题 下一主题

VS2010 C# 向DLL库函数传送数组的笔记

[复制链接]
跳转到指定楼层
1#
发表于 2013-9-21 23:40:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 广东深圳 来自 广东深圳

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

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。。。网上的教程、资料太害人了,好多是瞎胡抄。。。。写这这里做个笔记,免得下次忘记。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复