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

标签 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;
}

我试过移动“delete (CDevice*)ptr;”排队进入 get_image 函数并得到相同的异常。

有人可以帮忙吗?

最佳答案

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

这是我第一次在 .dll 中编写函数,对于一个愚蠢的错误占用了人们的时间,我深表歉意。

关于c++ - 在 C++ dll 中删除指针时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33179906/

相关文章:

c++ - 是否使用静态 constexpr 变量 odr?

c++ - 我的 ListView 没有在 Qt 中获得键盘焦点

pointers - 分配给 *mut T 和 &mut T 有什么区别?

php - 为什么我必须将 libmysql.dll 复制到 apache/bin 目录才能正确加载 PHP 扩展?

C# DLL 从 C++ 应用程序调用 SOAP Web 服务

c++ - 在 cout 上打印时间时出现奇怪的 C++ 行为

c++ - OpenCV 和 Boost 文件系统之间的冲突

c - printf ("%p") 并转换为 (void *)

c++ - 初始化结构中的常量数组

dll - GAC 和 Bin dll 之间的冲突