質問 |
||
| 質問者:supertrap | VC++ リンクエラーについて | |
|---|---|---|
困り度:
|
こんにちわ。 VC++初心者です。 宜しくお願い致します。 環境は、XP HomeEditionSP2 CV++6.0 です。 VCの基本を理解する為及びプログラミングの勉強の為、簡単な表示ソフトを自作し、ビルトした後実行したら、表示されるはずのウインドウが表示されませんでした。 ソースコード修正後、再度ビルドをかけたら、上記LNK1168が発生しました。 WEBから色々情報をとってみると、 ”ターゲットが実行中であり終了できていないので、ターゲットを実行中止にした後にあらためてビルドすればよい”とありました。 ウインドウが表示されていれば、右上の×マークを押すことでとりあえずは終了(実行中止)出来ますが、今回私が作成したバグ入りソフトの様に、ウインドウが表示しない状態でターゲットの実行中止をするにはどうすれば良いでしょうか? VC++には、実行中止、というメニューは無いような気がするのですが。 ワークスペースを閉じたり、VC++を終了させたりしてみたのですが駄目でした。 今後VCを使用するにあたり、是非ともこの問題を明確にしたく、質問させて頂きました。 初歩的な質問で誠に恐縮ですが、どなたかお教えください。 宜しくお願い致します。 |
|
質問投稿日時:08/05/02 12:32 質問番号:3992018 |
||
回答良回答20pt |
|
| 回答者:redfox63 | IDEからデバッグモードで実行中であればIDEのタイトルバーに[実行]と表示されていると思います Ctrl+F5のデバッグ無しで実行を選択してしまったのなら メニューのビルド > デバッグの開始 > プロセスへのアタッチで 起動したEXEファイル名を選択して OK メニュのなかに『デバッグ』が存在します この中に『デバッグの中止(D) shift+F5』が上から3番目にあると思いますよ CreateWindowで作成して 有効はハンドルが作成されたら ShowWindowを実行する といった手順の方が安全だと思います ついでに UpdateWindowを実行して画面の更新を促しましょう |
|---|---|
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| |
回答日時:08/05/02 22:20 回答番号:No.2 |
|
| この回答への補足 | 回答有難う御座います。 宜しければもう少しお教え下さい。 デバック無しで実行: メニューのビルド>デバッグの開始>プロセスへのアタッチ をやってみましたが、ファイルが何も出現せず、従って何も選択出来ませんでした。設定か何かがおかしいのでしょうか? デバックモード: 丁寧に説明して頂いたお陰で、出来ました!! 有難う御座いました。 ただ、 (1)ビルド>デバックの開始>実行 (2)ビルド>実行 と、何故実行が二つ存在するのかが気になっています。 ブレークポイントなどを何も設定せずに(1)を行った場合、 (1)と(2)は何か違いが出てくるのでしょうか? UpdateWindow: WM_PAINTメッセージ(つまり画面の更新、再描画があった場合)をエンキューするのはOS(自分の場合はWindowsXP)だと自分は今まで思っていたのですが、UpdateWindowをソースファイルに既述しないとWM_PAINTメッセージがエンキューされないということでしょうか? それとも、OSもWM_PAINTメッセージをエンキューするが、念の為UpdateWindow側でもWM_PAINTメッセージをエンキューさせた方が良い、 という意味でしょうか?初歩的な質問ですみません。 申し訳有りませんが、もしお分かりになる様でしたらお教え下さい。 宜しくお願い致します。 |
| この回答へのお礼 | 質問者です。 お礼が遅くなりました。 今後今回の様なミスをしない様、 1)最初に動作確認する際は、実行はビルト>デバッグ から行う。 2)外部キー(例えばESC)で、強制的に終了出来る仕掛けを作っておく という風にしたいと思います。 ご回答いただいた皆様、どうもありがとう御座いました。 助かりました。 これで、今回の質問を締め切らせて頂きたいと思います。 |
回答 |
|
| 回答者:noname#60636 | VC6の動作をあまり覚えてませんが、 VCから起動した場合、[デバッグの停止]のようなメニューで終了できた気が。 上記でダメ、または、VCから起動していない場合、タスクマネージャから終了させるとか。 |
|---|---|
| 種類:アドバイス どんな人:経験者 自信:参考意見 |
|
| |
回答日時:08/05/02 12:43 回答番号:No.1 |
|
| この回答への補足 | 回答有難う御座います。 もう少し付け加えさせて頂きたく思います。 デバッグの停止について: 自分は、VC上でコンパイル、ビルド、実行の順で行いました(作成したプログラム単独では起動させてはおりません)。組み込み系(ワンチップマイコンなど)の統合開発環境では、よく”デバックの中止”というメニューを見かけますが、それに該当するものがVC6には(自分が見た限り)なさそうなのです。 結局、PCの電源を入れ直さない限りターゲットは実行終了しない様です。 タスクマネージャでの終了について: ターゲットを終了出来ない状態でタスクマネージャから終了させると、VC++自体が終了してしまいますが、ターゲットの実行を停止出来ない様です(再びVCを立ち上げても、再度ビルドすると同じエラーが出るので)。 明確にしたい事項: 自分は、以下3つの内のどれかかなあと思っています。 1)VC++6の??のメニューを選ぶと、実行中のターゲットが停止する 2)キーボードもしくはマウスから、??を入力すると実行中のターゲットが停止する 3)実行中止の機能は、VC++6には無い(ウインドウを終了出来ない様なターゲットを作成した場合は想定していない) 具体的なプログラムミスの内容: 自分がミスした内容は非常に幼稚です。 ウインドウを作成する際、ウインドウクラスの初期化→登録→作成とプログラムを組むと思いますが、更にウインドウの表示(CreateWindowでWS_VISIBLEを登録するかShowWindow)が必要であるということを知らなかった為、プログラム自体は動くが、ウインドウが表示されない為終了出来ない、というものでした(と私は思っています)。WS_VISIBLEを設定したら、ウインドウが表示され、終了出来ました。 長々と書いて申し訳在りませんでしたが、もしお分かりになるようでしたら教えて下さい。 宜しくお願い致します。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |