21.5 windows_21_Library_use_DLL_Invoke 动态库补充5
2016-06-10 10:12
363 查看
// windows_21_Library_use_DLL_Invoke.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
//2.2.2 定义函数指针,在开发工程中,一般都是大写
typedef int( *DLL_ADD )( int nAdd1, int nAdd2 );
typedef int( *DLL_SUB )( int nSub1, int nSub2 );
typedef int( *DLL_MUL )( int nMul1, int nMul2 );
void UseDll( )
{
//2.2.1 加载动态库,使用LoadLibrary,HMODULE = HINSTANCE
HMODULE hDll = (HMODULE)LoadLibrary( "windows_21_Library_DLL_test.dll" );
if (hDll == NULL)
{
printf( "Load Failed\n" );
return;
}
printf( "hDll handle: %p\n", hDll );
//2.2.2 定义函数指针变量
DLL_ADD Dll_Add = NULL;
DLL_SUB Dll_Sub = NULL;
DLL_MUL Dll_Mul = NULL;
//2.2.3 获取函数地址 GetProcAddress
Dll_Add = (DLL_ADD)GetProcAddress( hDll, "Dll_Add" ); //取得Dll_Add函数地址转换成DLL_ADD类型
printf( "Dll_Add handle: %p\n", Dll_Add );
Dll_Sub = (DLL_SUB)GetProcAddress( hDll, "Dll_Sub" );
printf( "Dll_Sub handle: %p\n", Dll_Sub );
Dll_Mul = (DLL_MUL)GetProcAddress( hDll, "Dll_Mul" );
printf( "Dll_Mul handle: %p\n", Dll_Mul );
if (!(Dll_Add && Dll_Sub && Dll_Mul))
{
printf( "Get function failed\n" );
}
//2.2.4 使用函数
//由于 Dll_Add函数DLL文件里使用的是CPP方式导出,无法得到正确的函数名,所以在这里无法使用
int nSub = Dll_Sub( 100, 100 );
int nMul = Dll_Mul( 100, 100 );
printf( "nSub:%d\n", nSub );
printf( "nMul:%d\n", nMul );
//2.2.5 释放动态库,看样子有加载就有释放的预言就又实现了
FreeLibrary( hDll );
}
int _tmain(int argc, _TCHAR* argv[])
{
UseDll( );
return 0;
}
[/code]
来自为知笔记(Wiz)
相关文章推荐
- php获取全选checkbox多个值
- CentOS上安装RabbitMQ3.6.X
- 幂法求矩阵的主特征值和特征向量
- spring声明式事务管理
- set
- 连接数据库
- 【BZOJ4579】[Usaco2016 Open]Closing the Farm【并查集】【离线】
- C语言函数的应用
- Class and Object
- 单链表的逆转问题
- 关于java I/O中flush方法作用的理解
- c语言中如何判断文件是否存在
- C语言数组的应用
- 剑指offer(四十九)之二叉树中和为某一值的路径
- Codevs 1065 01字符串
- C# winform ComboBox绑定数据源时触发SelectedIndexChanged事件的处理
- 浅谈栈帧
- 六月计划#2A(6.10-6.16)
- java打字母的小游戏
- Codevs 1337 银行里的迷宫