使用vs建立动态链接库DLL过程和使用方法

1、普通导出方式,函数名字显示,创建一个DLL

然后右键-->新建一个类

添加代码

头文件添加声明:

导出的时候,编译器会考虑按照c或者c++的方式导出,c++中由于有重载存在(即函数名字相同,函数参数不同),当生成c++的导出函数的时候,就会由编译器加一堆乱七八糟的符号,并且c++的导出函数只能由c++调用,C语言等其它语言是调用不了的。

然后F7,生成

使用DLL的方法:隐式链接和显示链接,隐式链接是程序一开始就加载DLL到内存,程序终止时释放占用的内存。显示链接是程序使用dll的时候加载,使用完毕后释放内存。

       (1)隐式链接:

     1.将*.dll 和*.lib复制到工程目录中(注意:这里生成的DLL和lib文件。lib中存的是函数代码在什么地方,真正的二进制代码在dll中)

           2.在源码中加入函数的声明:

                #pragma comment(lib, "XXXX.lib")

                extern "C" _declspec(dllimport) int _stdcall LearnAdd(int a,int b);//说明是全局的导入函数

                extern "C" _declspec(dllimport) int _stdcall LearnSub(int a,int b);
                extern "C" _declspec(dllimport) int _stdcall LearnMul(int a,int b);
                extern "C" _declspec(dllimport) int _stdcall LearnDiv(int a,int b);

     3.  调用

      

 (2)显式链接的方法:函数指针

      (1)只用将*.dll复制到工程目录中

                       (2)定义函数指针

              (3)定义函数指针变量

             (4)加载dll到内存中

              (5)使用查找dll中要用的函数地址(使用函数名查找或者函数的序号查找)

 

                (6)用查找的地址给函数指针赋值,然后直接调用函数。"_LearnAdd@8"是命名规则,会在原来的函数前边加下划线,8表示有2个参数(1个参数4字节)

 以上导出的函数在Dependency中查看的时候,会看到函数的名字,而一个有意义的函数名一般是这个函数功能的高度概括,有时候需要把函数名字隐藏起来,就可以使用*.def,把导出函数名字隐藏:

      2、使用*.def导出,隐藏函数名

       1)创建一个DLL,

                       2)添加类

                      3)添加代码和声明,这里代码和声明,用普通的函数编码和声明,不用export关键字了。

                      4)在自己的动态链接库的项目右键->新建-->*.def,

                      5)编辑*.def文件

              5)为刚定义的函数编辑序号和不要名字

               6)F7生成。

               使用*.def导出函数的

 

                     

 

posted @   一日学一日功  阅读(1068)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示