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