gpt4 book ai didi

c++ - Delphi链接器和C++链接器的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:47 25 4
gpt4 key购买 nike

我来自 Delphi 世界,在那里静态导入 DLL 函数非常容易。您需要做的就是像这样指定函数名称和模块:

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

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

我知道这对你们中的许多人来说可能听起来很幼稚,但是从 Delphi 进入 C++ 世界真的会让人感到困惑。

最佳答案

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

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

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

关于c++ - Delphi链接器和C++链接器的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com