自分は「Borland C++ Compiler 」と「BCC Developer」を使用してCプログラミングを楽しんでいる者です。ビットマップの表示で分からない事があったので、質問させて頂きます。
クライアント領域に表示するビットマップ画像を、リソースから読み込んで表示させようと思ったのですが、
//リソース
//BITMAP
MYBITMAP01 BITMAP "gazou01.bmp"
と
//ソース
hBmp01 = (HBITMAP)LoadImage(hInst, "MYBITMAP01", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
の様にして読み込ませてみると、確かに正しく表示されるのですが、読み込むビットマップの数が三つ四つと多くなると、ビルドしている最中に「問題が発生したため、Turbo Incremental Linker を終了します。ご不便をおかけして申し訳ありません。」という、「エラー報告を送信する、送信しない」のウインドウが出てきてしまいます。
BCC Developerの下の欄には「** error 1 ** deleting Debug\Master.exe」という文字が出力されていますが、どういった意味なのかは分かりません。
「現在のプロジェクト構成」という所をReleaseに変えてみたりしたのですが駄目でした。ビルドに失敗すると「TMP1.$$$」というおかしなファイルが作られています。
BCC Developerで、解決の方法や他の多くのビットマップを読み込ませる方法をご存知の方おられたら、回答を宜しくお願いします。
No.3ベストアンサー
- 回答日時:
回答にちょっと間が空いてしまいました。
まだ見てるかな?久しぶりに自分のPCにBCCやBilderをインストールして試してみようと思ってたのですが、なかなか時間が取れないので、思いついた事だけ書いておきます。
リンカの制限は単にRESファイルのサイズの問題ではないみたいですね。本当に単純にビットマップリソースの個数が問題なのかも。今のところ考えうる対策としては
1.ビットマップ画像は外部ファイルにする。ただしユーザーから隠すために普通のDIBフォーマットではなく独自のフォーマットにする。DIBセクションを使えばそんなに難しくはない
2.リンカが扱える枚数に分割してDLLに分けて格納する。LoadLibraryで実行時にリンクして読み込む
3.ビットマップ画像を繋げて1枚にして、ひとつのビットマップリソースとして扱う。(実行時にメモリ食いそうだけど・・・)
4.Bilder6などの新しいバージョンのリンカで試してみる
5.がんばってVisualC++版に移植して試してみる
こんなところでしょうか?
誰かiLink32の制限について既に詳しい人がいれば一番いいんだけど。。。
二度目の回答有難う御座います。
VC++無償版をその後使っていき、何とかリソースを読み込ませる事が出来ました。BCCで作ったソースコードも手を加えて少しづつですがビルドしています。なんとか最後までいけそうです。
ある程度慣れてくると、やはりVC++の方がずっと使い易いですね。
お礼は、同じ疑問を持っている人がいたと仮定して、もう少し回答を待ち、それでもなければポイントを付加させて頂きます。
No.2
- 回答日時:
エラーメッセージからすると、プログラムの問題ではなくリンカの不具合などで処理を続けられなくなっている感じですね。
ボーランドの別のリンカで、リンク中にメモリ不足になって似た感じのエラーが出た事があります。
私は昔、LoadBitmapで20個程度の小さなビットマップをリソースから読み込みましたが、何も問題は起こりませんでした。
ビットマップのサイズが大きすぎてiLinkが扱えるリソースのサイズを超えてしまったという事は考えられないでしょうか?
プログラム内でLoadImageを呼ばなくてもリソーススクリプトにビットマップを追加するだけでリンクエラーになるなら、その可能性が高いと思います。
対策としては
・巨大なビットマップはリソースではなく外部の.bmpファイルから読み込むようにする
・Microsoftのフリーのコンパイラ(VisualStudio 2005 Express Edition と Platform SDK)に変えてみる
といった感じでしょうか?
的外れだったらゴメンナサイ。
ちなみに「** error 1 ** deleting Debug\Master.exe」というメッセージは、「リンクに失敗したのでexeファイルは削除しました」程度の意味なのであまり気にしなくても良いと思います。
回答有難う御座います。
読み込もうとしている画像は440×315ピクセルの画像です。全部で22個、合わせると19MB位ですが、確かにLoadBitmapを使わずただウインドウを作るだけのプログラムに、リソースを付けてビットマップを読み込ませてみても止まってしまいます。
しかし、読み込ませる事が出来なかった画像より、容量のある別の画像は読み込めたりもします。試しに画像を小さくして容量を下げてみると読み込む事が出来ました。しかし、サイズが変わってしまうと困るので出来るだけ元画像サイズの方が好ましいと思っています。(いざとなれば画像を拡大して表示させますが)WAVEやICONは問題なく読み込めます。
>・巨大なビットマップはリソースではなく外部の.bmpファイルから読み込むようにする
・Microsoftのフリーのコンパイラ(VisualStudio 2005 Express Edition と Platform SDK)に変えてみる
元々画像を直接読み込んでいました。しかし、作っているのがゲームなので、初めから画像がプレイヤーに分かってしまうと駄目だろうと思い、リソースからと考えたので、出来ればリソースからと考えています。
VisualStudio 2005 Express Editionは、リソース作成機能もこれ自体には付いていませんし、自分のプログラムはこちらでビルドした物だと、実行してボタンを押したりすると「Run-Time Check Failure #3 - The variable 'Co' is being used without being defined.」と書かれたウインドウが出て、強制終了してしまい、自分が読んでいる「猫でも・・・」の本に書かれているソースなどは文字化けしてしまい、相性が悪い様です。使い慣れているBCCの方で何とかと思っています。
No.1
- 回答日時:
★気になった点を1つ。
>hBmp01 = (HBITMAP)LoadImage(hInst, "MYBITMAP01", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
↑
リソースにある『MYBITMAP01』は ID の記号定数ですか?それとも ID 文字列ですか?
もし、resource.h で定義している記号定数ならダブルクォーテーション文字はつけません。
つまり、
hBmp01 = (HBITMAP)LoadImage( hInst, MAKEINTRESOURCE(MYBITMAP01), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR );
hBmp02 = (HBITMAP)LoadImage( hInst, MAKEINTRESOURCE(MYBITMAP02), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR );
hBmp03 = (HBITMAP)LoadImage( hInst, MAKEINTRESOURCE(MYBITMAP03), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR );
となります。
・また、文字列の場合ならばリソースの方にダブルクォーテーション文字を付けます。
つまり、
"MYBITMAP01" BITMAP "gazou01.bmp"
"MYBITMAP02" BITMAP "gazou02.bmp"
"MYBITMAP03" BITMAP "gazou03.bmp"
となります。
・よって ID に記号定数か、文字列かで指定が異なります。
どちらかに統一して下さい。
あと MAKEINTRESOURCE() マクロ関数で記号定数の ID を文字列化にできます。
まずは確認と MAKEINTRESOURCE() マクロ関数を使ってみて下さい。
・以上。
回答有難う御座います。
.hの拡張子は確かヘッダファイルという物だと思いますが、それは使っていません。使ってもみましたが、結果は同じでした。(MAKEINTRESOURCEも使用)
ですからリソースの方に""、もやってみましたがエラーとなり駄目でした。(Error Master.rc 8 1: Expecting resource name or resource type name)
折角回答して頂きましたが、いい返信を出来ず申し訳ありません。
書くのを忘れましたが、環境は
Windows XP
メモリ 512+256M
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS htmlについて質問です コードを打ったあと画像が表示されないので調べる svg ファイルが写真のよ 1 2023/07/11 10:53
- WordPress(ワードプレス) WordpressでYouTubeの埋め込みができない。 1 2022/10/26 01:08
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- JavaScript 読み込んだQRコードをフォームに受け渡したい 1 2023/05/18 11:18
- HTML・CSS Dreamweaver のテンプレートでの相対パスの設定について 2 2023/06/13 17:28
- Chrome(クローム) 急募 Chromeの不調 1 2023/02/20 20:06
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
- その他(Microsoft Office) OneDrive Personalについて 1 2022/08/02 18:25
- アプリ MacBookでCLIP STUDIO PAINTから「写真」アプリを開いて、画像を読み込みたい 1 2023/08/05 12:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PowerShellを使って関連付けら...
-
Excelのエラー
-
gccを行ってもexeファイルが生...
-
アクセスのクエリでコンパイル...
-
batファイルでレジストリキーの...
-
EXCELのVBAでWORDが開いてある...
-
「パス名が無効です」の発生原因
-
VBから参照できないCのDLLを使...
-
ASPからACCESSのOPENどうしても...
-
すでにファイルが開かれている...
-
VB6 Dir関数で52エラー発生
-
DisplayAlertsブロパティで ”実...
-
排他ロックが掛かっているファ...
-
VBでファイルが開かれているか...
-
Returnに対するGoSubがありません
-
access テキストボックスの値取得
-
Excelファイルのマクロによる排...
-
エクセル VBA dll 読み込...
-
VBAのChangeFileOpenDirectory...
-
ACCESS VBAでのインポート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
VBから参照できないCのDLLを使...
-
FTPの送信結果を検知したい
-
access テキストボックスの値取得
-
PowerShellを使って関連付けら...
-
Returnに対するGoSubがありません
-
アクセスのクエリでコンパイル...
-
OUTLOOK VBA 指定フォルダ内の...
-
Adobeのプレミアプロの書き出し...
-
EXCELのVBAでWORDが開いてある...
-
NAS上のファイルの使用中が解除...
-
すでにファイルが開かれている...
-
VB6 Dir関数で52エラー発生
-
FORTRANの実行エラーについて
-
Excelvbaのマクロのファイル名...
-
Excelファイルのマクロによる排...
-
エクセルマクロでエラーの原因...
おすすめ情報