LabVIEW论坛
直播中

我有一车切糕

11年用户 580经验值
私信 关注
[问答]

调用DLL搭建界面,结构体中含有char a[64]的怎么在界面输入EB90

typedef struct
{
        char        a[64];        //2~16个十六进制字符。
     UINT    b;                   //0~8
       UINT       c;        //8~64   
DE_STRUCT;
函数原型:BOOL WINAPI (DE_STRUCT& eSParam) //写参数函数
作为写参数函数,因为必须用簇的形式作为输入,里面含有字符数组所以直接用如下面图中那样用字符串输入肯是错误的。但这个确实我想要的结果,所有输入参数必须在整个界面上。
1.jpg
单独开调用像下面这样设置也是同样错误,没有提示错误,但是根本就没有写进底层去,这个参数对应的地址的值没有任何变化,请教叫人指点一下,因为输入参数必须在界面上写入,所以把字符串单个拆开常量不可能,且还有两三百个的也太不切实际了,应该怎么办呢。

3.jpg

4.jpg

回帖(7)

二霸

2015-1-12 17:05:54
字符串转成字节数组,调用dll好像不能用簇做输入输出,有结构体的时候直接按内部的参数顺序依次输入吧,这个没试过
5.jpg

举报

芒果冰

2015-1-12 17:06:55
用C或C++ wrap 一下,即再封装一个中间层的DLL,用LV去导入这个中间层的DLL,效果会比去费脑筋配置它更好。
举报

我有一车切糕

2015-1-12 17:07:15
引用: 芒果冰 发表于 2015-1-12 17:06
用C或C++ wrap 一下,即再封装一个中间层的DLL,用LV去导入这个中间层的DLL,效果会比去费脑筋配置它更好。 ...

就是不知道怎么再次封装,有没有相关的资料呢,或者一个小例子,看你挺熟悉的,麻烦大哥帮一下忙吧,谢谢。
举报

技术牛人小渣子

2015-1-12 17:09:27
方法一:char 那个可以用U8数组代替,数组大小64
UNIT 那个是 U32。
整个可以用 一个U8数组,数组大小64 + 32/8=68.
在OUTPUT端然后拆分 前面64个组成一个字符串,和后面的4个组成一个UINT。

方法二
或者你可以看范例。自己在范例里搜DLL。里面有关于簇封装的。
你的字符串,需要转化为U8数组。用捆绑簇,和下面U32组成一个簇。
OUTPUT再把数组还原为字符串。

以上两种方法都可以试试。推荐看范例的操作方式。

带指针或者引用的,无非是 先申请一个内存空间。后面往空间里填充数值。
至于后面几个说的 二次封装(wrapper),暂时应该不用考虑。能用简单问题解决就用简单方法。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分