adobefree 发表于 2009-1-13 18:33:28

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

本帖最后由 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;
} 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="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之类的

lgh269 发表于 2009-1-13 21:38:47

error在生成的时候可以设定其输出

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

adobefree 发表于 2009-1-13 23:33:07

版主,能说的具体些吗?   你说的工程属性,是在哪里设置?设置哪一项?我在程序生成规范里面没有找到对应的设置。
页: [1]
查看完整版本: LV打的dll,在C里面调用的问题