调用DLL开启线程的问题

2 篇文章 0 订阅

 错误的编写方式:(注意用感叹号夹起来的两行)在 ::FreeLibrary(hPro);这一行代码执行之后,dll里面的分配的内存空间就会全部被释放掉,所以会报“帧不在模块之中”,“内存访问错误”之类的错误。

void CMFCApplication2Dlg::OnBnClickedOk()
{
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	HINSTANCE hPro = ::LoadLibrary("MFCLibrary1.dll");//加载一个自己写的DLL,提供了一
                                                      //getCFindFile用于获取一个类指
                                                      //针;    
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    
	if (hPro == NULL)
	{
		return ;
	}
	else
	{
		typedef MyCFindFile* (*MENU_EXECUTE)();
		MENU_EXECUTE getCFindFile = NULL;
		getCFindFile = (MENU_EXECUTE)::GetProcAddress(hPro, "getCFindFile");//MenuExecute 函数名字
		if (getCFindFile)
		{
			MyCFindFile * pItem = getCFindFile();
			CString s;
			GetDlgItemText(IDC_EDIT4,s);
			s.Format(_T("%s"), s);
			std::string strStr;
			strStr = s.GetBuffer(0);
			HWND hdlg = GetSafeHwnd();
			pItem->funcFindFile(strStr, hdlg, 2);
			//pItem->m_hMainDlg = GetSafeHwnd();//把当前主对话框的窗口句柄传过去,这样就可以在线程函数中使用 
			//m_ResultList.DeleteAllItems();//清空上一次执行完之后的信息
			//std::string strStr;
			//strStr = pItem->m_PathFind.GetBuffer(0);
			//funcFindFile(strStr, pItem->m_hMainDlg);
		}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      ::FreeLibrary(hPro);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

	}
	return;	
}

正确的写法:

1,将HINSTANCE hPro;添加到类成员变量之中

2,将FreeLibrary(hPro);函数放到MFC退出按钮里面,反正要保证在使用完hpro之前不要释放掉,也可以直接用静态加载

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值