为啥编写的DLL会自动导出很多@Finalize和@Initialize这样的函数
为什么编写的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类名等,这里暂不做讨论。