您的位置:首页 > 其它

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: