1
我在visual C++中編寫了一個dll,其中包含我從labview調用的函數。我在初始化時創建一個指針,將該指針傳遞出去,然後在調用其他函數時使用它。所有工作正常,直到我試圖刪除該指針,然後我得到一個「在LabVIEW.exe 0x56DC514A(intelcamera.dll)未處理的異常:0xC000001D:非法指令。」這裏是我的導出函數:在C++ dll中刪除指針時出錯
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函數並得到相同的異常。
有人可以幫忙嗎?我非常感謝!
約翰
'CDevice'在其析構函數中做了什麼? –
你確定'ptr'確實是你在colorstream_init中提供的相同的東西,而不是''memcpy'ed或者用不是'new'ed的替換物代替的東西嗎? – user4581301
您使用哪個相機SDK?如果您不使用LabVIEW,只需在C++應用程序中調用這些函數,崩潰是否仍然發生?如果您消除了相機SDK調用並分配/刪除簡單的數據結構,那麼在LabVIEW中是否仍會發生崩潰? –