HINTERNET g_hInet;
HINTERNET g_hURL;
//===========================================================================//
/*!
@brief WinInetライブラリ初期処理
@param[in] lpszURL 対象URL
@return 成否
*/
//===========================================================================//
BOOL
InitWinInet(LPCTSTR lpszURL)
{
// WinInetライブラリ開始
g_hInet = InternetOpen(
L"", INTERNET_OPEN_TYPE_PRECONFIG,
NULL, NULL, 0);
if (g_hInet == NULL) {
return FALSE;
}
// セッションオープン
g_hURL = InternetOpenUrl(g_hInet, lpszURL, NULL, 0, 0, 0);
if (g_hURL == NULL) {
return FALSE;
}
return TRUE;
}
//===========================================================================//
/*!
@brief WinInetライブラリ終了処理
@return 無し
*/
//===========================================================================//
void
TerminateWinInet()
{
// WinInet関連ハンドル開放
if (g_hURL) {
InternetCloseHandle(g_hURL);
}
if (g_hInet) {
InternetCloseHandle(g_hInet);
}
}
//===========================================================================//
/*!
@brief HTTPヘッダー情報取得
@param[in] lpszURL 対象URL
@param[out] lpOutBuffer HTTPヘッダー情報バッファ
@param[in/out] hMem メモリハンドル
@return 成否
*/
//===========================================================================//
BOOL WINAPI
NMAPI_GetHttpSource(LPCTSTR lpszURL, LPSTR& lpOutBuffer, HGLOBAL& hMem)
{
BOOL bRet = FALSE;
// WinInetライブラリ初期処理
if (! InitWinInet(lpszURL)) {
goto END;
}
// データ読み出し
// サイトによっては、文字コードに左右される可能性がある為、マルチバイト扱いとする
CHAR szBuf[128];
::ZeroMemory(szBuf, sizeof(szBuf));
DWORD dwRead;
int nTotal = 0;
while (TRUE) {
InternetReadFile(g_hURL, szBuf, (DWORD)sizeof(szBuf) - 1, &dwRead);
szBuf[dwRead] = '\0';
if (dwRead == 0) {
break;
}
nTotal += dwRead;
// メモリ再割り当て
hMem = GlobalReAlloc(hMem, (SIZE_T)nTotal+1, GMEM_MOVEABLE);
if (hMem == NULL) {
goto END;
}
lpOutBuffer = (CHAR *)GlobalLock(hMem);
if (lpOutBuffer == NULL) {
goto END;
}
strcat_s(lpOutBuffer, nTotal+1, szBuf);
}
bRet = TRUE;
END:
// WinInetライブラリ終了処理
TerminateWinInet();
return bRet;
}
//===========================================================================//
// 呼び出し側
//===========================================================================//
{
// メモリ割り当て
HGLOBAL hMem = GlobalAlloc(GHND, sizeof(TCHAR));
TCHAR* lpszHeader = (TCHAR*)GlobalLock(hMem);
if (NMAPI_GetHttpHeader(strURL, lpszHeader, hMem)) {
・・・
・・・
・・・
}
// メモリ開放
GlobalUnlock(hMem);
GlobalFree(hMem);
}
最終更新:2008年12月12日 12:59