动态链接库(一)
来源:互联网 发布:黑马程序员 百度云 编辑:程序博客网 时间:2024/06/07 00:26
一.typedef函数指针用法
1.简单的函数指针的应用
形式1:返回类型(*函数名)(参数表)char (*pFun)(int);
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
2.使用typedef更直观更方便
形式1:typedef 返回类型(*新类型)(参数表)typedef char (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
二.查看动态链接库信息
Dependency Walker (depends.exe)三.创建动态链接库
showDlg.h#include "stdafx.h"#define EXPORT __declspec(dllexport)//导出函数extern "C" EXPORT void __stdcall ShowDialog(char* pText);//extern "C" 防止C++编译器对函数名进行改编
ShowDlg.cpp
// ShowDlg.cpp : Defines the entry point for the DLL application.//#include "stdafx.h"#include "ShowDlg.h"BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ return TRUE;}void __stdcall ShowDialog(char* pText){MessageBox(NULL,pText,"提示",0);}
由于_stdcall是一种比较流行的函数调用约定,为了防止发生函数命名改变的情况,可以定义一个.def文件
ShowDlg.def
LIBRARY ShowDlg.dll//动态链接库名称EXPORTSShowDialog = ShowDialog//导出的函数名=动态链接库内部函数名
四.调用动态链接库
1.动态调用
#include "stdafx.h"#include "windows.h"int main(){typedef void(__stdcall * funShowInfo)(char* pchData);//形式1:typedef 返回类型(*新类型)(参数表)HMODULE hMod = LoadLibrary("ShowDlg.dll");//加载if (hMod != NULL)//判断加载是否成功{funShowInfo ShowInfo;//定义函数指针ShowInfo = (funShowInfo)GetProcAddress(hMod, "ShowDialog");//获取动态链接库中的函数if (ShowInfo)//判断函数指针是否为空ShowInfo("皮皮虾的春天");//调用动态链接库中的函数}FreeLibrary(hMod);//卸载动态链接库printf("DLL\n");}
2.静态调用
需要三个文件,动态链接库文件ShowDlg.dll,动态链接库头文件ShowDlg.h,动态链接库lib文件ShowDlg.lib
#include "stdafx.h"#include "windows.h"#include "ShowDlg.h"#pragma comment(lib,"ShowDlg.lib")int main(){ShowDialog("静态调用");printf("DLL\n");}
源码
http://download.csdn.net/detail/greless/9853300
阅读全文
0 0
- 动态链接库(一)
- 动态链接库(一)
- 动态链接库(一)
- 动态链接库详解【一】
- 动态链接库理解(一)
- 动态链接库全面浅析(一)-----Win32 动态链接库
- 动态链接库全面浅析(一)-----Win32 动态链接库
- 专题:Windows动态链接库(一)
- 动态链接库基础学习一
- Delphi 动态链接库(一)
- 动态链接库的使用(一):创建
- C++动态链接库(一)
- VC DLL 动态链接库(一)
- 动态链接库和静态链接库(一)
- 静态链接VS动态链接(一)
- 动态链接库与主程序交互之[MFC] VC++动态链接库资源调用(一)
- VC++动态链接库(DLL)编程(一)
- VC++动态链接库((DLL)编程深入浅出(一)
- Qt 网络数据传输
- IT人员健康信号之鼻炎养护
- Speed Up Project Builds In Eclipse
- MVVM模式--Model,View,ViewModel三者平衡
- less命名规范
- 动态链接库(一)
- MultiProcess下Log的打印要注意的一点
- 一些实用的API文档地址
- python 建立静态资源服务器报错
- 华为FusionStage PaaS平台技术探秘之应用调度与资源管理
- 【R语言数据导出txt】 write.table 函数用法
- C++中int与string的相互转换
- 类似于可滚动的时分秒
- iOS 中用到 fabsf fabs abs函数的作用