如何释放由dll生成的内存?

zigzeg 2006-03-21 01:41:21
现在程序通过DLL产生了个内存空间,得到一个指向DIB的句柄(HANDLE)。

问: 如何通过HANDLE来释放内存?
...全文
159 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zigzeg 2006-03-24
  • 打赏
  • 举报
回复
问题已经解决了,谢谢大家。
还是消息传递的问题:PreTranslateMessage() 要在 TranslateMessage()之前调用。
上面程序我改为:
////////////////////////////////////
CXXX::PreTranslateMessage()
{
int rc = 5;
if (满足条件)
{
rc = 自己的消息处理函数();
}
if (rc == 5)
return CXXX::PreTranslateMessage(pMsg);
else return TRUE;
}
/////////////////////////////////////////////////
// 程序正常运行, 但出现个奇怪的现象。
原来上述程序我是加在VIEW中的,但如此改过后,就不在起作用了。
直到我把上述程序加至cxxxApp::PreTranslateMessage()才行。
我试过在CMAINframe:;PreTranslateMessage() 也可以。
不知道为什么?

有没有vc,关于消息机制方面的参考书,能不能推荐几本?
zigzeg 2006-03-23
  • 打赏
  • 举报
回复
//我找到错误所在了,但我对消息机制了解不多,不知道该如何改正,能不能帮我看看。
//
//
BOOL CCTwainDemoView::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class

///////////////////////////////////////////////////////////
//当这段程序注释后,程序正常运作。
// 消息循环
int rc = 5;

while ( GetMessage(pMsg, NULL, 0, 0) )
{
rc = 5;

if (满足条件)
{
rc = 自己的消息处理函数();
}

if (rc == 5)
{
// 如果不是 TWAIN消息,则解析并分发消息
TranslateMessage(pMsg);
DispatchMessage(pMsg);
}
}//while-end
/////////////////////////////////////////////////////////////

return CScrollView::PreTranslateMessage(pMsg);
//当上段程序不注释掉后,上句 返回语句 用下面的代替,出现不同的现象。
//return TURE; // 没有报错,但程序不能终止。
//return FALSE; // 错误相同 与
// return CScrollView::PreTranslateMessagepMsg);
}
zigzeg 2006-03-23
  • 打赏
  • 举报
回复
现在我的程序一关闭就报错:
UnHandled exception in xxxx.exe (MFC42D.DLL):0xC00000005 : Access Violation
然后程序就停在:CWnd::PreTranslateMessage(MSG* pMsg)

我想应该与内存的释放有关吧? 但我该怎么调试这个错误?不知道在哪里啊?
谢谢大家。
frank_necsthz 2006-03-22
  • 打赏
  • 举报
回复
不错的问题
zigzeg 2006-03-22
  • 打赏
  • 举报
回复
应该没有提供。 在说明手册上明确要求应用程序负责内存的释放。
wlwlxj 2006-03-21
  • 打赏
  • 举报
回复
一般规则是动态库负责创建内存那么最好提供销毁函数,如果没有提供问题到不是很大
因为DLL和应用程序在一个进程里面,共享堆栈资源
fisker0303 2006-03-21
  • 打赏
  • 举报
回复
它没给你提供释放的函数吗?
zigzeg 2006-03-21
  • 打赏
  • 举报
回复
谢谢. dll 是第三方提供的,按要求是:DLL分配内存,但要求用户来释放。我只是调用DLL。

采用GlobalFree(HANDLE),可不可以?
ks_gq 2006-03-21
  • 打赏
  • 举报
回复
我觉得不要在DLL内申请内存然后在客户段释放, 这样会有问题.最好在客户端申请,地址传递给DLL使用.

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧