找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 767|回复: 2

LV打的dll,在C里面调用的问题

[复制链接]
发表于 2009-1-13 18:33:28 | 显示全部楼层 |阅读模式
本帖最后由 adobefree 于 2009-1-13 18:37 编辑

LV打的dll,在C里面调用的问题我遇到一个问题,大家帮看看有什么方法解决
     用LV打了一个dll,用C来调用(我用CVI测试的),传出的参数中有一个LV的错误信息簇 error out (bool status, int code,string source),当然,在C里面调用的时候把这个当结构体来用。
     现在发现,如果LV dll里面有错误信息传出来的话,也就是说如果error out 簇里面的最后一个元素----string用来解释错误信息的字符串)不为空的话,例如"open com fail","init camera fail"等,就会崩溃。vI内部是肯定没问题的,我把里面的东西全删了,就剩下直接赋值给error out 的部分,也是用样的问题。
我的在C里面是这样调用的:

typedef struct {
int32_t dimSize;
uint8_t elt[1];
} TD2;

typedef TD2 **TD2Hdl;

typedef struct {
LVBoolean status;
int32_t code;
TD2Hdl unsignedByteArray;
} TD1;

void __cdecl Vision_Camera_Init(char CameraID[], TD1 *errorOut);   

main()
{   
  int flag;
    TD1 errorOut;
     char CameraID[12]="cam0";

      Vision_Camera_Init( CameraID,&errorOut);  
  
}

      但是如果把error out在LV里面拆开,把source单独作为参数传出,是可以的,可看到多出了一个字符串长度的参数len,
typedef struct {
LVBoolean status;
int32_t code;
} TD1;

void __cdecl Vision_Camera_Init(char CameraID[], TD1 *error,  char errorSource[], int32_t len);
我怀疑前面方法,就是因为没指定长度,有人知道怎么按照前面的方法顺利的让字符串传输来吗 ?毕竟一大堆结果传出来的时候,不可能都分开成单独的参数



另外,还有一个问题是LV在生成DLL的.h文件时,那些结构体的名字可以自定义吗?  我不想都是那些名字什么TD1,TD2,TD3之类的
发表于 2009-1-13 21:38:47 | 显示全部楼层
error在生成的时候可以设定其输出

名字在生成的时候同样也是可以设定的,在工程属性里
回复 顶

使用道具 举报

 楼主| 发表于 2009-1-13 23:33:07 | 显示全部楼层
版主,能说的具体些吗?   你说的工程属性,是在哪里设置?  设置哪一项?  我在程序生成规范里面没有找到对应的设置。
回复 顶

使用道具 举报

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

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-29 19:26 , Processed in 0.028011 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表