#include "DownWrapper.h" namespace DownEngine { CDownWrapper::CDownWrapper(LPCWSTR sPath) { m_hModule = LoadLibraryW(sPath); if (m_hModule == NULL) { throw L"can not load xldl.dll"; } WCHAR szModulePath[MAX_PATH] = { 0 }; GetModuleFileNameW(NULL, szModulePath, MAX_PATH); PathRemoveFileSpecW(szModulePath); // 拆分路径 新版使用PathCchRemoveFileSpec WCHAR szDllpath[MAX_PATH] = { 0 }; PathCombineW(szDllpath, szModulePath, L"xldl.dll"); // 连接路径, 新版建议使用 PathCchCombine m_Init = (fn_Init) GetProcAddress(m_hModule, "XL_Init"); m_UnInit = (fn_UnInit) GetProcAddress(m_hModule, "XL_UnInit"); m_TaskCreate = (fn_TaskCreate) GetProcAddress(m_hModule, "XL_CreateTask"); m_TaskDelete = (fn_TaskDelete) GetProcAddress(m_hModule, "XL_DeleteTask"); m_TaskStart = (fn_TaskStart) GetProcAddress(m_hModule, "XL_StartTask"); m_TaskStop = (fn_TaskStop) GetProcAddress(m_hModule, "XL_StopTask"); m_ForceStopTask = (fn_ForceStopTask) GetProcAddress(m_hModule, "XL_ForceStopTask"); m_QueryTaskInfo = (fn_QueryTaskInfo) GetProcAddress(m_hModule, "XL_QueryTaskInfo"); m_QueryTaskInfoEx = (fn_QueryTaskInfoEx) GetProcAddress(m_hModule, "XL_QueryTaskInfoEx"); m_DelTempFile = (fn_DelTempFile) GetProcAddress(m_hModule, "XL_DelTempFile"); m_SetSpeedLimit = (fn_SetSpeedLimit) GetProcAddress(m_hModule, "XL_SetSpeedLimit"); m_SetUploadSpeedLimit = (fn_SetUploadSpeedLimit) GetProcAddress(m_hModule, "XL_SetUploadSpeedLimit"); m_SetProxy = (fn_SetProxy) GetProcAddress(m_hModule, "XL_SetProxy"); m_SetUserAgent = (fn_SetUserAgent) GetProcAddress(m_hModule, "XL_SetUserAgent"); m_ParseThunderPrivateUrl = (fn_ParseThunderPrivateUrl) GetProcAddress(m_hModule, "XL_ParseThunderPrivateUrl"); m_GetFileSizeWithUrl = (fn_GetFileSizeWithUrl) GetProcAddress(m_hModule, "XL_GetFileSizeWithUrl"); m_SetFileIdAndSize = (fn_SetFileIdAndSize) GetProcAddress(m_hModule, "XL_SetFileIdAndSize"); m_SetAdditionInfo = (fn_SetAdditionInfo) GetProcAddress(m_hModule, "XL_SetAdditionInfo"); m_CreateTaskByURL = (fn_CreateTaskByURL) GetProcAddress(m_hModule, "XL_CreateTaskByURL"); m_CreateTaskByThunder = (fn_CreateTaskByThunder) GetProcAddress(m_hModule, "XL_CreateTaskByThunder"); m_CreateBTTaskByThunder = (fn_CreateBTTaskByThunder) GetProcAddress(m_hModule, "XL_CreateBTTaskByThunder"); } CDownWrapper::~CDownWrapper() { if (m_hModule) { FreeLibrary(m_hModule); } } HANDLE CDownWrapper::TaskCreate(DownTaskParam ¶m) { CHECKFUNC(m_TaskCreate, NULL); return m_TaskCreate(param); } BOOL CDownWrapper::TaskDelete(HANDLE hTask) { CHECKFUNC(m_TaskDelete, FALSE); return m_TaskDelete(hTask); } BOOL CDownWrapper::TaskStart(HANDLE hTask) { CHECKFUNC(m_TaskStart, FALSE); return m_TaskStart(hTask); } BOOL CDownWrapper::TaskStop(HANDLE hTask) { CHECKFUNC(m_TaskStop, FALSE); return m_TaskStop(hTask); } BOOL CDownWrapper::TaskForceStop(HANDLE hTask) { CHECKFUNC(m_ForceStopTask, FALSE); return m_ForceStopTask(hTask); } BOOL CDownWrapper::TaskQueryInfo(HANDLE hTask, DownTaskInfo & stTaskInfo) { CHECKFUNC(m_QueryTaskInfo, FALSE); return m_QueryTaskInfo(hTask, stTaskInfo); } BOOL CDownWrapper::TaskQueryInfoEx(HANDLE hTask, DownTaskInfo & stTaskInfo) { CHECKFUNC(m_QueryTaskInfoEx, FALSE); return m_QueryTaskInfoEx(hTask, stTaskInfo); } BOOL CDownWrapper::DelTempFile(DownTaskParam &stParam) { CHECKFUNC(m_DelTempFile, FALSE); return m_DelTempFile(stParam); } void CDownWrapper::SetSpeedLimit(INT32 nBps) { CHECKFUNC_(m_SetSpeedLimit); m_SetSpeedLimit(nBps); } void CDownWrapper::SetUploadSpeedLimit(INT32 nTcpBps, INT32 nOtherBps) { CHECKFUNC_(m_SetUploadSpeedLimit); m_SetUploadSpeedLimit(nTcpBps, nOtherBps); } BOOL CDownWrapper::SetProxy(DOWN_PROXY_INFO &stProxyInfo) { CHECKFUNC(m_SetProxy, FALSE); return m_SetProxy(stProxyInfo); } void CDownWrapper::SetUserAgent(const wchar_t *pszUserAgent) { CHECKFUNC_(m_SetUserAgent); m_SetUserAgent(pszUserAgent); } BOOL CDownWrapper::ParseThunderPrivateUrl(const wchar_t *pszThunderUrl, wchar_t *normalUrlBuffer, INT32 bufferLen) { CHECKFUNC(m_ParseThunderPrivateUrl, FALSE); return m_ParseThunderPrivateUrl(pszThunderUrl, normalUrlBuffer, bufferLen); } BOOL CDownWrapper::GetFileSizeWithUrl(const wchar_t * lpURL, INT64& iFileSize) { CHECKFUNC(m_GetFileSizeWithUrl, FALSE); return m_GetFileSizeWithUrl(lpURL, iFileSize); } BOOL CDownWrapper::SetFileIdAndSize(HANDLE hTask, char szFileId[40], unsigned __int64 nFileSize) { CHECKFUNC(m_SetFileIdAndSize, FALSE); return m_SetFileIdAndSize(hTask, szFileId, nFileSize); } BOOL CDownWrapper::SetAdditionInfo(HANDLE task_id, WSAPROTOCOL_INFOW *sock_info, CHAR *http_resp_buf, LONG buf_len) { CHECKFUNC(m_SetAdditionInfo, FALSE); return m_SetAdditionInfo(task_id, sock_info, http_resp_buf, buf_len); } HANDLE CDownWrapper::CreateTaskByURL(const wchar_t *url, const wchar_t *path, const wchar_t *fileName, BOOL IsResume) { CHECKFUNC(m_CreateTaskByURL, FALSE); return m_CreateTaskByURL(url, path, fileName, IsResume); } LONG CDownWrapper::CreateTaskByThunder(wchar_t *pszUrl, wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie) { CHECKFUNC(m_CreateTaskByThunder, FALSE); return m_CreateTaskByThunder(pszUrl, pszFileName, pszReferUrl, pszCharSet, pszCookie); } LONG CDownWrapper::CreateBTTaskByThunder(const wchar_t *pszPath) { CHECKFUNC(m_CreateBTTaskByThunder, FALSE); return m_CreateBTTaskByThunder(pszPath); } DownTaskParam CDownWrapper::CreateDownTaskParam(const wchar_t TaskUrl[], const wchar_t Filename[], const wchar_t SavePath[], BOOL IsResume, BOOL IsOnlyOriginal, BOOL DisableAutoRename) { DownTaskParam TaskParam; TaskParam.DisableAutoRename = FALSE; StrCpyW(TaskParam.szTaskUrl, TaskUrl); StrCpyW(TaskParam.szFilename, Filename); StrCpyW(TaskParam.szSavePath, SavePath); return TaskParam; } };