Я написал dll в visual C++, который содержит функции, которые я вызываю из labview. Я создаю указатель на инициализацию, передаю этот указатель, затем использую его при вызове других функций. Все работает нормально, пока я не попытаюсь удалить этот указатель, затем я получаю «Необработанное исключение в 0x56DC514A (intelcamera.dll) в LabVIEW.exe: 0xC000001D: Нелегальная инструкция». Вот мои экспортируемые функции:Ошибка при удалении указателя в dll C++
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 и получите одно и то же исключение.
Может кто-нибудь помочь, пожалуйста? Я был бы очень признателен!
John
Что делает 'CDevice' в своем деструкторе? –
Вы уверены, что 'ptr' действительно тот же, который вы предоставили в colorstream_init, а не что-то, что было' memcpy' или иным образом заменено обманом, который не был 'new'ed? – user4581301
Какая камера SDK вы используете? Если вы устраните LabVIEW и просто вызовите эти функции в приложении C++, все равно произойдет сбой? Если вы устраняете вызовы SDK камеры и просто выделяете/удаляете простую структуру данных, все еще происходит сбой в LabVIEW? –