★初心者にVisual C++を教えるスレ★ Part38
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/11/03(木) 00:54:48.61お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。
・できるだけ具体的に。
質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html
■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
(MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。
【過去スレ】
Part37 http://hibari.2ch.net/test/read.cgi/tech/1299982561/
Part36 ttp://hibari.2ch.net/test/read.cgi/tech/1273939582/
Part35 ttp://pc12.2ch.net/test/read.cgi/tech/1256645713/
Part34 ttp://pc12.2ch.net/test/read.cgi/tech/1245382769/
Part33 ttp://pc12.2ch.net/test/read.cgi/tech/1235292263/
0594デフォルトの名無しさん
2012/10/10(水) 13:59:54.45やってみます。
>>593
それが出来るなら、delete p; でも良いような気がしてるんです。
0595デフォルトの名無しさん
2012/10/10(水) 14:01:41.880596デフォルトの名無しさん
2012/10/10(水) 14:01:46.27>>593
あと、sizeof(p) とかは動的な場合は取れない(コンパイルエラー?)ですが、
「本当は判る。」ってことになりますよね?
0597デフォルトの名無しさん
2012/10/10(水) 14:02:32.11じゃあ一個だけ消したいときはどうすんの?
0598デフォルトの名無しさん
2012/10/10(水) 14:03:46.08>>595
ああ、
free だと p[-3] を使って常に全部解放されるけど、
delete だと p[-3] は見なくて、
delete [] のときだけ、p[-3] を見るってことですか。
0599デフォルトの名無しさん
2012/10/10(水) 14:04:49.35それはもちろん、
delete p[0];
とかで可能ではないですか?
0600デフォルトの名無しさん
2012/10/10(水) 14:09:19.96それに気付いた禿が delete [] を追加した。
0601デフォルトの名無しさん
2012/10/10(水) 14:19:21.28VC++ 2008 Express でアセンブラ出力してみましたが、
delete q; も delete [] q; も同じコードが吐かれてますね。・・・ orz
0602デフォルトの名無しさん
2012/10/10(水) 14:38:30.96さっきのは最適化されてたのだろうか。・・・ orz
0603デフォルトの名無しさん
2012/10/10(水) 14:41:25.060604デフォルトの名無しさん
2012/10/10(水) 14:43:43.18確かにそうなってますね。
そもそも、 delete で配列全部のデストラクタ呼べば良いのに、
(個別の要素を消したければ、 delete p[] で可能。)
なんでわざわざこんな変な仕様にしたんだろ。
間違いコード誘発しまくりですよね。
0605デフォルトの名無しさん
2012/10/10(水) 14:54:38.31*(size_t *)((unsigned char *)&p[0] - 4)
で参照したら確保した要素数と同じ数が取れました。
本当にありがとうございました。
0606デフォルトの名無しさん
2012/10/10(水) 14:57:41.96>>600
>>605
それ64bitだと動かなくなるよ
0607デフォルトの名無しさん
2012/10/10(水) 15:03:42.61禿も言ってるようにvector使え
そもそもdelete &p[n]で個別の要素が消せるとして何が嬉しいんだ
配列の要素を消したら最後forで処理できなくなるだろうに
0608デフォルトの名無しさん
2012/10/10(水) 15:20:09.52それはどうでもいいんです。
delete と delete [] の使い分けがどうして必要なのかなと思ったので。
0609デフォルトの名無しさん
2012/10/10(水) 15:21:29.50>>595
0610デフォルトの名無しさん
2012/10/10(水) 15:22:59.740611デフォルトの名無しさん
2012/10/10(水) 15:24:21.430612デフォルトの名無しさん
2012/10/10(水) 15:25:01.440613デフォルトの名無しさん
2012/10/10(水) 15:33:46.06>607
0614デフォルトの名無しさん
2012/10/10(水) 16:44:34.250615デフォルトの名無しさん
2012/10/10(水) 17:08:25.96>>605
0616デフォルトの名無しさん
2012/10/10(水) 17:53:43.600617デフォルトの名無しさん
2012/10/11(木) 05:52:17.82char *p = new char[N] のときは
delete p; で桶なんだな
0618デフォルトの名無しさん
2012/10/11(木) 09:22:31.850619デフォルトの名無しさん
2012/10/28(日) 21:46:47.23コンパイラの実装にもよるが、確かポインタpが指す先頭byteの前の
4byte領域にnewで確保した領域のサイズ(バイト数)が記憶されていた
ような。
delete [] p;
した時はこのサイズを読みに行って正しく解放している。
0620デフォルトの名無しさん
2012/10/28(日) 23:19:37.75>605
0621デフォルトの名無しさん
2012/10/31(水) 17:10:08.11ソリューションプロジェクトの中にいくつかプロジェクトを用意しているのですが、どのプロジェクトを実行しようとしても、必ず一番上にあるプロジェクトが実行されてしまいます。
手順としては
1.ソリューションエクスプローラーから特定のプロジェクトを右クリックしてリビルド
2.デバッグなしで開始
です。
別のソリューションプロジェクトを作成すれば別のプロジェクトを一つだけ実行できるようになるのですが、大変面倒なため一つのソリューションプロジェクト内で個々のプロジェクトを実行できるようにしたいです
Visual C++2010 , WIndows 7 64ビット
0622デフォルトの名無しさん
2012/10/31(水) 17:13:40.44してやればいけるけど、デバッグなしで開始を右クリックメニューに入れちゃうとか
0623デフォルトの名無しさん
2012/10/31(水) 17:20:51.31その一番上のプロジェクトが太字になってたら
>>622の言う通りスタートアッププロジェクトに指定されてる
0624デフォルトの名無しさん
2012/10/31(水) 17:51:31.75ちなみにスタートアッププロジェクトをどのプロジェクトにも設定しない方法はありますか?
難しいプログラムは作らないためにひとまとめでデバッグするような機会はないので、可能であれば外したいです
0625デフォルトの名無しさん
2012/10/31(水) 17:59:05.750626デフォルトの名無しさん
2012/10/31(水) 18:01:29.97どのプロジェクトにも設定しないと言う事は実行しない事になる
つまりビルドだけすれば望みの動作になる
0627デフォルトの名無しさん
2012/11/01(木) 06:18:27.78無料版2010で使えるソフトが、手持ちの有料版2003だと
DC_PEN
DC_BRUSH
SetDCPenColor
SetDCBrushColor
あたりでエラーになります。
参照:
http://blog.goo.ne.jp/masaki_goo_2006/e/d3c18365234ffb3383f5c30e32c83cf5
他の関数使うとか代替方法あります?
なければ2003より上のを買わなきゃダメですかねぇ。
0628デフォルトの名無しさん
2012/11/01(木) 08:27:21.790629デフォルトの名無しさん
2012/11/01(木) 11:06:01.910630デフォルトの名無しさん
2012/11/01(木) 14:59:17.340631デフォルトの名無しさん
2012/11/03(土) 13:32:34.11「マルチバイト文字」と「Unicode」は分かるのですが、
「設定なし」とは具体的にどういう扱いになるのでしょうか??
「マルチバイト文字」としたときの記述法でコンパイルできるので、
「マルチバイト文字」になっているのでしょうか??
0632デフォルトの名無しさん
2012/11/03(土) 17:48:58.88VC2005デコンパイルすると誤動作するとか、もしくは2010や2012で誤動作するとかが起きかねないから。
逆に、他の処理系から移植しようとして(つまり手元にあるのが2008じゃない)の質問ならしかたないが...
0633デフォルトの名無しさん
2012/11/03(土) 18:57:26.742、ボタンを押したらファイルを一つずつ指定のアプリで開く
3、開いたアプリにキー操作を送る
4、CPU使用率で2の動作を連続してできるようにする
これがやりたいことなんだけど1の段階で躓いてます。
ヒントお願いします。
0634デフォルトの名無しさん
2012/11/03(土) 19:48:48.030635631
2012/11/03(土) 22:24:51.72>そういう処理系依存の記述は互換性をそこなうので避けるべき
処理系依存とはどの設定のときのことを指すのでしょうか?
Unicodeの場合、w付きのAPIやリテラル文字列の前にLを付けたりと、
気持ち悪いので使いたくないです。
Unicode、マルチバイト文字のいずれでもコンパイルできるようにする
t付きのマクロも同様です。
これらを付けなくてもよい「設定なし」あるいは「マルチバイト文字」が
良いのですが、デメリットは何でしょうか?
多言語対応が難しいかもしれませんが、日本語だけでよいです。
0636デフォルトの名無しさん
2012/11/03(土) 23:22:40.63予期せぬ誤動作でデバッグ作業が長引く恐れがある。
>Unicodeの場合、w付きのAPIやリテラル文字列の前にLを付けたりと、気持ち悪いので
とか、
>Unicode、マルチバイト文字のいずれでもコンパイルできるようにする、t付きのマクロも
とかが、まさに、その危険を避けるための手順。
Windowsバージョンが変わると動作しなかったり動作異常を引き起こしたりしてユーザが苦労するソフトを作る茨の道へまっしぐらだぞ、それ。
0637631
2012/11/03(土) 23:32:07.17分かりました。
w付きAPIやL付きリテラル文字のほうがまだマシなので、
Unicodeが書くことにします。
ありがとうございました。
0638デフォルトの名無しさん
2012/11/03(土) 23:43:01.63今後の再利用の可能性も無い。
という条件だったら、移植性とか互換性を考える必要は無い。
0639デフォルトの名無しさん
2012/11/04(日) 00:02:34.05メッセージボックスが出ません・・・
MessageBox(NULL,"Hello,world!","Foo", MB_OK);
とすると、NULLとMB_OKが「定義されていない識別子」でコンパイルエラーとなります。
どうすれば解決できますか。
C++でコンソールアプリケーションはゴリゴリ書けますが
Windowsフォームアプリケーションは今日始めたばかりです。
環境はVisualC++ 2010 Express、Windows7 64bitです
0640デフォルトの名無しさん
2012/11/04(日) 00:05:36.090641639
2012/11/04(日) 00:13:08.19Windowsアプリを作りたいだけなので、他に良い手段あればそれにしようと思います。
おすすめあればご教示頂けませんか。
C++しか知りませんが、必要とあれば他の言語も覚えます。
スレチでしたら誘導頂けると有り難く・・・
0642デフォルトの名無しさん
2012/11/04(日) 00:18:02.99フォーム使おうとしてC++/CLIはありえん
C#覚えて使った方がよっぽどいい
0643デフォルトの名無しさん
2012/11/04(日) 08:15:00.90C++/CLIでフォーム作って処理は全部C++&APIで書いているけど
画面周りだけならそんなに使い勝手悪くないよ
0644デフォルトの名無しさん
2012/11/04(日) 11:00:12.130645デフォルトの名無しさん
2012/11/04(日) 11:44:39.43C# で同じ処理を書いた後に同じことを言えるかというと。。。
言語として悪くはないと思うけど、C# と同じことを出来るようにするためにメンドくさくなってるなら、
初めから C# で書いた方が色々と素直なので、自分は C# で書くことの方が多い。
自分は C++ 好きだから、最初は C++/CLI で書いてたんだけどね。
で、後学のために、いろいろなことを知ってる >>644 さんに問題点をご教示いただきたいなぁ。
0646デフォルトの名無しさん
2012/11/04(日) 17:49:20.04しかし、GUI部分はC#、カーネル部分はC++、でファイルを通してデータの
受け渡しができるならGUIにはC#を使う。
0647デフォルトの名無しさん
2012/11/05(月) 11:15:48.382、ボタンを押したらファイルを一つずつ指定のアプリで開く
3、開いたアプリにキー操作を送る
4、CPU使用率で2の動作を連続してできるようにする
何とか1はクリアーしました。2のリストボックスに表示された拡張子がflvの
ファイルを開くというので止まってます。
理想は、リストボックスに表示されてる複数のファイルを関連付けされてる
アプリで開きキー操作を送ることです。ヒントください。
0648デフォルトの名無しさん
2012/11/05(月) 12:03:46.49アプリで開きキー操作を送ること
複数選択した項目を取りだす方法はわかってるの?
関連付けされたアプリを起動する方法がわからないの?
開いたアプリにキー操作を送る方法がわからないの?
どれよ
0649デフォルトの名無しさん
2012/11/05(月) 12:13:16.29全部わかりません。
そもそもなんだけどリストボックスにファイル名を表示することもあってるかどうか・・・
リストボックスに表示されてるflvファイルを順に開きキー操作を送るというプログラムなんだけど
1、ボタンを押しリストボックスのファイル開きキー操作送る
2、CPU使用率を確認し1の動作をする
3、リストボックス表示のファイル全てを1、2の動作で終了させる
0650デフォルトの名無しさん
2012/11/05(月) 15:51:23.67Win32APIの範囲になってしまってるよ
とりあえずShellExecuteで関連付けを使用したオープンができる
後はあっちで聞いた方がいい
0651デフォルトの名無しさん
2012/11/05(月) 15:58:17.05答える方も個別なら回答しやすい部分もあるだろうし。
0652デフォルトの名無しさん
2012/11/05(月) 17:30:45.15了解
移動します
0653デフォルトの名無しさん
2012/11/07(水) 20:47:24.49uint とか ulong に変換する関数はありますか?
0654デフォルトの名無しさん
2012/11/07(水) 21:02:06.55wistringstream w(a);
w >> hex >> h;
0655デフォルトの名無しさん
2012/11/07(水) 22:53:54.01ありがとうございます!!!
0656デフォルトの名無しさん
2012/11/07(水) 23:39:43.50#include <stdio.h>
int main()
{
int x;
printf("%d\n", x); /* xの値は不明*/
printf("%d\n", x=4); /*代入式 x = 4の値を表示:*/
printf("%d\n", x); /* x に4が代入されたかを確認*/
x = 6; /*xに別の値を代入*/
printf("%d\n", x); /* xに6が代入されたかを確認*/
x = x + 4; /*x の値を 4 大きくする*/
printf("%d\n", x); /*それを確認*/
return 0;
}
をVisualStudio2010で実行すると、必ず 4行目 x; のところでコンパイルエラーになります。
本の通り書いてるのですが、本当なら、表示が
750
4
4
6
10
と、なるそうなんですが、何がおかしいのでしょうか? 教えて下さい。
0657デフォルトの名無しさん
2012/11/07(水) 23:50:43.64別にならんが
4行目ってどこだよ
0658デフォルトの名無しさん
2012/11/08(木) 00:11:25.16でコンパイルエラーになったときのメッセージを含めてそのまま貼って
0659デフォルトの名無しさん
2012/11/08(木) 00:45:40.01Run-Time Check Failure #3 - The variable'x' is being used
Without being initialised.
(Press Retry to debug the application)
とでます
0660デフォルトの名無しさん
2012/11/08(木) 00:51:53.900661デフォルトの名無しさん
2012/11/08(木) 01:32:02.52printf("%d\n", x); /* xの値は不明*/
意図してやっているんだから、それで良いんじゃない?
それでコンパイルが通らないなら、nt x=750; とかする
0662デフォルトの名無しさん
2012/11/08(木) 01:34:29.640663デフォルトの名無しさん
2012/11/08(木) 02:08:15.23どういう値になるか不明なんじゃないの?
0664デフォルトの名無しさん
2012/11/08(木) 02:14:03.19ただ例として出しただけで
0665デフォルトの名無しさん
2012/11/08(木) 03:42:24.83どの環境でも750になるわけではない
0666デフォルトの名無しさん
2012/11/08(木) 20:55:53.60ある与えられた文字列をバイナリに変換して16バイトのバイト配列に入れる
与えられる文字列は、バイナリ変換した時に128bitまでに収まる数値の文字列とする
という問題で困ってます
例:
"1234"
→1234(4D2h)
→00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,04h,D2h
で、QWORD以上は整数値にできずに困っています。
"18446744073709551616"
→10000000000000000h
→00h,00h,00h,00h,00h,00h,00h,01h,00h,00h,00h,00h,00h,00h,00h,00h,
どのように処理すればいいのでしょうか?
0667デフォルトの名無しさん
2012/11/08(木) 20:57:57.060668666
2012/11/08(木) 21:05:41.81>>667
学生ではないのですが、通信仕様を渡されてやっといてという事なので、一応宿題になるのですかね?
授業単元とかないので迷ったのですが、向こうで聞いてみます。
ありがとうございました。
0669デフォルトの名無しさん
2012/11/08(木) 21:26:18.270670デフォルトの名無しさん
2012/11/09(金) 13:01:20.92この文を消すもしくはコメントアウトすると
エラー1error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。
というエラーがでます。なんで文を消すだけでエラーになるのかがわからない。
0671デフォルトの名無しさん
2012/11/09(金) 13:30:26.31同じエラーでる・・・ファイルがひらけないってやつが
0672デフォルトの名無しさん
2012/11/09(金) 14:17:31.56ウィンドウの見えない
ゾンビプロセスが残ってるんだろ
タスクマネージャで心当たりのあるexeを終了させてみれば桶
0673デフォルトの名無しさん
2012/11/09(金) 15:07:26.481> stdafx.cpp
1> 999.cpp
1> AssemblyInfo.cpp
1> コードを生成中...
1> .NETFramework,Version=v4.0.AssemblyAttributes.cpp
1>LINK : fatal error LNK1104: ファイル 'OLDNAMES.lib' を開くことができません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
こんなエラーがでる。まったくプログラムとか記載する前の状態です。
0674デフォルトの名無しさん
2012/11/09(金) 16:14:53.200675デフォルトの名無しさん
2012/11/09(金) 18:10:13.160676デフォルトの名無しさん
2012/11/09(金) 19:12:54.11俺のc++人生終わったかw
まだ入門レベルなのに('A`)
0677デフォルトの名無しさん
2012/11/09(金) 19:16:23.80VC++って、1文字目が数値のプロジェクトって作れるんですか?
0678デフォルトの名無しさん
2012/11/09(金) 19:32:15.69OSの再インストール
0679デフォルトの名無しさん
2012/11/15(木) 06:57:05.16とでるんですがmain(){}だけのファイルをコンパイルしてもでます。
解決方法ありましたらおねがいします
0680デフォルトの名無しさん
2012/11/15(木) 11:37:40.47typedef struct _HOGE
{
CString str1;
CString str2;
CString str3;
} HOGE;
HOGE *hoge = (HOGE*)HeapAlloc(GetProcessHeap(), 0, sizeof(HOGE));
0681デフォルトの名無しさん
2012/11/15(木) 12:25:07.100682デフォルトの名無しさん
2012/11/15(木) 12:41:15.230683デフォルトの名無しさん
2012/11/15(木) 13:22:50.91ありがと
0684デフォルトの名無しさん
2012/11/19(月) 23:12:15.060685デフォルトの名無しさん
2012/11/27(火) 01:33:59.970686デフォルトの名無しさん
2012/12/02(日) 14:07:19.69コードをそのまま(変更せず)にビルドしようとするとエラーが出ます
どうしたらいいですか?
0687デフォルトの名無しさん
2012/12/02(日) 15:05:08.260688デフォルトの名無しさん
2012/12/05(水) 23:25:32.180689デフォルトの名無しさん
2012/12/07(金) 01:28:27.62が、検索してみるとリソースダイアログ上で張り付けたコントロールの取得方法ばかり見つかり、結局方法が分かりませんでした…。
コモンコントロール(EditとかTreeViewとか)と同じような感じで使用したいだけなのですが、
どのようにすると可能でしょうか。
Doc/Viewの分離はしておらず、CHtmlViewは利用できませんでした。
comでIWebBrowser2をCoCreateInstanceしてみた所、成功してはいたようだったのですが
HWNDの値の取得もCreateWindowもしておらず、どのようにサイズ変更すればよいのかなど分かりませんでした。
技術的な面では、Vista以降あたりで動作してくれればよいと考えております。
ご助力お願いいたします。
0690デフォルトの名無しさん
2012/12/07(金) 06:31:51.54self.ie.LoadUrl(self.current)
self.ie.Navigate(URL)
0691デフォルトの名無しさん
2012/12/11(火) 16:06:33.83>>66の人と全く同じことをしたいと考えています。
ヘッドマウントディスプレイのセンサー値を取得して、
別プログラムの中での視点移動に連動できるようにしたいです。
公式のサンプルは問題なく実行できました。
ウィンドウに表示したりといったGUIの部分は不要で、
数値だけ取得して、ソケット通信で別プログラムに渡せば実現可能だと
考えていますが、サンプルを眺めてもどこをどういじればいいのか分からない状態です。
0692デフォルトの名無しさん
2012/12/11(火) 16:13:08.23ちょちょいっと教えてどうにかなるとはとてもじゃないが思えないんだが
なのでこんな場所ではなく、まともな人に対価を支払って教えてもらうのが一番正しい選択だと思いました。
0693デフォルトの名無しさん
2012/12/14(金) 21:45:02.01戻り値を指定出来ません
例外をださずにNULLを返すにはどうすればいいのでしょう?
■ このスレッドは過去ログ倉庫に格納されています