▼Windows Mobileプログラミングメモ▼
HTTP通信


HTTP通信を行うプログラムを作成する。

エミュレータで通信を行うには、 エミュレータのメニュー「ファイル→構成」の「ネットワーク」で「NE2000 PCMCIA ネットワークアダプタを有効にし、次の項目にバインドする」をチェック。


プロジェクトの設定
  1. ソリューションエクスプローラのプロジェクト名を右クリックし、ポップアップ「プロパティ」を選択。
  2. ツリー「構成プロパティ→リンカ→入力」を選択し、追加の依存ファイルに「aygshell.lib」を追加。
  3. さらに「wininet.lib」も追加。
リソースの準備
  1. ソリューションエクスプローラのリソースファイルを右クリックし、ポップアップ「追加→リソース」を選択。
  2. Dialogをダブルクリックし、ダイアログ(IDD_DIALOG1)を生成。
  3. OKボタン(IDOK)のIDを"IDC_READ"、Captionを"読み込み"に変更。
  4. キャンセルボタン(IDCANCEL)を削除。
  5. ツールボックスの「Edit Control(IDC_EDIT1)」をドラッグ&ドロップでダイアログに配置。

    ソースコードの作成
  1. ソリューションエクスプローラのソースファイルを右クリックし、ポップアップ「追加→クラス」を選択。
  2. main.cppという名前でファイル保存。
  3. ソースコードを以下のように編集。
    main.cpp
    #include <windows.h>
    #include <wininet.h>
    #include <aygshell.h>
    #include "resource.h"
    
    //関数の宣言
    BOOL DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
    BOOL loadText(TCHAR* url,char* out_text,DWORD* out_size);
    
    //メイン
    int WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
        LPWSTR lpCmdLine,int nShowCmd) {
        //ダイアログの生成
        DialogBoxW(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgProc);
        return 0;
    }
    
    //ダイアログのイベント処理
    BOOL DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) {
        char str[1024]={0};
        TCHAR strw[1024]={0};
        DWORD size=1024;
    
        switch(uMsg) {
        //初期化
        case WM_INITDIALOG:{
            //フルスクリーン
            SHINITDLGINFO sidi={
                SHIDIM_FLAGS,hDlg,
                SHIDIF_DONEBUTTON|SHIDIF_SIZEDLGFULLSCREEN|SHIDIF_EMPTYMENU};
            SHInitDialog(&sidi);
            }
            break;
        //コマンド
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
            //読み込みボタン
            case IDC_READ:
                //読み込み
                if (loadText(_T("http://www.saturn.dti.ne.jp/~npaka/flash/test.txt"),str,&size)) {
                    //char→TCHAR変換
                    MultiByteToWideChar(CP_UTF8,0,str,size,strw,1024-1);
    
                    //テキストの指定
                    SetDlgItemText(hDlg,IDC_EDIT1,strw);
                } else {
                    MessageBoxW(NULL,_T("エラーです。"),_T(""),0);
                }
                break;
            //OKボタン
            case IDOK:
                EndDialog(hDlg,LOWORD(wParam));
                break;
            }
            break;
        //クローズ
        case WM_CLOSE:
            DestroyWindow(hDlg);
            break;
        }
        return FALSE;
    }
    
    //テキストの読み込み
    BOOL loadText(TCHAR* url,char* out_text,DWORD* out_size) {
        //Internetハンドルの生成
        HINTERNET hSession=InternetOpenW(_T("GetHTTPApp"),
            INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
    
        //読み込み
        if(hSession) {
            HINTERNET hService=InternetOpenUrlW(hSession,url,NULL,0,0,0);
            if (hService) InternetReadFile(hService,out_text,1024,out_size);
            InternetCloseHandle(hService);
        }
    
        //Internetハンドルの解放
        InternetCloseHandle(hSession);
        return TRUE;
    }
    



−戻る−