动态链接库(一)

一.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//动态链接库名称
EXPORTS
ShowDialog = 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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值