首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

为啥编写的DLL会自动导出很多@Finalize和@Initialize这样的函数

2012-12-30 
为什么编写的DLL会自动导出很多@Finalize和@Initialize这样的函数?本帖最后由 yangbai86 于 2012-11-23 00

为什么编写的DLL会自动导出很多@Finalize和@Initialize这样的函数?
本帖最后由 yangbai86 于 2012-11-23 00:50:14 编辑 如题,最近在编写一个DLL,完成后用Dependency查看,发现除了我指定的函数外,还有很多@Finalize和@Initialize这样的函数,但是实际上都没有这些函数的。

请教高手这些是怎么来的?怎么取消这些函数的导出?



补充一下,这些函数都是这样形式的:

“@@类名@Initialize”,“@@类名@Finalize”
[解决办法]
这两个是DLL的初始和析构方法,VCL的系统默认的。
也可以自行添加内容,就象类的构造函数一样,你不定义它,系统会为你自动生成几个最基本的。
[解决办法]
系统类函数,好像无法屏蔽
[解决办法]

引用:
系统类函数,好像无法屏蔽


可以屏蔽掉。

C++Builder生成的可执行文件,默认的导出表中含有"@@类名@Finalize"和"@@类名@Initialize",是由于代码中一条编译指令生成的,这个问题以前我在回复网友问题的时候也提到过:
#pragma package(smart_init)

将.cpp中的这一行代码屏蔽掉,再重新编译,生成的可执行文件导出表就不再有当前单元类的项目。如果有多个单元,必须把每个单元中的smart_init去掉才行,因为每个单元中的smart_init都会在导出表多出@Initialize和@Finalize

另外,C++Builder生成的可执行文件导出表默认还有其他一些项目,如__CppDebugHook和以下划线开头的Form类名等,这里暂不做讨论。

热点排行