VC 在DLL中使用全局变量出现异常问题


最近,VC调用DLL,,在释放DLL时出现如下提示,百思不解。


在DEBUG环境下,VC 输出窗口提示:


“JWGB_BK.exe”: 已加载“F:\VC\JWGB_BK\test\prd\BK122.dll”,已加载符号。
Init()--- 协议:f TY_GetProtocal OK
Init()---TY_Exit OK
Init()---TY_GetDlgOper OK
Init()---TY_SendMsgProc OK
TYBK.exe 中的 0x00000000 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
“TYBK.exe”: 已卸载“F:\VC\TYBK\test\prd\BK122.dll”
线程 'Win32 线程' (0x149c) 已退出,返回值为 0 (0x0)。
程序“[4332] TYBK.exe: 本机”已退出,返回值为 0 (0x0)。


看来在DLL的初始地址上出现了问题,反复跟踪程序,没有发现异常。


在Release环境下,程序出现异常提示:


实在很烦,查找了一下以前的DLL调用,也没有出现这个问题,很纳闷。


经过反复调试,发现问题出在全局变量的使用上,

如果把全局变量定义为:

CIOCard g_cIOCard;
CProduct g_cProduct;

在卸载DLL时就出现上述提示。

于是把其改为:

CIOCard* g_pIOCard = NULL;
CProduct*
g_pProduct = NULL;


然后DLL的CWinApp类函数实现全局函数实例:

BOOL CBKApp::InitInstance()
{
CWinApp::InitInstance();


g_pIOCard = new CIOCard;
g_pProduct = new CProduct;


return TRUE;
}


int CBKApp::ExitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
delete g_pIOCard;


g_pIOCard = NULL;


delete g_pProduct;


g_pProduct = NULL;


return CWinApp::ExitInstance();
}

一切都OK,总算可以休息了。


        经历这次,总结如下,在DLL中如果要调用全局变量,应采用new方式实现。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值