动态链接库的静态导入导出

【一】静态导入导出

1.1 导出

1.1.1 __declspec(dllexport)关键字
  在你需要导出的数据或者函数前使用__declspec(dllexport)
  eg: __declspec(dllexport) int WoYaoDaoChu(int num){return num;} //ok 这个函数就是这个dll的导出函数了。

  eg: class __declspec(dllexport) WoYaoDaoChu{}; //导出类的所有公共成员和函数

  可以导出的东西包括 数据,函数,类,类成员函数(这句话也不尽对,特别是当类如C要导入你的dll时,具体暂时我说不清楚,这里留个标记)

  __declspec(dllexport)被编译器编译时识别,在编译器生成.OBJ文件时会额外加入导出信息。链接器会在链接时获取并处理这些信息。

  链接器通过这些信息生成.LIB文件。链接器在生成的DLL文件中添加导出符号表(字母顺序排列,添加RVA(相对虚拟地址)。

  导出符号表和RVA都在生成的DLL中。

1.1.2 .def文件(模块定义文件)

  这样就不需要在要导出的东西(数据,函数,类,类成员)前些__declspec(dllexport)关键字了。
  如果使用VS,IDE。可以在项目-属性-链接器-输入中修改该项目使用的DEF文件。
  MSDN摘抄,免得辛苦再找(模块定义语句规则)

 


语句、属性关键字和用户指定的标识符区分大小写。

包含空格或分号 (;) 的长文件名必须用引号 (") 引起。

使用一个或多个空格、制表符或换行符,将语句关键字同其参数分开和将各语句分开。指定参数的冒号 (:) 或等号 (=) 两旁有零个或多个空格、制表符或换行符。

如果使用 NAME 或 LIBRARY 语句,则这些语句必须位于所有其他语句之前。

在 .def 文件中,SECTIONS 和 EXPORTS 语句可以出现多次。每个语句都可以采用多个规范,各规范间必须用一个或多个空格、制表符或换行符分开。语句关键字必须在第一个规范的前面出现一次,并且可以在每个附加规范的前面重复。

许多语句都具有等效的 LINK 命令行选项。有关其他详细信息,请参见相应的 LINK 选项说明。

.def 文件中的注释由每个注释行开始处的分号 (;) 指定。注释不能与语句共享一行,但可以在多行语句的规范间出现。((SECTIONS 和 EXPORTS 为多行语句。)

以十进制或十六进制为基础指定数值参数。

如果字符串参数与保留字匹配,则必须用双引号 (") 将字符串参数引起。

 

1.2 导入

1.2.1 __declspec(dllimport)关键字

  在你需要导入dll的项目中 用 __declspec(dllimport) 声明导入对象
  eg: __declspec(dllimport) int WoYaoDaoRu(int);
  eg:class __declspec(dllimport) ClassName{
    public:

      void Fun1(); //要写出你要引用的函数
    };

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值