加载dll

昨天说到dll和lib的关系,就有大牛跟我说,dll的lib跟头文件不是必须的,没有也是可以调用的,用dll+lib+头文件的方式,是隐式调用dll的方式,而还有另外一种显式调用dll的方式。

本着自己动手,丰衣足食的原则,我没有继续追问,今天查了资料,发现别有洞天。

经查,调用dll确实是由两种方式,隐式调用就是昨天说的在工程里面加上lib,然后引入头文件,就可以正常编译了,这里想了解下第二种,显式调用的方式.

显式调用是通过系统api来实现的,windows和Linux的不一样,这里以windows为例,

可以包含windows.h以后,使用LoadLibrary进行加载,加载完成以后的返回值是HINSTANCE,可以通过它是否为NULL判断是否加载成功了,加载成功以后可以通过GetProcAddress获取里面具体的函数,具体用法见后面附图。

         不过这个用法很蛋疼,只能获取到函数,导出的类拿不到,拿不到的话其实意义不是很大,因为实际中我用到或者编写的更多是类,感觉不加上头文件编译器这关是过不了的。然后我又继续查,发现了另外一种用法,虚函数。这也是今晚最大的收获,具体用法如下:

         将实现类封装,抽象出一个接口类,然后用实现类去继承它,然后写一个全局的Export函数,函数参数为空,返回值为虚函数指针,在里面new一个实现类的指针,并将其返回即可,同时将其导出。

         然后在用到这个dll的工程里面引入接口头文件,按上面的用法获取Export函数并调用,这样就可以实现用接口的函数调实现类的函数了,实现了多态和封装,感觉棒棒的。

         不过这么做这么麻烦,有什么好处呢?其实好处是有的ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值