EXE导出函数及def文件格式说明
来源:互联网 发布:网络大学本科 编辑:程序博客网 时间:2024/06/05 05:14
转自:http://bbs.pediy.com/showthread.php?t=56840
EXE导出函数三种不同的解决办法(原理可能是一样的,:)):
1)在导出函数声明之前加上__declspec(dllexport)。例:
__declspec(dllexport) int Add(int a, int b);__declspec(dllexport) int Sub(int a, int b);__declspec(dllexport) int Mul(int a, int b);__declspec(dllexport) int Div(int a, int b);
#pragma comment(linker, "/EXPORT:_Add,@1,NONAME")#pragma comment(linker, "/EXPORT:_Sub,@2,NONAME")#pragma comment(linker, "/EXPORT:_Mul,@3,NONAME")#pragma comment(linker, "/EXPORT:_Div,@4,NONAME")
EXPORTS Add @1 NONAME Sub @2 NONAME Mul @3 NONAME Div @4 NONAME
另需要在链接器命令行参数中指定def文件名:
/DEF:Callee.def
注意:在def文件中不要有
LIBRARY [library][BASE=address]
这样的语句。
相比较而言,后两种方法可以设置更多的参数。
函数举例:
extern "C" { int Add(int a, int b) { return (a + b); } int Sub(int a, int b) { return (a - b); } int Mul(int a, int b) { return (a * b); } int Div(int a, int b) { if (b == 0) return 0; else return (a / b); }}编译时会自动生成相应的导出库(lib)文件,供调用者使用。
调用方法和普通的动态链接库调用一样。
调用者必须能够找到被调用者的位置,否则报错,被调用者是否运行不影响。
调用代码举例:
extern "C"{ int Add(int a, int b); int Sub(int a, int b); int Mul(int a, int b); int Div(int a, int b);}#pragma comment (lib, "Callee.lib")void CCallerDlg::OnBnClickedCalculate(){ // TODO: Add your control notification handler code here UpdateData(TRUE); switch (((CComboBox *)GetDlgItem(IDC_COMBO_OPERATOR))->GetCurSel()) { case ADD: { m_iResult = Add(m_iNum1, m_iNum2); break; } case SUB: { m_iResult = Sub(m_iNum1, m_iNum2); break; } ... ...
根据导出序号调用dll函数
GetProcAddress(hDll,MAKEINTRESOURCE(sequence_num));
另外的方式:《编程高手箴言》一书所述调用门
//------------------------------------------------------------------------------------------------------------------------
def文件说明传送门:
http://andylin02.iteye.com/blog/441300
- EXE导出函数及def文件格式说明
- 统计图.def文件格式说明
- def文件格式(DLL导出)
- MFC dll .def文件格式说明(解析)
- boost python def 函数导出
- DEF文件格式
- .def文件格式
- 文件格式及说明
- 文件格式及说明
- 文件格式及说明
- 用.DEF文件导出DLL中的函数
- 用.DEF文件导出DLL中的函数
- DEF文件中导出DLL函数
- dllexport和.def导出函数区别
- def文件&导出函数&lib文件关联
- def文件 导出dll重载函数
- 让EXE导出函数
- 七. 让EXE导出函数及DLL木马
- linux 堆、栈、全局变量存放
- 领域模型系列:概述
- 常用的Java核心包
- javascript中with的用法
- C# 根据当前时间获取,本周,本月,本季度等时间段 .Net中Exception
- EXE导出函数及def文件格式说明
- 领域模型系列:贫血、充血模型(非常经典)
- Bluetooth Service Classes and Device Classes
- PHP 文章内容中的关键词加链接
- Datagrid加入一列显示行号 or 自增列 2012/04/28
- .NET ORM框架(一)
- hibernate 对象继承不能乱用
- PHP的一个过滤敏感词或脏话的方法
- Mina网络应用框架及TCP/UDP开发范例(编著)