none
実行中?のアプリが見えない。 RRS feed

  • 質問

  • VC++2008でインターネットアプリケーションを作ろうと思っているのですが、以下のようなエラーが出ます。いろいろ調べてみたところ一般にこのエラー(LNK1168)はファイル実行中にビルドをしようとすると出るらしいのですが、実行されているらしきアプリケーションが見当たらないのです。親ウィンドウすら出てきません。以下にエラーコードとそのソースをあげますのでどうか解決策の提供お願いします。

    1>c:\users\\documents\visual studio 2008\projects\html弁当箱\html弁当箱\1.7.cpp(210) : warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>マニフェストをリソースにコンパイルしています...
    1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1>Copyright (C) Microsoft Corporation.  All rights reserved.
    1>リンクしています...
    1>LINK : fatal error LNK1168: ファイル C:\Users\\Documents\Visual Studio 2008\Projects\html弁当箱\Debug\html弁当箱.exe を開いて書き込むことができません。
    1>ビルドログは "file://c:\Users\\Documents\Visual Studio 2008\Projects\html弁当箱\html弁当箱\Debug\BuildLog.htm" に保存されました。
    1>html弁当箱 - エラー 1、警告 2
    ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ

    #include <windows.h>
    #include <wininet.h>
    #include <windowsx.h>
    #include "bentou.h"
    #include <tchar.h>
    #pragma comment(linker, "/entry:\"WinMain\"")
    #pragma comment(lib, "wininet.lib")

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    BOOL CALLBACK MyUrlProc(HWND, UINT, WPARAM, LPARAM);
    ATOM InitApp(HINSTANCE);
    BOOL InitInstance(HINSTANCE, int);
    int MyConnect();
    BOOL AddCR(HWND, HGLOBAL, char *, char *);
    int WriteMyFile(HWND);

    char szClassName[] = "html";    //ウィンドウクラス
    char szFileName[256]; // オープンするファイル名(パス付き)
    char szFile[64]; // ファイル名
    char szUrl[256];
    char *lpszSrc;
    HWND g_hWnd;
    HGLOBAL hMem;
    HINSTANCE hInst;

    int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
                       LPSTR lpsCmdLine, int nCmdShow)
    {
        MSG msg;
        BOOL bRet;
       
        hInst = hCurInst;

        if (!InitApp(hCurInst))
            return FALSE;
        if (!InitInstance(hCurInst, nCmdShow))
            return FALSE;
        while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
            if (bRet == -1) {
                break;
            } else {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
        return (int)msg.wParam;
    }

    //ウィンドウ・クラスの登録

    ATOM InitApp(HINSTANCE hInst)
    {
        WNDCLASSEX wc;
        wc.cbSize = sizeof(WNDCLASSEX);
        wc.style = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc = WndProc;    //プロシージャ名
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInst;//インスタンス
        wc.hIcon = (HICON)LoadImage(NULL,
            MAKEINTRESOURCE(IDI_APPLICATION),
            IMAGE_ICON,
            0,
            0,
            LR_DEFAULTSIZE | LR_SHARED);
        wc.hCursor = (HCURSOR)LoadImage(NULL,
            MAKEINTRESOURCE(IDC_ARROW),
            IMAGE_CURSOR,
            0,
            0,
            LR_DEFAULTSIZE | LR_SHARED);
        wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wc.lpszMenuName = _T("URL");    //メニュー名
        wc.lpszClassName = (LPCSTR)szClassName;
        wc.hIconSm = (HICON)LoadImage(NULL,
            MAKEINTRESOURCE(IDI_APPLICATION),
            IMAGE_ICON,
            0,
            0,
            LR_DEFAULTSIZE | LR_SHARED);

        return (RegisterClassEx(&wc));
    }

    //ウィンドウの生成

    BOOL InitInstance(HINSTANCE hInst, int nCmdShow)
    {
        HWND hWnd;

        hWnd = CreateWindow(szClassName,
                "HTML読み出し", //タイトルバーにこの名前が表示されます
                WS_OVERLAPPEDWINDOW, //ウィンドウの種類
                CW_USEDEFAULT,    //X座標
                CW_USEDEFAULT,    //Y座標
                CW_USEDEFAULT,    //幅
                CW_USEDEFAULT,    //高さ
                NULL, //親ウィンドウのハンドル、親を作るときはNULL
                NULL, //メニューハンドル、クラスメニューを使うときはNULL
                hInst, //インスタンスハンドル
                NULL);
        if (!hWnd)
            return FALSE;
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
        g_hWnd = hWnd;
        return TRUE;
    }

    //ウィンドウプロシージャ

    LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
    {
        int id;
        RECT rc;
        PAINTSTRUCT ps;
        HDC hdc;

        switch (msg) {
            case WM_PAINT:
                hdc = BeginPaint(hWnd, &ps);
                GetClientRect(hWnd, &rc);
                DrawText(hdc, lpszSrc, -1, &rc, DT_WORDBREAK);
                EndPaint(hWnd, &ps);
                break;
            case WM_COMMAND:
                switch (LOWORD(wp)) {
                    case IDM_END:
                        SendMessage(hWnd, WM_CLOSE, 0, 0);
                        break;
                    case IDM_URL:
                        DialogBox(hInst,
                            "URL1",
                            hWnd,
                            (DLGPROC)MyUrlProc);
                            break;
                    case IDM_SAVE:
                        WriteMyFile(hWnd); 
                        break;
                }
                break;
            case WM_CLOSE:
                id = MessageBox(hWnd,
                    "終了してもよろしいですか",
                    "確認",
                    MB_YESNO | MB_ICONQUESTION);
                if (id == IDYES) {
                    if (hMem) {
                        GlobalUnlock(hMem);
                        if (GlobalFree(hMem) == NULL) {
                            MessageBox(hWnd, "メモリ解放成功", "成功", MB_OK);
                        } else {
                            MessageBox(hWnd, "メモリ解放失敗", "Error", MB_OK);
                        }
                    }
                    DestroyWindow(hWnd);
                }
                break;
            case WM_DESTROY:
                PostQuitMessage(0);
                break;
            default:
                return (DefWindowProc(hWnd, msg, wp, lp));
        }
        return 0;
    }

    int MyConnect()
    {
        HINTERNET hInet, hUrl;
        char szBuf[32];
        DWORD dwRead;

        hMem = GlobalAlloc(GHND, 1);
        lpszSrc = (char *)GlobalLock(hMem);
        if (lpszSrc == NULL) {
            MessageBox(g_hWnd, "Error", "Error", MB_OK);
            return -1;
        }
        int nTotal = 0;

        hInet = InternetOpen("nekodemo-wakaru", INTERNET_OPEN_TYPE_PRECONFIG,   
            NULL, NULL, 0);
        if (hInet == NULL) {
            MessageBox(g_hWnd, "オープンエラー", "Error", MB_OK);
            return -1;
        }
        hUrl = InternetOpenUrl(hInet, szUrl, NULL, 0, 0, 0);
        if (hUrl == NULL) {
            MessageBox(g_hWnd, "URLオープンエラー", "Error", MB_OK);
            InternetCloseHandle(hInet);
            return -2;
        }
        while (1) {
            InternetReadFile(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) {
                MessageBox(g_hWnd, "再アロケート失敗", "Error", MB_OK);
                break;
            }
            lpszSrc = (char *)GlobalLock(hMem);
            if (lpszSrc == NULL) {
                MessageBox(g_hWnd, "メモリ固定に失敗", "Error", MB_OK);
                break;
            }
            strcat(lpszSrc, szBuf);
           
        }
        InvalidateRect(g_hWnd, NULL, TRUE);
        InternetCloseHandle(hUrl);
        InternetCloseHandle(hInet);
        return 0;
    }

    BOOL CALLBACK MyUrlProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
    {
        switch (msg) {
            case WM_INITDIALOG:
                SetDlgItemText(hDlg, IDC_URL, szUrl);
                return TRUE;
            case WM_COMMAND:
                switch (LOWORD(wp)) {
                    case IDC_CONNECT:
                        GetDlgItemText(hDlg, IDC_URL, szUrl, (int)sizeof(szUrl));
                        EndDialog(hDlg, IDOK);
                        MyConnect();
                        return TRUE;
                    case ID_CANCEL:
                        EndDialog(hDlg, IDCANCEL);
                        return TRUE;
                }
                return FALSE;
        }
        return FALSE;
    }

    int WriteMyFile(HWND hWnd)
    {
     OPENFILENAME ofn;
     HANDLE hFile;
     DWORD dwAccBytes;
     char szTitle[64], *szTitle_org = "HTML[%s]";
     
       memset(&ofn, 0, sizeof(OPENFILENAME)); //まずすべて0で初期化。
       ofn.lStructSize = sizeof(OPENFILENAME);
       ofn.hwndOwner = hWnd;
       ofn.lpstrFilter = "text(*.txt)\0*.txt\0All files(*.*)\0*.*\0\0";
       ofn.lpstrFile = szFileName; //パス付ファイル名の格納変数のアドレス
       ofn.lpstrFileTitle = szFile;
       ofn.nFilterIndex = 1;
       ofn.nMaxFile = sizeof(szFileName);
       ofn.nMaxFileTitle = sizeof(szFile);
       ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
       ofn.lpstrDefExt = "txt"; ofn.lpstrTitle = "名前を付けて保存する";
      
       if(GetSaveFileName(&ofn) == 0) return -1;
      
       hFile = CreateFile(szFileName, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
       WriteFile(hFile, lpszSrc, strlen(lpszSrc) + 1, &dwAccBytes, NULL);
       wsprintf(szTitle, szTitle_org, szFile);
       SetWindowText(hWnd, szTitle);
       if(CloseHandle(hFile) == 0)
       MessageBox(hWnd, "Error CloseHandle", "Error", MB_OK);
       SendMessage(hWnd, EM_SETMODIFY, FALSE, 0);
       return 0;
       }
    2009年1月8日 2:51

回答

  •  hidemaru さんからの引用

    VC++2008でインターネットアプリケーションを作ろうと思っているのですが、以下のようなエラーが出ます。

    「インターネットアプリケーション」と言われても分からないと思います。

     

     hidemaru さんからの引用

    いろいろ調べてみたところ一般にこのエラー(LNK1168)はファイル実行中にビルドをしようとすると出るらしいのですが、実行されているらしきアプリケーションが見当たらないのです。

    確かに、アプリケーションが実行中であることでファイルが使用中になります。

    しかし、ファイルが使用中となる原因は「実行中であること」と同義ではありませんので、他にも原因があり得ます。

     

    アプリケーションが実行中かどうかは、タスクマネージャのプロセスタブで、そのファイル名が存在しているかで調べることができます。

    また、ここから強制終了させることもできます。

     

     hidemaru さんからの引用

    親ウィンドウすら出てきません。以下にエラーコードとそのソースをあげますのでどうか解決策の提供お願いします。

    プロセスが生き残っているかの確認方法と、その終了方法を上記で述べました。

    なぜ、ウィンドウが表示されないかまでは見ていません。

     

    ソースを読み解いて、何が起きているか分析をお願いしているのでしょうか?

    それはビルド&デバッグしないと分からないこともあります。

    本来、デバッグするのはそのアプリケーションを作っている hidemaru さんの仕事です。

    デバッグのやり方を学ぶ過程で分からない事柄についてはそれについて質問なり、入門書で勉強なりをお願いします。

    (Webサイトだけを見ていると、分からないことも多くあるかと思います)

     

     

    # ところで、エラーログの部分にお名前と取れる文字列が含まれていますが、問題ないのでしょうか…。

    2009年1月8日 13:59
    モデレータ
  • こんにちは。

     

    タスクマネージャなり、tlist なりで "html弁当箱.exe" プロセスを探して、kill すればよいと思います。

    (プロセスが実行中かどうか、ということと、ウィンドウが見える見えないということはあまりたいした関連性はありません)

     

    # コードは全然見てませんのでどこに問題があるかは考えてないです。。。すみません。

     

    お役に立てれば幸いです。

     

    ---------------------------------------

    だどさん http://keicode.com/

     

     

    2009年1月9日 2:04

すべての返信

  •  hidemaru さんからの引用

    VC++2008でインターネットアプリケーションを作ろうと思っているのですが、以下のようなエラーが出ます。

    「インターネットアプリケーション」と言われても分からないと思います。

     

     hidemaru さんからの引用

    いろいろ調べてみたところ一般にこのエラー(LNK1168)はファイル実行中にビルドをしようとすると出るらしいのですが、実行されているらしきアプリケーションが見当たらないのです。

    確かに、アプリケーションが実行中であることでファイルが使用中になります。

    しかし、ファイルが使用中となる原因は「実行中であること」と同義ではありませんので、他にも原因があり得ます。

     

    アプリケーションが実行中かどうかは、タスクマネージャのプロセスタブで、そのファイル名が存在しているかで調べることができます。

    また、ここから強制終了させることもできます。

     

     hidemaru さんからの引用

    親ウィンドウすら出てきません。以下にエラーコードとそのソースをあげますのでどうか解決策の提供お願いします。

    プロセスが生き残っているかの確認方法と、その終了方法を上記で述べました。

    なぜ、ウィンドウが表示されないかまでは見ていません。

     

    ソースを読み解いて、何が起きているか分析をお願いしているのでしょうか?

    それはビルド&デバッグしないと分からないこともあります。

    本来、デバッグするのはそのアプリケーションを作っている hidemaru さんの仕事です。

    デバッグのやり方を学ぶ過程で分からない事柄についてはそれについて質問なり、入門書で勉強なりをお願いします。

    (Webサイトだけを見ていると、分からないことも多くあるかと思います)

     

     

    # ところで、エラーログの部分にお名前と取れる文字列が含まれていますが、問題ないのでしょうか…。

    2009年1月8日 13:59
    モデレータ
  • こんにちは。

     

    タスクマネージャなり、tlist なりで "html弁当箱.exe" プロセスを探して、kill すればよいと思います。

    (プロセスが実行中かどうか、ということと、ウィンドウが見える見えないということはあまりたいした関連性はありません)

     

    # コードは全然見てませんのでどこに問題があるかは考えてないです。。。すみません。

     

    お役に立てれば幸いです。

     

    ---------------------------------------

    だどさん http://keicode.com/

     

     

    2009年1月9日 2:04
  • 返信ありがとうございます。何とか自力で解決できました。ご協力ありがとうございました。
    2009年1月13日 9:53
  • 返信ありがとうございます。何とか自力で解決できました。ご協力ありがとうございました。

    2009年1月13日 9:54
  • 個人的な意見なので強制力は有りませんが、

    せっかく質問したのですから、何処がどのように悪くてどのようにして直したのかを説明して締めくくってもらえると

    後からこのスレッドを見た人の参考になると思います。

    貴方の次に続く人のためにちょっとした努力をしておくと掲示板がより良くなると思います。

     

     

    2009年1月14日 1:35
  • こんにちは。中川俊輔です。

     

    皆様、回答ありがとうございます。

     

    hidemaruさん、はじめまして。フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、Azuleanさん、だどさんの回答へ回答済みチェックをつけさせていただきました。

     

    PATIOさんもおっしゃってますが、情報の共有のためにも、hidemaruさんの解決方法を教えてくださるとありがたいです。

     

    今後ともフォーラムをよろしくお願いします。

    それでは!

    2009年1月22日 10:31