相比于静态加载lib库,动态加载DLL更具有灵活性,而且不需要知道头文件。一般来说,动态加载DLL有以下几个步骤:
第一,根据DLL的函数,定义对应的函数指针。比如
1 // Define function pointers. 2 typedef LPSTR (*PU2A)(LPCWSTR wStr, int iCodePage); 3 typedef LPCWSTR (*PA2U)(LPCSTR aStr, int iCodePage);
第二,加载DLL,并返回HMODULE。如下:
1 HMODULE hModule = ::LoadLibrary(_T("HbUtils.dll")); 2 if( NULL == hModule ) nRetCode = -1;
第三,获取函数的起始地址:
1 PU2A u2a = (PU2A)::GetProcAddress(hModule, "U2A"); 2 if( NULL == u2a ) nRetCode = -2;
最后,我们就可以调用DLL的函数了。
LPSTR aStr2 = u2a(_T("大家好!"), 936);