2015-10-16 66 views
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函數並得到相同的異常。

有人可以幫忙嗎?我非常感謝!

約翰

+0

'CDevice'在其析構函數中做了什麼? –

+0

你確定'ptr'確實是你在colorstream_init中提供的相同的東西,而不是''memcpy'ed或者用不是'new'ed的替換物代替的東西嗎? – user4581301

+0

您使用哪個相機SDK?如果您不使用LabVIEW,只需在C++應用程序中調用這些函數,崩潰是否仍然發生?如果您消除了相機SDK調用並分配/刪除簡單的數據結構,那麼在LabVIEW中是否仍會發生崩潰? –

回答

1

我發現這個問題;感謝所有幫助過我的人。我發現在labview庫調用中,我將ptr輸入參數作爲「指向值的指針」傳遞,而不是「值」。我把它作爲「指向值的指針」傳遞出init函數,但它需要作爲「值」傳回(顯然是......)。

這是我第一次在.dll中編寫函數,我很抱歉爲一個愚蠢的錯誤佔用了人們的時間。