BCC5.5とBCCFormを使用し、実行ファイルを作成したが、実行できません。
当方、只今C言語でWin32APIを呼び出し、Windowsアプリを開発中です。
そこで質問なのですが、以下の手順で作業した場合、抽出される実行ファイルが実行できません。
どなたかお分かりになる方、助言の方よろしくお願いします。
1.名前、住所をリッチテキストに入力し、OKボタンを押下後、メッセージボックス にて”○○さんの住所は○○です”と表示されるソースコードを"bcc32 -W source.cpp"でコンパイル。
2.BCCFormで作成したリソースファイルを"brc32 dialog.rc source.exe"で結合。
3.source.exeを実行するが、動作しない。
ちなみに環境はWindowsXPSP3です。
下記にまず、ソースコードを表示します。
/* ソース */
/* ファイル名 source.cpp */
#if 1
/* ダイアログボックスを出す */
#include <windows.h>
#include "Resdialog.h"
BOOL CALLBACK MyDlgProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(
HINSTANCE hCurInst,
HINSTANCE hPrevInst,
LPSTR lpsCmdLine,
int nCmdShow)
{
DialogBox(hCurInst, "MYDLG", NULL, (DLGPROC)MyDlgProc);
return 0;
}
BOOL CALLBACK MyDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
char szBuf[128], szBuf1[64], szBuf2[64];
switch(msg){
case WM_COMMAND:
switch (LOWORD(wp)){
case IDCANCEL:
EndDialog(hDlg, IDCANCEL);
return TRUE;
case IDOK:
GetDlgItemText(hDlg, IDC_RICHEDIT102, szBuf1, (int)sizeof(szBuf1));
GetDlgItemText(hDlg, IDC_RICHEDIT103, szBuf2, (int)sizeof(szBuf2));
wsprintf(szBuf, "あなたの住所は%sで、氏名は%sです", szBuf1, szBuf2);
MessageBox(hDlg, szBuf, "ダイアログボックス", MB_OK);
return TRUE;
}
return FALSE;
}
return FALSE;
}
#endif
そして、リソーススクリプトです。
/* リソーススクリプト */
/* ファイル名 dialog.rc */
//-----------------------------------------
// BCCForm Ver 2.41
// An Easy Resource Editor for BCC
// Copyright (c) February 2002 by ysama
//-----------------------------------------
#include "Resdialog.h"
//----------------------------------
// ダイアログ (MYDLG)
//----------------------------------
MYDLG DIALOG DISCARDABLE 0, 0, 270, 117
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT
CAPTION "Form"
FONT 8, "MS 明朝"
{
CONTROL "名前", IDC_LABEL100, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 10, 10, 46, 18
CONTROL "住所", IDC_LABEL101, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 10, 41, 47, 17
CONTROL "", IDC_RICHEDIT102, "RICHEDIT", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_WANTRETURN | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 88, 8, 159, 25
CONTROL "", IDC_RICHEDIT103, "RICHEDIT", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_WANTRETURN | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 88, 40, 160, 24
CONTROL "OK", IDOK, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 49, 85, 61, 18
CONTROL "Cancell", IDCANCELL, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 165, 84, 56, 18
}
そして、リソースヘッダです。
/* リソースヘッダ */
/* ファイル名Resdialog.h */
//-----------------------------------------
// BCCForm Ver 2.41
// Header File for Resource Script File
// Copyright (c) February 2002 by ysama
//-----------------------------------------
//---------------------
// ダイアログリソース
//---------------------
// ダイアログ MYDLG
#define IDC_LABEL100 100
#define IDC_LABEL101 101
#define IDC_RICHEDIT102 102
#define IDC_RICHEDIT103 103
#define IDCANCELL 105
//---------------------
// メニューリソース
//---------------------
//---------------------
// イメージリソース
//---------------------
//---------------------
// ストリングテーブル
//---------------------
//--------------------
// アクセラレーター
//--------------------
//------------------
// ヴァージョン情報
//------------------
上記のようになってます。
どうかご教授の方、宜しくお願いします。
お礼
回答ありがとうございます。 ほとんどが何処かのサイトから参考にして書いたのですが、 確かにHDCにキャストしてあるのにおかしいですね。 リビルドすればうまく行きました。 > (あまりにもコントロールの数が多い場合はダイアログ毎にプロシージャを用意します) プロシージャを分ける場合はファイルも別にするのが普通なんですか? 別にしないと結局コードが長くて見ずらいですよね?