当前位置 : 主页 > 编程语言 > delphi >

Delphi链接器和C链接器之间的区别

来源:互联网 收集:自由互联 发布时间:2021-06-23
我来自Delphi世界,静态导入DLL函数非常简单.您需要做的就是指定函数名称和模块,如下所示: function GetTickCount : DWORD; stdcall; external 'Kernel32.dll'; 为什么在C中必须使用kernel32.lib才能导入函数
我来自Delphi世界,静态导入DLL函数非常简单.您需要做的就是指定函数名称和模块,如下所示:

function GetTickCount : DWORD; stdcall; external 'Kernel32.dll';

为什么在C中必须使用kernel32.lib才能导入函数?为什么我不能简单地告诉链接器像Delphi一样导入该函数?

我知道这对你们的老兄来说听起来很无聊,但是从Delphi进入C世界真的会让人感到困惑.

C工具链需要几个步骤来完成Delphi可以一步完成的工作.在C语句中声明外部DLL函数时,没有(标准)方法来指示实际可以找到该函数的命名DLL.就编译器而言,声明的函数只是extern并且必须有一个定义可以在链接器的某处找到.

要将命名函数连接到可以找到它的DLL,C工具链需要一个“导入库”,其中包含链接器知道如何处理的导入存根.当查找由导入存根定义的函数时,链接器会为相应DLL中的特定函数名创建DLL函数引用(如导入存根所示).

在Delphi中,语言设计者允许程序员直接在源代码中指定相关的DLL.然后,Delphi编译器可以直接生成对外部DLL的引用,而无需使用导入存根步骤.

网友评论