加载dll有动态加载和静态加载之分:
动态加载:
typedef HANDLE (WINAPI *ADDPROCCreateAnaly)(void) ;
typedef HRESULT (WINAPI *ADDPROCHtmlAnalize)(HANDLE hAnaly, const char* urlcode) ;
typedef HRESULT (WINAPI *ADDPROCGetArtical)(HANDLE hAnaly, char* title, int *titlelen, char* content, int* contentlen) ;
typedef BOOL (WINAPI *ADDPROCCloseAnaly)(HANDLE hAnaly) ;
ADDPROCCreateAnaly CreateAnaly ;
ADDPROCHtmlAnalize HtmlAnalize ;
ADDPROCGetArtical GetArticalEx ;
ADDPROCCloseAnaly CloseAnaly ;
CStdString strWebExtractionPathName = strModulePathName + "WebExtraction.dll" ;
hInst = LoadLibrary (strWebExtractionPathName.c_str()) ;
if (NULL == hInst)
{
g_Log.GetLog()->WriteDBGLog(IMP_RECORD, "CWebPageAnalyze::GetArtical", strPreLog + "加载模块WebExtraction.dll失败");
return FALSE ;
}
// 获取WebExtraction.dll对外的四个接口函数的地址
CreateAnaly = (ADDPROCCreateAnaly)GetProcAddress (hInst, "CreateAnaly") ;
if (!CreateAnaly)
{
g_Log.GetLog()->WriteDBGLog(IMP_RECORD, "CWebPageAnalyze::GetArtical", strPreLog + "获取函数CreateAnaly地址失败");
return FALSE ;
}
HtmlAnalize = (ADDPROCHtmlAnalize)GetProcAddress (hInst, "HtmlAnalize") ;
if (!HtmlAnalize)
{
g_Log.GetLog()->WriteDBGLog(IMP_RECORD, "CWebPageAnalyze::GetArtical", strPreLog + "获取函数HtmlAnalize地址失败");
return FALSE ;
}
GetArticalEx = (ADDPROCGetArtical)GetProcAddress (hInst, "GetArtical") ;
if (!GetArticalEx)
{
g_Log.GetLog()->WriteDBGLog(IMP_RECORD, "CWebPageAnalyze::GetArtical", strPreLog + "获取函数GetArticalEx地址失败");
return FALSE ;
}
CloseAnaly = (ADDPROCCloseAnaly)GetProcAddress (hInst, "CloseAnaly") ;
if (!CloseAnaly)
{
g_Log.GetLog()->WriteDBGLog(IMP_RECORD, "CWebPageAnalyze::GetArtical", strPreLog + "获取函数CloseAnaly地址失败");
return FALSE ;
}
静态加载:
静态加载要使用到 导出库 .lib 文件。