我在visual c ++中编写了一个dll,其中包含我从labview调用的函数。我在初始化时创建一个指针,将该指针传递出去,然后在调用其他函数时使用它。一切正常,直到我尝试删除该指针,然后我在LabVIEW.exe中得到“0x56DC514A(intelcamera.dll)的未处理异常:0xC000001D:非法指令。”以下是我导出的函数:
extern "C" int colorstream_init(uintptr_t *ptrOut, int *data)
{
*ptrOut = (uintptr_t)new CDevice();
((CDevice*)*ptrOut)->init_camera();
*data = ((CDevice*)*ptrOut)->get_data();
return ((CDevice*)*ptrOut)->get_sts();
}
extern "C" int get_image(uintptr_t ptr, uint32_t image[], int size, int *data)
{
int rtn_val = ((CDevice*)ptr)->get_image(image, size);
*data = ((CDevice*)ptr)->get_data();
return rtn_val;
}
extern "C" int close(uintptr_t ptr, uint32_t last_image[], int size)
{
// ((CDevice*)ptr)->get_image(last_image, size);
int r = ((CDevice*)ptr)->close();
delete (CDevice*)ptr;
return r;
}
我试过移动“删除(CDevice *)ptr;”排列到get_image函数并获得相同的异常。
有人可以帮忙吗?
答案 0 :(得分:1)
我发现了问题;感谢所有帮助过的人。我发现在labview库调用中,我将ptr输入参数作为"指向值"的指针传递,而不是作为"值"。我把它从init函数传递出来作为"指向值的指针,"但它需要作为一个"值" (明显...)。
这是我第一次在.dll中编写函数,我为因愚蠢的错误占用人们的时间而道歉。