About DLL

动态连接库的两种方式?
答:调用一个DLL中的函数有两种方法:
1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数
,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向
系统提供了载入DLL时所需的信息及DLL函数定位。
2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或Loa
dLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的
出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了

FARPROC GetProcAddress(
  HMODULE hModule,
  LPCSTR lpProcName
);
该函数输入dll的handler hModule 和 函数的名字lpProcName.
返回一个函数指针,供调用. 见下面的例子.

typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);

...

HINSTANCE hDLL;               // Handle to DLL

LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer

DWORD dwParam1;

UINT  uParam2, uReturnVal;

hDLL = LoadLibrary("MyDLL");

if (hDLL != NULL)

{

lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,

"DLLFunc1");

if (!lpfnDllFunc1)

{

// handle the error

FreeLibrary(hDLL);

return SOME_ERROR_CODE;

}

else

{

// call the function

uReturnVal = lpfnDllFunc1(dwParam1, uParam2);

}

}

你可能感兴趣的:(dll)