Ошибка при удалении указателя в c ++ dll

Я написал DLL в Visual C ++, который содержит функции, которые я вызываю из labview. Я создаю указатель на инициализацию, передаю этот указатель, а затем использую его при вызове других функций. Все работает нормально, пока я не пытаюсь удалить этот указатель, затем я получаю «Необработанное исключение в 0x56DC514A (intelcamera.dll) в LabVIEW.exe: 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 и получите то же исключение.

Может кто-нибудь помочь, пожалуйста?

1

Решение

Я нашел проблему; спасибо всем, кто помог. Оказывается, при вызове библиотеки labview входной параметр ptr был передан как «Указатель на значение», а не как «Значение». Я передаю его из функции init как «Указатель на значение», но его необходимо передать обратно как «Значение» (очевидно …).

Я впервые пишу функции в .dll, и я прошу прощения за то, что занял время людей с глупой ошибкой.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]