在c ++ dll中删除指针时出错

时间:2015-10-16 21:34:14

标签: c++ pointers dll labview

我在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函数并获得相同的异常。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我发现了问题;感谢所有帮助过的人。我发现在labview库调用中,我将ptr输入参数作为"指向值"的指针传递,而不是作为"值"。我把它从init函数传递出来作为"指向值的指针,"但它需要作为一个"值" (明显...)。

这是我第一次在.dll中编写函数,我为因愚蠢的错误占用人们的时间而道歉。