Borland C++ Compiler 5.1.1を使ってwindowsプログラミングを
しているのですがメニューの表示ができません
参考にしているページ
http://wisdom.sakura.ne.jp/system/winapi/win32/w …
http://www.geocities.jp/ky_webid/win32c/028.html
ソースはまるまるコピーしているので
exeファイルの生成から実行、ウィンドウの表示までは問題ないです
brc32 xxx.rc xxx.exe
と指定してもexeファイルには変化が無く(tdumpで確認してもresource欄に変化なし)
.RESファイルが作成されるのみで
exeファイルを実行してもメニュー表示はありませんでした
続いて(先ほど生成されたファイルは一旦削除)
bcc32 -c -W xxx.c
brcc32 xxx.rc
ilink32 xxx.obj, , , , ,xxx.RES
としてみたところexeファイルに変化があり
その他ilc ild ilf ils map tdsといったファイルも同時に生成されました
ですが実行してみたところ「有効なwin32アプリケーションではありません」とのこと
参考にしているサイトどちらのソースも同じ状況になります・・・
分かる方指摘の方お願いします
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは。
#2です。プログラムの不具合の原因が中々掴めないような場合は、プログラムの動作が、
『何処まで正常か』 or 『何処で失敗しているか』
を見極める作業(デバッグ)が必要だと思います。
そのためには、実行時の特定データあるいは、関数の戻り値などをチェックし、
正常or異常を細かく見ていくしかないと思います。
手始めに、#2のプログラムで言えば、WinAPIのLoadMenu()、SetMenu()あたり
が怪しそうなので、これらの関数の戻り値がどうなっているかを見ることから始
めた方が良いかもしれません。
以下は、#2のプログラムに戻り値チェックを追加したサンプルです。
この辺りから検証してみて下さい。
■LoadMenu()、及び、SetMenu()の戻り値チェック挿入部分
注)下記サンプルでは、インデントに全角スペースを入れています。
使用する際は半角スペースorタブに置換して下さい。
=================================
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
static HMENU hMenu;
LPVOID lpMsgBuf = NULL; //※メッセージ用
BOOL bRes; //※戻り値用
switch( msg )
{
case WM_CREATE: //ウィンドウが作られたとき
//メニューリソースをロードする
hMenu = LoadMenu( NULL, _T("IDR_MENU") );
//※戻り値チェック
if(hMenu==NULL){
//エラーメッセージ表示
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL );
MessageBox( NULL, lpMsgBuf, _T("GetLastError: LoadMenu()"),
MB_OK | MB_ICONINFORMATION );
LocalFree( lpMsgBuf );
lpMsgBuf = NULL;
}
else{
//成功メッセージ表示
MessageBox( NULL, _T("LoadMenu()は成功しました。"),
_T("LoadMenu()"), MB_OK | MB_ICONINFORMATION );
}
//ウィンドウにメニューリソースを割り当てる
bRes = SetMenu( hWnd, hMenu );
//※戻り値チェック
if(bRes==FALSE){
//エラーメッセージ表示
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL );
MessageBox( NULL, lpMsgBuf, _T("GetLastError: SetMenu()"),
MB_OK | MB_ICONINFORMATION );
LocalFree( lpMsgBuf );
lpMsgBuf = NULL;
}
else{
//成功メッセージ表示
MessageBox( NULL, _T("SetMenu()は成功しました。"),
_T("SetMenu()"), MB_OK | MB_ICONINFORMATION );
}
return 0;
--以降変更なし--
:
=================================
No.2
- 回答日時:
こんにちは。
コンパイル時または、リソースファイルとの結合時、及びリンク時に何かしらの
エラー(または、warning)は出ていないでしょうか?
念のため、ご使用の環境での、bcc32.exe等のユーティリティへのパス設定、
及び、インクルードファイル&ライブラリファイルのパス設定が正しく設定され
ているかどうかを確認された方が良いかもしれません。
※もしも、BCC以外の開発環境(VC++、MinGW、Cygwin等)を共存させている
場合は、それらの環境設定の状態(参照パスの優先度、競合等)により、
ビルド作業時(実行ファイル生成)や、実行ファイルの実行時に問題が発生
する可能性があります。
当方の環境(BCC5.5.1)で、以下のソースファイル及び、バッチファイルを使用
してビルド作業を行ったところ、正常に実行ファイルが作成され、実行時も問題
なく動作し、メニュー表示等が行われました。
ですので、宜しければ質問者さんの環境でも、以下のファイルを使用して検証
してみて下さい。
■ソースファイル
1)リソーススクリプト
ファイル名: "Test1.rc"
========================================
#include "resource.h"
/*リソーススクリプト*/
IDR_MENU MENU {
POPUP "FILE(&F)" {
MENUITEM "開く(&O)" , ID_FILE
MENUITEM "終了(&X)" , ID_EXIT
}
POPUP "HELP(&H)" {
MENUITEM "ヘルプ表示(&P)" , ID_HELP
MENUITEM "バージョン情報(&V)" , ID_VERSION
}
}
========================================
2)リソース用ヘッダファイル
ファイル名: "resource.h"
========================================
#define ID_FILE 0
#define ID_EXIT 1
#define ID_HELP 2
#define ID_VERSION 3
========================================
3)メインプログラムソース
・ご提示の下記参考サイトのページの2番目(下の方)のソースを、そのまま
使用させて頂きました。
・ファイル名は、"Test1.c" とします。
◎Win32API(C言語)編 第28章 メニューバーを作る
http://www.geocities.jp/ky_webid/win32c/028.html
■実行ファイル作成用バッチファイル
・下記のバッチファイルを使用しビルドを行いました。
・上記のソースファイルと下記のバッチファイルは、全て同一フォルダに置いて
下さい。
・1)で上手くいかなかった場合は、2)の方で試してみて下さい。
注)リソーススクリプトのファイル名と、メインプログラムソースのファイル名は
拡張子を除いて同じにして下さい。
1)デフォルト設定を利用するバージョン
ファイル名: "make1.bat"
========================================
bcc32 -W -w-8057 %1.c
brc32 %1.rc %1.exe
========================================
<使用例>
**> make1 Test1 ←ソース名(拡張子なし)を指定
2)インクルード&ライブラリのパス等のオプション指定バージョン
・下記バッチファイルの『インクルードパス』、及び、『ライブラリパス』は、
ご使用の環境に合わせて変更して下さい。
ファイル名: "make2.bat"
===========================================================
bcc32 -IC:\borland\bcc55\Include -LC:\borland\bcc55\Lib -W -w- %1.c
brc32 -iC:\borland\bcc55\Include -x -32 -V4.0 %1.rc %1.exe
===========================================================
<使用例>
**> make2 Test1 ←ソース名(拡張子なし)を指定
以上です。
詳しい解説ありがとうございます
さっそく、書いていただいたソースとバッチファイルで実行してみたのですが
コンパイルは問題なくでき(warning等も表示はされず)、生成されたexeファイルも
実行はできるのですが、やはりメニューは表示されず・・・
あらためて環境変数やcfgファイルの中身を確認してみたものの不審な点も見当たらず・・・
もうすこし考えてみようと思います。
No.1
- 回答日時:
直接の回答ではありませんが、
BccWin + BccForm を活用されたらメニュー表示が簡単に作れますよ。
<準備>
BccWinをインストール
BccFormを解凍
BccWin起動
オプション - ツール設定 で BccForm を登録
<利用>
ファイル - 新規 - 新規プロジェクト - ウインドウズ型
新規プロジェクトを作成 にチェック
ファイル作成 - C言語ソースファイルに「form.c」- OK
ビルドボタン、実行ボタン で Hello のフォームが完成。
<画面の設計>
ツール - BCCForm でリソースエディタを起動する
リソースタイプの「ダイヤログ」の行をクリックすると、画面が出る。
四角を書くとボタンが出来る(デフォルト)
右クリックで「コントロールの追加」で追加する
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- UNIX・Linux bash のファイルの読み込み方についてご質問 3 2023/05/15 20:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- その他(パソコン・周辺機器) チャレンジタッチ3 改造 アプリインストールできない 1 2022/07/01 14:43
- その他(ソフトウェア) 一太郎付属の”全件検索”ツールの不具合 3 2023/07/25 15:03
- アプリ アプリケーションが見つかりません 2 2022/07/13 21:07
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで他のプロジェクトで作...
-
VisualBasicを保存するときにで...
-
ACCESSのEXEを作るのは可能...
-
srand48? drand48?
-
ソースから参照しているOCXの一...
-
他の.CPPファイルに定義した関...
-
コンパイルするときに、ファイ...
-
printfで全角カタカナが文字化け?
-
EXEをつくるとレジストリが...
-
VCでストップウォッチを作りた...
-
エラーの原因は?「この関数の...
-
stdio.hをオープンできない…
-
VB6.0
-
Visual Studio2008でヘッダファ...
-
VB6で、非表示モジュール(?)の...
-
VS2010 ProductVersion 変更
-
VC++ 2010でlog4cxxビルドできない
-
VC++ 他プロジェクトファイルの...
-
DLLのスタティックリンクは可能?
-
C言語初心者の質問失礼します。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで他のプロジェクトで作...
-
ACCESSのEXEを作るのは可能...
-
コンパイルするときに、ファイ...
-
エラーの原因は?「この関数の...
-
VB.NETでActiveX(OCXファイル)作成
-
ソースから参照しているOCXの一...
-
他の.CPPファイルに定義した関...
-
VC++でexeファイルが作成できま...
-
VB6で、非表示モジュール(?)の...
-
C#のクラスをVB.netで使用したい!
-
「マージする」とは?
-
Visual Studioでプロジェクトが...
-
Visual Stadio2008 Releaseビル...
-
VBソースを表示できない。
-
プリコンパイル?
-
libssh2のインクルード
-
VB6.0 オブジェクトを一覧で表示
-
VB6.0の別名保存について
-
VisualBasicを保存するときにで...
-
同じソースコードなのにバイナ...
おすすめ情報