Windows C++ 导出和导入纯DLL函数(非COM)总结
来源:互联网 发布:飞鸽网络打印机 编辑:程序博客网 时间:2024/05/20 20:45
多年以前由于DLL hell问题人们很少在直接从dll文件导出函数并且直接使用,但是有时候事情的解决方案不是我们可以选择的,今天在解决一个问题的时候,还是不得已选择了一个这样的方式。但是搜索了一下,网上关于这个问题的总结文章都写的不是很全,于是总结出来,希望对大家有所帮助。
静态导入和动态导入加起来一共三种方式:
静态导入 --需要将 .lib文件和.dll文件copy到执行目录
1. dllexport导出 dllimport导入。
导出时这样写:
__declspec( dllexport ) void func(void){}
导入时这样写:
__declspec( dllimport ) void func(void);
2. .def文件导出dllimport导入。
关于.def的说明:
.def文件是包含一个或多个描述 DLL各种属性的 Module语句的文本文件。如果不使用 __declspec(dllexport)关键字导出 DLL的函数,则 DLL需要 .def文件。.def文件必须至少包含下列模块定义语句:
文件中的第一个语句必须是 LIBRARY语句。此语句将 .def文件标识为属于 DLL。LIBRARY语句的后面是 DLL的名称。链接器将此名称放到 DLL的导入库中。
EXPORTS语句列出名称,可能的话还会列出 DLL导出函数的序号值。通过在函数名的后面加上 @符和一个数字,给函数分配序号值。当指定序号值时,序号值的范围必须是从 1到 N,其中 N是 DLL导出函数的个数。
动态导入--需要将.dll文件copy到执行目录
3. LoadLibrary(),GetProcAddress(),FreeLibrary()惯用法。
示例代码:
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
- Windows C++ 导出和导入纯DLL函数(非COM)总结
- dll导入和导出变量或函数
- C#与DLL和COM的混合编程(1)-C#调用C++写的非托管的DLL中导出的函数
- C#与DLL和COM的混合编程(1)-C#调用C++写的非托管的DLL中导出的函数
- dll导入和导出
- dll导入和导出
- dll文件导出导入函数
- 纯c接口dll 和windows句柄文章
- Windows/MFC_中dll __stdcall,__cdcel,extern c 和导出函数名
- 应用程序调用dll组件,及dll组件之间的关系,dll中类及函数的导入导出;dll的导出方式和链接方式分析(一)
- C++中DLL函数的导出和导入
- windows dll函数的导出
- Windows下的dll导出与导入
- DLL导出函数、COM与二进制兼容
- 如何看DLL文件里需要那些导入函数和dll等,导出了什么
- DLL导出函数和类
- C++ DLL导出类的一种方法(纯虚函数)
- DLL中类的导出和导入
- 九度OJ 题目1034:寻找大富翁
- Java基础-正则表达式(二)
- UML概述
- 更新jsp后tomcat没有重新编译 解决办法
- Mtk Ft6306 touch 驱动
- Windows C++ 导出和导入纯DLL函数(非COM)总结
- 【Java反射机制】_认识Class类笔记
- Linux设备驱动之HID驱动
- MVC2工程安装部署
- OGRE frameRenderingQueued方法分析
- Jmeter作为监控工具
- UML中的交互图
- rt3070 wifi arm+linux移植
- 在hadoop中利用GenericWritable来减少中间数据,加速join