DLL 动态和静态导入

在这里只谈动态库DLL
1 创建DLL(可以选择有入口函数或没有)
  三步:
      第一步,声明,分为.h和.def两个方式:
      A 格式:#ifndef LIB_H
              #define LIB_H
              extern "C" int _declspec(dllexport) add(int x,int y);
              #endif
      B 格式:LIBRARY test                            //dll的名字
              EXPORTS
              add @ 1                                 //1为序号,可随意指定
     第二步,实现文件.cpp,其中第一步若采用.h,只需在.cpp中加入#include "lib.h"
     第三步,编译,然后构建dll文件,B格式比A格式要多生成一个lib文件
2 在自己的应用程序中调用DLL(分为静态调用和动态调用两种)
  静态调用:
          #pragma comment(lib,"test.lib");
          extern "C" _declspec(dllimport) add(int x,int y);
          在程序中调用add的时候自动调用
  动态调用:
          A 宏定义函数指针类型:typedef int (*lpAddFun)(int,int);
          B 定义DLL句柄和函数指针:HINSTANCE hDll;
                                   lpAddFun addFun;
          C 动态调用:dDll=LoadLibrary("……//test.dll");
                      addFun=(lpAddFun)GetProcAddress(hDll,"add");
          D 动态销毁:FreeLibrary(hDll)
备注:以上是关于导出函数的操作,关于导出变量的操作完全与上述相同。

关于导出类的操作稍有不同,下面给出一个简单的示例,分为四步:
1 定义.h文件:
            #ifndef POINT_H
            #define POINT_H
            #ifdef DLL_FILE
            class _declspec(dllexport) point
            #else
            class _declspec(dllimport) point
            #endif
            {
            public:
               float x;
               float y;
               point();
               point(float x_cor,float y_cor);
            } 
            #endif
2 定义.cpp文件:
            #ifndef DLL_FILE
            #define DLL_FILE
            #endif
            #include "point.h"
            point::point()
            {
                x=0.0;
                y=0.0;
            }
            point::point(float x_cor,float y_cor)
            {
                x=x_cor;
                y=y_cor;
            }
3 编译并构建,会产生.dll和.lib
4 静态调用:
          A #include "point.h"
          B #pragma comment(lib,"**.lib");
          C 根据类名自动调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值