宣言部分(コンストラクタなど一部略)
#include "wininet.h"
class C****1
{
protected:
// 文字列 (メモリ管理)
static WCHAR* MemoryWCharStr(int nLength) ;
static WCHAR* MemoryWideCharFromMultiChar(const char* lpszMultiByteStr ,
UINT uCodePage = CP_ACP
) ;
// 基本関数 (共通処理)
static HINTERNET InternetOpen(DWORD dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG
) ;
};
関数の中身は以下の感じ。
#pragma comment(lib,"wininet.lib")
/////////////////////////////////////////////////////////////////////
// 基本関数 (共通処理)
/////////////////////////////////////////////////////////////////////
// 1. (静的関数) (protected) インターネット使用開始 (Win32初期化) //
HINTERNET C*1::InternetOpen(DWORD dwAccessType)
{/*************************************************
HINTERNET InternetOpen(
IN LPCSTR lpszAgent,
IN DWORD dwAccessType,
IN LPCSTR lpszProxyName,
IN LPCSTR lpszProxyBypass,
IN DWORD dwFlags
);
Initializes an application's use of the Win32 Internet functions.
*************************************************/
return ::InternetOpen(
_T("class name") ,
dwAccessType , // INTERNET_OPEN_TYPE_PRECONFIG
NULL ,
NULL ,
0
) ;
}
/////////////////////////////////////////////////////////////////////
// 文字列 (メモリ管理)
/////////////////////////////////////////////////////////////////////
// 1-(1). (静的関数) (protected) WCHAR [] のメモリ確保 //
WCHAR* C*1::MemoryWCharStr(int nLength)
{
// 1. メモリ確保 //
WCHAR* pText = new WCHAR [nLength] ;
// 2. 初期化 //
::memset(pText , 0 , sizeof(WCHAR) * nLength) ;
return pText ;
}
// 1-(2). (静的関数) マルチバイト文字列 (char*) を// ワイド文字列 (UNICODE) に変換してメモリ確保 //
// ※ UINT uCodePage = CP_ACP ; // または CP_THREAD_ACP
WCHAR* C*1::MemoryWideCharFromMultiChar(const char* lpszMultiByteStr ,
UINT uCodePage)
{
/**************************************************
MultiByteToWideChar() : マルチバイト文字列をワイド文字列に変換
------------------------------------------------------------------------
int MultiByteToWideChar(
UINT CodePage, // コードページ
DWORD dwFlags, // 文字の種類を指定するフラグ
LPCSTR lpMultiByteStr, // マップ元文字列のアドレス
int cchMultiByte, // マップ元文字列のバイト数
LPWSTR lpWideCharStr, // マップ先ワイド文字列を入れる
//バッファのアドレス
int cchWideChar // バッファのサイズ
);
**************************************************/
// (UINT)uCodePage = CP_ACP または CP_THREAD_ACP
DWORD dwFlags = MB_PRECOMPOSED ;
// 1. 必要なサイズを計算して取得 //
int retSize = ::MultiByteToWideChar(
uCodePage ,
dwFlags ,
lpszMultiByteStr ,
-1 ,
NULL , // lpMultiByteStr が指すバッファは使われません
0 // 0 を指定するとバッファに必要なバイト数が返ります
);
// 2. メモリ確保 //
WCHAR* pWCharMemory = MemoryWCharStr(retSize + 1) ;
// 3. 変換 //
int ret = ::MultiByteToWideChar(
uCodePage ,
dwFlags ,
lpszMultiByteStr ,
-1 ,
pWCharMemory ,
retSize
);
return pWCharMemory;
}
// (1). インターネット開始 //
// (ハンドルを取得)HINTERNET hInternet = C*1::InternetOpen() ;
if (hInternet == NULL) return 0 ;// (2). 読み取りなどの処理 //....
// (3). 終了処理 //
::InternetCloseHandle(hInternet) ;
// (1). 変換 (メモリ確保) //
WCHAR* pszWBuffer = C*1::MemoryWideCharFromMultiChar(
"..." , // const char* lpszMultiByteStr
CP_ACP // UINT uCodePage
) ;
// (2). 処理 //....
// (3). メモリ解放 //
delete [] pszWBuffer ;
公式HP
http://yoyontek-develop.minim.ne.jp/num-place-memo/
**************************************************************


