vs2005制做DLL及其调用

目录:

         前言.   欢迎指正追加

         实例一 动态库的制作及使用的一般方法 ---入门级  张永辉 2011.11

1) 创建DLL文件

                            2)查看DLL文件及制作lib文件

                            3)动态连接库的调用:

         实例二  

实例1:

//环境Visual Studio 2005

1)创建及查看DLL1.dll文件

    1.在VS2005下创建项目或新建项目

   2.在Visaul C++ 选择win32 选择 WIN32控制台应用程序

   3.输入名称:NEW_DLL_example1 ,路径自选。

   4.应用程序类型:选择DLL(D) , 附加选项:空项目。完成。

   5.添加dll1s.cpp  dll1s.h文件到路径……\NEW_DLL_example1\NEW_DLL_example1。

         其内容如下:将其加入到工程

           //------------dll1s.h-----------------

                  #include <iostream>

                  #define  DLL1S_API_declspec(dllexport)  //解决在不同语言调用下的名字匹配问题

                  DLL1S_API int add(int a,intb);          //实现两个整数相加

                  DLL1S_API int sub(int a,intb);          //实现两个整数相减

           //------------dll1s.cpp---------------

                  #include "dll1s.h"

                  DLL1S_API int add(int a,intb)          //实现两个整数相加

                  {    return a+b;   }

                  DLL1S_API int sub (int a,intb)         //实现两个整数相减

                  {    return a-b;   }

    6.编译以后在Debug文件下生成一个NEW_DLL_example1.dll的动态链接库文件。

2)查看DLL文件及制作lib文件

   1.  在DOS下打开此文件目录

   2.  并把你安装VS2005的目录下(x:\Microsoft Visual Studio 8\VC\bin)找到vcvars32.bat此文件,把它托放在你的DOS对话框里面,单击回车

   3.  运行 dumpbin -exports NEW_DLL_example1.dll就可以查到你生成的DLL里面所包含的所实现的两个函数的具体信息:

   4.  现在再打开你的Debug文件你会发现里面多出来一个NEW_DLL_example1.lib文件,dumpbin -exports就实现的了函数的导出。

   5.  使用Depends工具打开NEW_DLL_example1.dll也可以看到dll文件内的内容。

3)动态连接库的调用:

   1.  在VS2005下创建项目或新建项目

   2.  Visaul C++ 选择win32 选择 WIN32控制台应用程序

   3.  安默认会添加预编译头,完成。

   4.  刚才生成的NEW_DLL_example1.libNEW_DLL_example1.dll文件拷到【…\NEW_CALL_example1\NEW_CALL_example1】此工程目录下

   5.      自动生成NEW_CALL_example1.cpp,并修改如下

               //-----------------------NEW_CALL_example1.cpp-------------------------

                 #include"stdafx.h"

                 #include"dll1m.h"

                 int_tmain(int argc, _TCHAR* argv[])

                 {

                    inta = 34;

                    int b = 23;

                    printf(" a + b = %d \n" , add(a,b));

                    printf(" a - b = %d \n" , sub(a,b));

                    getchar();

                    return 0;

                                   }

                //--------------- dll1m.h---------------------------

                #include<iostream>

                #pragmacomment(lib,"NEW_DLL_example1.lib")

                #define DLL1M_API _declspec(dllexport//解决在不同语言调用下的名字匹配问题

                DLL1M_APIint add(inta,int b);          //实现两个整数相加

                DLL1M_APIint sub (inta,int b);         //实现两个整数相减

 

实战经验:为了其它语言能够调用,需要做如下改动:

                dll1s.h   #define  DLL1S_API            _declspec(dllexport)  改为     #define  DLL1S_API extern "C" _declspec(dllexport)

             dll1m.h  #define  DLL1M_API            _declspec(dllexport)  改为     #define  DLL1M_API extern "C" _declspec(dllexport)

             使用extern "C"的缺陷是不能导出C++的类成员函数,只能 导出全局函数。使名字不发生改变。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值