*.def文件介绍
模块定义 (.def) 文件为链接器提供有关被链接程序的导出、属性及其他方面的 信息。
使用DEF文件来输出函数的一个最主要目的就是:将编译器生成的函数修饰名去掉,用更加自然的、容易理解的、容易记忆的名字,而不是修饰名来输出函数。这里的名字可以不是函数名,这时须使用DEF文件的NAME格式。但由于习惯,大多情况下,只使用函数名,因为这样最简单省事。是否存在偷懒的嫌疑?我的理解,不管是罗列函数名,还是其它输出名,其本质上是一样的,即都是使用了定义文件的NAME格式。直接罗列函数名,就相当于“函数名”=“函数修饰名”,只是可以忽略等号后面的部分,而连接器会自动完成函数入口的匹配和设置工作。而一旦决定使用非函
数名的其它名字输出函数,则必须书写完整的格式,即“函数输出名”=“要输出的函数修饰名”,这里等号后面的部分必须书写正确,否则,连接时就通不过了。举个例子:假设动态库中一个函数描述如下,
int WINAPI TestAdd(int A,int B)
{
return (A+B);
}
其DEF文件的EXPORTS段描述如下,
EXPORTS
TestAdd
Add=?TestAdd@@YGHHH@Z
这里TestAdd和Add</
数名的其它名字输出函数,则必须书写完整的格式,即“函数输出名”=“要输出的函数修饰名”,这里等号后面的部分必须书写正确,否则,连接时就通不过了。举个例子:假设动态库中一个函数描述如下,
int WINAPI TestAdd(int A,int B)
{
return (A+B);
}
其DEF文件的EXPORTS段描述如下,
EXPORTS
TestAdd
Add=?TestAdd@@YGHHH@Z
这里TestAdd和Add</