解决在C++Builder中动态库的关于链接问题

    作者:课课家教育更新于: 2017-01-13 15:21:18

    大神带你学编程,欢迎选课

      大家知道什么是动态库?动态库又称动态链接库,英文为DLL,是DynamicLinkLibrary的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。那么今天我们就一起来解决在C++Builder中动态库的关于链接问题吧。

    解决在C++Builder中动态库的关于链接问题_C++Builder_开发环境_编程代码_课课家

      在教程开始之前,小编先问大家一个问题,那就是大家知道动态库链接到应用程序中有哪几种方式吗?没错,主要就是有两种方式。分别是显式链接以及隐式链接。在这两种方式中,最常用的方式是隐式链接,显式链接用得就比较少。

      假如说动态链接库以及应用程序这两个都是分别在不同开发平台上编制出来的,那么动态库的导入库(即lib文件,该文件为Windows操作系统中的库文件)就有可能会和应用程序的开发平台所要求的导入库格式不相容了。这样子的话,就会从而在动态链接库和应用程序隐式链接的时候,出现应用程序链接错误的情况了。具体的错误信息如下:containsinvalidOMFrecord。就比如说,我们在C++Builder这个开发平台上链接VisualC++制作的动态链接库的时候,就会出现上面的错误信息。那么如何解决这一个问题呢?其实方法还是比较多的,小编在这里就为大家介绍最常用的两种方法吧。具体的方法是:使用C++Builder中提供的导入库生成工具以及显式连接法。

      那么问题就来了?什么是显式连接呢?其实显式连接的意思就是不需要在工程中加入相应的头文件以及导入库,我们仅仅只需要将动态链接库放入所指定的目录下面就可以了。在应用程序中,我们还可以通过函数调用显式的装载以及卸掉DLL,最后只需要通过函数指针来调用DLL的导出函数。

      具体的操作步骤如下:

      第一步:首先我们要做的就是先调用一下LoadLibrary函数装载DLL,并且还要将模块句柄得到;

      第二步:然后就直接调用GetProcaddress函数,这样我们就可以获取得到指定导出函数的指针了;

      第三步:接下来我们只需要使用这个函数的指针调用这个函数就可以了;

      第四步:当我们使用完毕以后,还要使用FreeLibrary将DLL释放。

      示范例子:

      为了可以让大家更加的深入理解这个方面的知识,小编在这里特意找了一个示范例子演示给大家看。具体的编程代码,如图所示:

      上面的这个应用程序是在C++Builder3.0以及VC++5.0的开发环境下编译通过的。

      最后我们只需要使用C++Builder中所为大家提供的导入库生成工具:首先先做预处理,然后只需要隐式链接就可以了。

      具体的操作步骤如下:

      第一步:首先我们要使用C++Builder为我们提供的implib.exe工具,重新再生成这个动态库(即xxx.dll)的导入库(即xxx.lib)。具体的命令行,可以参看如下编程代码:

    编程代码

      implibaddit.libaddit.dll.

      在这里,大家要注意一点,那就是addit.lib为要生成的导入库,而addit.dll为已有动态库。由此可知,所生成的导入库addit.lib格式要和C++Builder开发平台是相容的,要不然就会出现bug的现象。

      第二步:然后,我们还要在动态库的头文件addit.h中,对这个输出函数重新说明一下。具体的命令行,可以参看如下编程代码:

      extern__stdcallvoidaddit(inta,intb,int*c);

      第三步:最后我们只需要采用隐式链接法,再一次把重新说明的头文件(addit.h)yiji重新生成的导入库(addit.lib)加入到C++Builder应用程序的工程项目中,进行连接以及编译就可以了。

      温馨提示:已有动态库(addit.dll)是按照上面的步骤进行操作的,而这个应用程序是在C++Builder3.0以及VC++5.0开发环境下编译通过的。大家不妨可以尝试一下,方法相对来说还是比较简单的。

      小编结语:

      通过这篇编程语言教程,不知道大家是否已经学会了解决在C++Builder中动态库的关于链接问题?在这篇教程中,主要就是向大家介绍一下具体的操作步骤。希望这对大家有所帮助。你的支持就是课课家教育最大的动力,欢迎进入课课家教育!

C++ 更多推荐

课课家教育

未登录

1