現象:
在exe中使用由動態庫匯出的類,在delete時非法操作。有其他模組(dll或exe)呼叫都非法。
程式如下:
#include "stdafx.h"
int main(int argc, char* argv)
dll庫
#define dllexport __declspec(dllexport)
class dllexport hptest;
hptest::hptest()
hptest::~hptest()
執行出錯誤
原因:由於類的析構被定義為虛函式,在進行類的析構後,在動態庫內執行了delete操作。可參照此文章:
http://support.microsoft.com/kb/122675/zh-cn。析構函式如果為非虛的,則不會有此現象
解決方法:
1.在類內過載new和delete操作符。
class dllexport hptest;
void* hptest:: operator new(size_t size)
void hptest:: operator delete(void *p)
2.使用dllimport
a 動態庫中實現類,指定 _declspec(dllexport)。
b. exe使用類時指定 _declspec(dllimport)。
c. 使用虛擬析構
#ifdef _dll
#define dllexp __declspec(dllexport)
#else
#define dllexp __declspec(dllimport)
#endif
class dllexp hptest
;dll的工程內定義巨集_dll.
3.其他方法,參看參照文章即可。
在EXE和DLL中,FindResource的區別
在exe和dll中,findresource的區別 以下的 在exe中,執行無誤。可是在dll中findresource返回的值就為0了,我用 getlasterror 得出的值是1813,也就是取不到資源,這是為什麼?bool extractfile char szzlibfile,dword d...
在lua中呼叫DLL
整整的花了乙個下午的時候,才在lua中呼叫了動態鏈結庫。比起其他指令碼語言,lua的呼叫方式算是比較繁瑣的,但是lua的程式設計思想非常的統一,即lua和c之間的傳值都是通過棧進行的,目前為止我還沒有深入的去了解這個 棧 但是這並不妨礙去使用 棧 當我們在乙個空的工程中寫下幾個c c 的函式,然後把...
在C 中呼叫EXE檔案
1.如果exe檔案的返回值是int型別,標識操作執行的結果是否成功,例如 class program 則在呼叫exe檔案時,可以用如下方法 process myprocess new process string filename c test.exe string para 你好 北京歡迎你!pr...