请教MFC扩展DLL的问题,关于内存泄的

AgedBOY 2005-03-20 11:31:39
我的程序现在有这样一个调用关系:("->"表示通过.lib隐式调用)

[exe] -> [ext dll 1] -> [ext dll 2]
| |^
---------------------------

这三个模块里分别都含有一些资源,但是很少。主要是版本信息,还有几个ICON。

当用_MBCS编译运行,退出时,Output窗口只有一堆DLL加载卸载等正常信息。
当用_UNICODE编译运行,退出时,Output窗口显示出怒长一串“Memory leak detected”!

我上面说的“运行”是按F5叫起程序,但不做任何事,马上再关掉。

并且这些模块的入口点函数里,除了向导生成的东东外,也没做任何事。换句话说,我能保证这么内存泄漏 不是 由于诸如自己忘记释放内存等引起的。

小弟特来请教一下诸位师长前辈,这是怎么一回事?

我看到MFC向导在生成MFC扩展DLL的入口点函数里,在“new CDynLinkLibrary(xxxxDLL);”一句的上面提到:如果扩展dll不是直接从exe调用,则要怎么怎么着,我也试着做了,没有效果。

而且在内存泄漏信息里,竟然还有没被删除的那个CDynLinkLibrary对象!我跟踪了一下,见识了那个纷繁芜杂的“Resource List”,不过看到CDynLinkLibrary对象也被delete了啊?

怎么搞的啊?为啥专门_UNICODE版会这样哩?

...全文
84 点赞 收藏 7
写回复
7 条回复
BigFanOfCpp 2005年03月22日
UNICODE使用宽字符,所以会分配ANSI分配内存的两倍,检查你的程序,看看是不是自始至终都是UNICODE呢?
我的意思就是UNICODE分配的内存,ANSI函数释放的,肯定不行,就算是系统的API和库函数,控制不好的话,也是有问题的。
回复 点赞
AgedBOY 2005年03月22日
呵呵……哦谢谢了。
回复 点赞
oyljerry 2005年03月22日
用链接库对应的版本,注意函数也要用Unicode函数
回复 点赞
mousefj 2005年03月21日
版本要统一
给你一段代码,供参考:
#ifdef _DEBUG
#pragma comment(lib,"\\EPID2000\\lib_debug\\CJ60Libd.lib")
#else
#pragma comment(lib,"\\EPID2000\\lib\\CJ60Lib.lib")
#endif
回复 点赞
AgedBOY 2005年03月21日
就这样了吗?
回复 点赞
AgedBOY 2005年03月20日
对对,都是_UNICODE编译的。另外,我上面的图的意思是:

exe连接了dll 1的lib,dll 1连接了dll 2的lib, 而exe也连接了dll 2的lib。
我说明白了吗?我知道这样设计有些糟糕。但目前暂时只能如此。
回复 点赞
Cline 2005年03月20日
你所有的Module都是用_UNICODE&UNICODE编译的吗?
回复 点赞
发动态
发帖子
进程/线程/DLL
创建于2007-09-28

6376

社区成员

4.9w+

社区内容

VC/MFC 进程/线程/DLL
社区公告
暂无公告