您正在创建一个程序,以便从VC ++ 2012中的指定URL下载文件。 部分要作为DLL下载,我们从主程序调用。 在这种情况下,当您运行GetHttpConnection()方法时,会发生访问冲突。 我们检查了各种,但不知道。 请借你的智慧。
MAIN.EXE
:
:
:
hModule = LoadLibraryW(currentDirectory);
DLL_GetHttp = (FUNC_DLL_GetHttp)GetProcAddress(hModule, "GetHttp");
:
:
:
CHttpConnection* pConnection = NULL;
CInternetSession session;
CHttpFile* pFile = NULL;
BYTE* pRecvBuf;
ULONG pnRecvSize;
ULONG lRet;
lRet = DLL_GetHttp(&pConnection, &session, &pFile, downloadFile, NULL, 0, &pRecvBuf, &pnRecvSize);
:
:
http.dll
ULONG GetHttp(CHttpConnection** pConnection, CInternetSession* session, CHttpFile** pFile, LPCTSTR url, BYTE* pSendBuf, ULONG nSendSize, BYTE** pRecvBuf, ULONG* pnRecvSize)
{
*pRecvBuf = NULL;
*pnRecvSize = 0;
LONG nRet = 0;
DWORD dwServiceType;
CString strServer;
CString strObject;
INTERNET_PORT nPort;
CString strConnectUrl;
strConnectUrl = url;
AFX_MANAGE_STATE( AfxGetStaticModuleState() );
if (!AfxParseURL(url, dwServiceType, strServer, strObject, nPort))
{
// ASSERT(0);
return ERROR_PARAMETOR;
}
try
{
(*pConnection) = (*session).GetHttpConnection( // access error!!!!
strServer,
INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE ,
nPort,
NULL,
NULL
);
DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE;
BOOL bSecure = strConnectUrl.MakeLower().Find(_T("https")) == 0;
if (bSecure)
{
dwFlags |= INTERNET_FLAG_SECURE;
}
*pFile = (*pConnection)->OpenRequest(
CHttpConnection::HTTP_VERB_POST,
strObject,
NULL,
1,
NULL,
_T("HTTP/1.1"),
dwFlags
);
:
:
: