开发环境说明: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并没有使名字改编.无论如何,需要保持声明和调用的方式是一致的.
本文详细介绍了在VC6.0+C++环境下,通过不同方法实现DLL导出及跨语言调用的问题。主要探讨了extern C、__stdcall等关键字的作用与使用场景,并解释了如何利用.def文件来统一函数名改编方式。此外,还强调了在定义DLL时调用约定的一致性。
2万+

被折叠的 条评论
为什么被折叠?



