创建通用动态库总结

本文详细介绍了在VC6.0+C++环境下,通过不同方法实现DLL导出及跨语言调用的问题。主要探讨了extern C、__stdcall等关键字的作用与使用场景,并解释了如何利用.def文件来统一函数名改编方式。此外,还强调了在定义DLL时调用约定的一致性。

开发环境说明:vc6.0+c++

 

1-extern "C" 是解决C和c++之间的调用问题.使导出函数按照c语言的方式不进行函数名称的改编.注意,这个方式只能导出全局函数,并不能导出类或者类成员函数.

2-使用__stdcall,标准调用,即Windows api的调用方式,也成为pascal方式,Delfi也是使用这个方式.使用__stdcall时,导出函数名称要进行改编.规则是:FunctionName@参数的字节数.这样到处都函数c和c++,无法调用.

3-为了创建通用的动态库,需要把导出函数的名字以一个一致的方式进行改编.基于不同的编译器使用不同的风格的情况下,最好的途径就是不进行改编.可以使用def保证这一点.def使用很简单,此处不再细说.但是我现在感觉为难的是,使用def规定导出函数,使得无法进行dll的静态加载.目前看到的例子都是进行动态加载,按照如下的步骤进行:第一步,声明调用函数的类型.第二步,使用GetProcAddress获取导出函数地址.并进行类型强制转换.第三步,如果返回地址不为空,则调用之.

4-重点说明一点.在使用def的情况下,如果在定义动态库时使用了__stdcall的调用约定,则在使用时,声明函数类型时也要指定__stdcall,虽然这种情况下__stdcall并没有使名字改编.无论如何,需要保持声明和调用的方式是一致的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值