关于DLL显式链接的二三事

很久没有写过链接DLL一类的程序了。很多时候,功能都是直接写在主程序里,不需要实现什么插件功能。于是乎,根本不需要链接什么DLL文件。最近C++ builder老师突然说,期末考试不考试题,改做程序,于是本来打算做个关于扩展插件功能实现的程序。当然,由于是插件程序,牵扯到了如何获得插件程序是否安装、如何生成对应的图形界面等等的问题。

不过这里我倒不是很想说那么多东西,就是写一些关于DLL编写中的一些常识,还有因为一些功能上的需要,需要显示链接DLL中的类。(平台VS2008)

1. DLL的引出问题

老样子,向导过后,大致生成了这样的头文件程序:

这里需要注意一个问题,最初我也忽略掉了。在编译引出表过程中,VC一般会自作聪明的修改导出表,加上一些序号之类的东西,这样的话例如直接引用nBCB是不可能的,提示没有这个导出变量。需要在前面加上extern “C”,像这个样子:

extern "C" BCB_API int nBCB;

这样导出的变量就会是nBCB了。

2.如何引用函数

举个例子吧,我在DLL中有个void ShowMessage()函数,其实就是个MessageBox。在主程序中如何引用呢?

下面的程序完全足够了:

3.如何引用类?

之前我在CSDN社区中看到的最初的一个帖子中提到说,在VC中的DLL是无法显示链接导出。这个问题我就没有深入了解过,毕竟算是不怎么用到面向对象类继承什么的特性。这次因为牵扯到对主窗体类的控制,所以还是需要想想类似的情况处理。

不过消息非常不好,在VC中如果尝试直接_declspec(dllexport)的话,得到的结果无疑是夹杂其他符号的导出,这样的话,使用起来极其不方便,而且,做插件的时候,更是不可用的。那么,如何才能使用DLL中的类呢?

答案是采用围魏救赵的方法……

假定class定义如下:

我们还需要定义一个生成类的函数:

这样,就可以使用如下方法访问类:

目前我也只有这种可用方法,如果你有什么好方法,欢迎不吝赐教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值