如果动态使用平台提供的API

开发工具的安装目录下会有include,lib目录,这两个目录下存放着OS提供的API的声明以及经过封装的一些类以方便程序员开发,封装的类提供的服务大多通过调用OS的API来实现,而真正提供OS的API实现的却在一个个dll中。我们想要使用这些API或经过封装的类的服务时,一般做法如下:

//test.cpp

#include<xxx.h>

#param comment (lib, "xxx.lib")

//调用api或使用一个经过封装的类

使用了以上方式开发的程序不能保证在任何系统下都能正常工作,因为在执行这个程序的时候,系统会动态加载系统用到的各个dll,程序依赖的这些dll不一定都存在于系统中,例如gdiplus.dll在2000下默认是没有的,当加载失败的时候,程序可能就会有问题了。

一种解决方案是:在程序的安装包里带上程序依赖的dll,但是这样会带来安装包的增大。

另一种解决方案是:如果你能允许失去一些该dll提供的api时,那么可以考虑下面介绍的方案。

(1)去掉 #param comment (lib, "xxx.lib")

(2)封装API

        假设你使用了 void ApiFunc1();那么你自己提供一个void ApiFunc1();函数

        该函数的实现如下:

         void ApiFunc1()

         {

                     LoadLibrary("xxx.dll");

                     如果加载失败,或直接返回或自己实现一个简化的版本;

                     如果加载成功,那么调用真正的api

         }

(3)开发工具提供的一些经过封装的类提供的一些方法是直接调用api的,我们也更改这种方式。但是这些经过封装的类大多在include目录里,这个目录里的文件我们不能随便更改,那么怎么办呢?我们还是只需要按照2的方法来做即可。编译器在链接api时,由于发现我们程序里就有这个函数的实现,它就把我们自己的程序链接进去了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值