分类: C/C++
2009-09-21 16:34:46
HMODULE LoadLibrary( LPCTSTR // file name of module );
参数解释:lpFileName:指定要载入的动态链接库的名称。
返回值:如何函数调用成功,则返回值是库模块的句柄,否则返回NULL。
FARPROC GetProcAddress( HMODULE , // handle to DLL module LPCSTR // function name );参数解释:hModule:包含此函数的DLL模块的句柄。LoadLibrary或者GetModuleHandle函数可以返回此句柄。lpProcName:包含函数名的以NULL结尾的字符串,或者指定函数的序数值。返回值:如果函数调用成功,返回值是DLL中的输出函数地址,否则返回NULL。如下罗列出DLL显式调用的流程:(1)使用LoadLibrary()加载指定名称的DLL。(2)使用GetProcAddress()获取指定名称的函数地址,并将其转换成函数类型。(3)通过函数地址调用函数。(4)调用FreeLibrary()函数卸载DLL。假设在DLL中有一导出函数:extern "C" __declspec(dllexport) int tulip (int a ,int b);在程序中调用DLL中的这一函数://定义一个函数指针
typedef int ( * FUNCTION )(int,int);int main(){HINSTANCE hLib;hLib = ::LoadLibrary(_T("MyDll.dll"));FUNCTION tulipFunc; //定义一个函数指针变量tulipFunc =(FUNCTION )::GetProcAddress(hLib ,"tulip");//调用dll里的函数
tulipFunc(8,10);::FreeLibrary(hLib);return 0;}二、隐式调用这种调用方式使用lib和动态链接库的头文件例如:#include “../MyDll.h”#pragma comment(lib,"../Debug/MyDll.lib")int main(){tulip();//只要这样我们就可以调用dll里的函数了}