1 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:25:17 ] 1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14 Visual C++入門者・初心者からの質問を、 お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。 ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう。 ・できるだけ具体的に。 質問の仕方については次のページが大変参考になります。 www.hyuki.com/writing/techask.html myu.daa.jp/osiete/ ■回答するにあたって ・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。 (MSDNのどの項目だとか、何のキーワードでGoogleするとか) ・ネタや煽りは軽く流しましょう。 過去スレ、関連スレなどは>>2-5 。
2 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:28:11 ] Part25 ttp://pc11.2ch.net/test/read.cgi/tech/1168354839/ Part24 ttp://pc10.2ch.net/test/read.cgi/tech/1158296664/ Part23 ttp://pc8.2ch.net/test/read.cgi/tech/1140711893/ Part22 ttp://pc8.2ch.net/test/read.cgi/tech/1131443284/ Part21 ttp://pc8.2ch.net/test/read.cgi/tech/1124806288/ Part20 ttp://pc8.2ch.net/test/read.cgi/tech/1120222322/ Part19 ttp://pc8.2ch.net/test/read.cgi/tech/1116209988/ Part18 ttp://pc8.2ch.net/test/read.cgi/tech/1113539594/ Part17 ttp://pc8.2ch.net/test/read.cgi/tech/1107926989/ Part16 ttp://pc8.2ch.net/test/read.cgi/tech/1101022051/ Part15 ttp://pc5.2ch.net/test/read.cgi/tech/1097880265/ Part14 ttp://pc5.2ch.net/test/read.cgi/tech/1093672937/ Part13 ttp://pc5.2ch.net/test/read.cgi/tech/1089011118/ Part12 ttp://pc5.2ch.net/test/read.cgi/tech/1083585833/ Part11 ttp://pc5.2ch.net/test/read.cgi/tech/1077965179/ Part10 ttp://pc5.2ch.net/test/read.cgi/tech/1074933908/ ※ Part09 ttp://pc5.2ch.net/test/read.cgi/tech/1068983609/ ※ Part08 ttp://pc5.2ch.net/tech/kako/1063/10630/1063029371.html Part07 ttp://pc5.2ch.net/tech/kako/1056/10562/1056280510.html Part06 ttp://pc5.2ch.net/tech/kako/1052/10529/1052931903.html Part05 ttp://pc5.2ch.net/tech/kako/1048/10486/1048698321.html Part04 ttp://pc5.2ch.net/tech/kako/1044/10441/1044196393.html Part03 ttp://pc5.2ch.net/tech/kako/1038/10381/1038160750.html Part02 ttp://pc3.2ch.net/tech/kako/1030/10309/1030985362.html Part01 ttp://pc3.2ch.net/tech/kako/1023/10235/1023530449.html
3 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:29:27 ] 【関連スレ】 ■MFC相談室 mfc17d.dll■ pc10.2ch.net/test/read.cgi/tech/1164073111/l50 Win32API質問箱 Build48 pc10.2ch.net/test/read.cgi/tech/1166172047/l50 鬱だ氏のう DirectX (Part 16) pc8.2ch.net/test/read.cgi/tech/1133007002/l50 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130 pc10.2ch.net/test/read.cgi/tech/1159613789/l50 C++相談室 part55 pc10.2ch.net/test/read.cgi/tech/1164951094/l50 C/C++の宿題を片付けます 80代目 pc10.2ch.net/test/read.cgi/tech/1166969820/l50 【初心者歓迎】C/C++室 Ver.33【環境依存OK】 pc10.2ch.net/test/read.cgi/tech/1164376287/l50 【関連サイト】 猫でもわかるプログラミング www.kumei.ne.jp/c_lang/ MSDN ライブラリ ※変更された msdn.microsoft.com/library/ja/ msdn2.microsoft.com/ja-jp/library/ (2005のことはこっち) Platform SDK Update ※変更された www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en Google www.google.co.jp/
4 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:30:00 ] 【このスレの前身 VisualC++相談室 過去スレ】 part 1 ttp://piza.2ch.net/tech/kako/970/970607517.html part 2 ttp://piza.2ch.net/tech/kako/981/981630730.html part 3 ttp://piza2.2ch.net/tech/kako/993/993186053.html part 4 ttp://pc.2ch.net/tech/kako/1002/10021/1002165477.html part 5 ttp://pc.2ch.net/tech/kako/1006/10068/1006834463.html part 6 ttp://pc.2ch.net/tech/kako/1011/10116/1011615035.html part 7 ttp://pc.2ch.net/tech/kako/1017/10178/1017843192.html part 8 ttp://pc.2ch.net/tech/kako/1022/10224/1022499000.html part 9 ttp://pc5.2ch.net/tech/kako/1036/10368/1036897197.html
5 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:31:17 ] 以上、前スレ997でした。 >>前スレ998-1000 ありがとうございました。
6 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 00:03:01 ] 1乙
7 名前:前987 mailto:sage [2007/04/13(金) 01:54:08 ] 関係ありそうなとこにはvolatileつけましたが一緒でした 変数の初期化はしてあると思うのですが もう一度確かめてみることにします CEventと変数では同期をとるのになにか違いがあるのですか? 大分前に同じと言われたような
8 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 08:41:59 ] >>7 変数だと たとえばaが0以外になると次の処理に進む。 while(true) { if( a != 0 ) break; Sleep(100); } 最適化されて if( a == 0 ) { while(true) { Sleep(100); } } になってしまうことないようにvolatile使うんじゃないの。 でも俺は最適化とvolatileが上手く機能するか調べたことない。 同期イベントなら関数コールして調べるので前期のような最適化はかからない。 また、上記だと1秒間に10回aを調べる。 aの値が変化しても反応が最大で100ミリ秒遅れる。 かといってSleepを減らすとこの空回りするループにCPU処理を使ってしまい無駄。
9 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 08:47:34 ] >>8 以下のようにすれば最適化はされないはず。 これでも駄目なら別の原因? //宣言のみ bool check(); void thread() { while(true) { if( check() ) break; Sleep(100); } ...... } //threadの後または別のファイルに //checkがあれば最適化不可能だろう bool check() { return a != 0; } 同期イベントならループにしたりSleepつけなくていい。
10 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 09:58:53 ] >>7 > CEventと変数では同期をとるのになにか違いがあるのですか? ・同時に複数のスレッドから変数を変更する可能性 ・リードする側がチェック直前/直後で変数が書き換わる可能性(それで動作が異なってしまう場合) 等、気をつける必要があると思。
11 名前:デフォルトの名無しさん [2007/04/13(金) 12:07:46 ] VisualC++ 2005 Expressを使用しています。使用歴は1週間だけです。 UNIXのプログラムにWindowsのガワをつけたプログラムの作成をして配布しようと思っている のですが、配布の段階でつまずいてしまいました。 プログラムはWindowsフォームアプリケーションでCLIに依存しています。 OSはWindows Vista x64です。 インストーラの作成を行いたいのですが、その方法が分かりません。 私が検索してたどりついたのは以下のところまででした。 お力をお借りできないでしょうか。 1.MSDNで ttp://msdn2.microsoft.com/ja-jp/library/ms235317(VS.80).aspx にあるように「その他のプロジェクトの種類」を行おうと思ったのですが、見当たりませんでした。 「Visual Studioにインストールされたテンプレート」と「マイテンプレート」だけでした。 2.ヘルプを参照するとプロジェクトのプロパティで「ビルド」を選択すると必須コンポーネントが 選択できるということでしたが、そのような項目はみあたりませんでした。 (Visual C#には「発行」にありましたが、VisualC++ではこれも見つかりませんでした) 3.Windows Installerをインストールしようと思ったが、「このコマンドを実行するのに十分な 記憶領域がありません。」というエラーでインストールできなかった。 経験が全くないため見当違いな部分が多く、検索も下手で要領を得ませんが、解決法をご存知の 方がいらっしゃったらお力を貸していただけないでしょうか。
12 名前:デフォルトの名無しさん [2007/04/13(金) 12:20:26 ] Visual C++ 6.0を再インストールしようと思って、 一旦削除してもう一回インストールし直したら、 「プライマリ プラットフォームがありません。 ビルドシステムは使えません。セットアップがインストールしたアドオン プラットフォーム(.pkg)のロードに失敗した可能性があります。」 といわれ、エラーで落ちる。 何回インストールし直してもだめ。 教えてエロい人><
13 名前:デフォルトの名無しさん [2007/04/13(金) 12:49:00 ] Visual Sutdio 2005を初めて使うのですが、Eclipseのインポートの再編成のような機能はないのでしょうか。 言語はJAVAからの応用がききますが、クラスや関数はまだ覚えられていないため、 #includeやusingを設定するのに苦闘しています。 ※例外処理でfinallyが無いのが納得できない……
14 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 16:35:17 ] >>11 たぶんそれはExpress Editionにない機能と思う
15 名前:デフォルトの名無しさん [2007/04/13(金) 18:08:20 ] >>14 お返事ありがとうございます。 今日ずっと調べた所、VisualC++ではインストーラーは作成できないようですね。 VisualC#であればClickOnceを使ってインストーラーの作成ができたので、つらいですが VisualC#でプログラムを書き直そうと思います。 予算があればStandard Editionを買いたい所ですが・・・
16 名前:デフォルトの名無しさん [2007/04/13(金) 22:02:57 ] VisualStudio2005のスタンダード版ってMFCと静的リンクできますか?出来るなら買いたい。
17 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 22:19:35 ] >>16 OK
18 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 22:28:10 ] 階層構造でtodoを記述できるような補助機能ってあります?
19 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 22:33:53 ] 性的リンク
20 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 22:34:47 ] WindowsXP環境でVisualStudio2005・C++で単純なWin32アプリケーションを作成したのですが、 これをWindowsVistaで実行しようとすると、 「このアプリケーションのサイドバイサイド構成が正しくないため、アプリケーションを開始できませんでした」 というエラーが出て起動できません。 Vistaで動かすにはどうしたらいいでしょうか?
21 名前:デフォルトの名無しさん [2007/04/15(日) 00:08:40 ] WindowsXPでVisual C++ 2005 Express Editionを使っています。 「Windowsゲームプログラミング」という本のプログラムを実行してみたところ、 アクセス違反と表示されてしまいました。 デバッガでステップ実行してみるとWM_DESTROYのreturn 0;からDispatchMessageを出るまでの間に 表示されるのですが、どこが悪いのか分かりません。 どうしたらアクセス違反を無くせるでしょうか。 以下、出力抜粋とコードです。 test_window2.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a2c7fc を読み込み中にアクセス違反が発生しました。 test_window2.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a2c7fc を読み込み中にアクセス違反が発生しました。 プログラム '[3220] test_window2.exe: ネイティブ' はコード 0 (0x0) で終了しました。 #include <windows.h> #define APP_NAME TEXT("Sample_MainWindow") #define DRAW_STRING TEXT("Kitty on your lap") LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow) { WNDCLASS wc; MSG msg; HWND hWnd; HDC hdc;
22 名前:21 [2007/04/15(日) 00:10:29 ] wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND + 1; wc.lpszMenuName = NULL; wc.lpszClassName = APP_NAME; if (!RegisterClass(&wc)) return 0; hWnd = CreateWindow(APP_NAME, TEXT("Window Title"),WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL, NULL, hInstance, NULL); if (hWnd == NULL) return 0; /* デバイスコンテキストのハンドルを取得 */ hdc = GetDC(hWnd); /* デバイスに文字列を描画 */ TextOut(hdc, 10, 10, DRAW_STRING, lstrlen(DRAW_STRING)); /* デバイスコンテキストのハンドルを解放 */ ReleaseDC(hWnd, hdc); while(GetMessage(&msg, NULL, 0, 0) > 0) { DispatchMessage(&msg); } return msg.wParam; } よろしくお願いします。
23 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 00:30:22 ] >>21 実行してみたが、ウチの環境では問題なし。
24 名前:21 mailto:sage [2007/04/15(日) 02:38:05 ] わざわざ実行までして頂いてありがとうございます!! 問題なしですか、どうしよう… そうするとコードではなくてうちの環境が悪い可能性がありそうですね。 ……… ということで環境を疑う前提で再度ググりまくってみたところ、おかげさまで解決策が見つかりました! ImeWatcherというソフトを起動していたのですが、そちらを終了させるとアクセス違反が発生しなくなりました。 その結論に至った流れとしては、こちらのページ ttp://forums.belution.com/ja/vc/000/335/02s.shtml を参考に出力に知らないソフトが混じっていないか見てみたところ、 なぜか起動中のソフトのdllがいくつか混じっていたため試しに一つ一つ終了させて確認していたら それを終了させておけばアクセス違反が発生しないということが判明したという次第です。 これが相性とかいうやつなのか、単にImeWatcherのバグなのか分かりませんが、 原因(と一応の対策)がわかってすっきりしました。ありがとうございました。 下記はアクセス違反発生時の出力の抜粋です。 'test_window2.exe': 'C:\src\test_window2\debug\test_window2.exe' を読み込みました。シンボルが読み込まれました。 'test_window2.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。 'test_window2.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。 … ここ→'test_window2.exe': 'C:\Program Files\Takubon\ImeWatcher\ImeWatch.hook' を読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。 … 'test_window2.exe': 'C:\WINDOWS\system32\oleaut32.dll' を読み込みました。シンボルが読み込まれていません。 test_window2.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a2c7fc を読み込み中にアクセス違反が発生しました。 test_window2.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a2c7fc を読み込み中にアクセス違反が発生しました。 プログラム '[2644] test_window2.exe: ネイティブ' はコード 0 (0x0) で終了しました。
25 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 09:31:03 ] MS VC++ VS2005なんですが #include <stdio.h> int main(void) { FILE *fp1; if( (fp1 = fopen( "d:\\tmp\\aaa.txt", "r" )) == NULL ){ }else{ } } だと、警告がでるんですが でない書き方(fopenを使わない)を教えて下さい
26 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 09:55:25 ] どんな警告が出るんだ?
27 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 10:01:50 ] >>26 レスどうもです warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNING S. See online help for details.C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\stdio.h(234) : 'fopen' の宣言を確認してください。 ググったらfopenは古いから使うなってことらしいです
28 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 10:09:51 ] >>27 移植性を考慮するなら、言語規約にあるfopen()を使うのが妥当。 MSの甘言に載せられて移植性を度外視するのなら、fopen()の派生版でもAPIでも使えば宜しい。
29 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 10:27:18 ] C/C++言語の初心者が使うには余計な機能
30 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 12:08:54 ] >Consider using fopen_s instead
31 名前:デフォルトの名無しさん [2007/04/15(日) 12:21:21 ] >>21 GetMessage(&msg, NULL, 0, 0) で&msgで参照する時、ImeWatcheあたりがmsg使ってて、 それでプロテクトメモリ競合が発生して、AccessViolation出してるっぽいなあ while(GetMessage(&msg, NULL, 0, 0) > 0) { DispatchMessage(&msg); } return msg.wParam; } を REGETMESSAGE: if(&msg){ while(GetMessage(&msg, NULL, 0, 0) > 0) { DispatchMessage(&msg); } } else{goto REGETMESSAGE;} return msg.wParam; } なんてするとどうなるんだろか?
32 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 12:31:43 ] MSG msg; で、このmsgがぶつかる場合というのは ウィンドウメッセージキュー なのか PostThreadMessageキュー どっちかで、他がつかんでて、ぶつかってるんだろう。
33 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 15:33:16 ] Web API(Yahoo! API)をVisual C++で使いたいのですが、 Web APIを利用するためのクラスなどはありませんか?
34 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 16:04:41 ] >>30 レスサンキューです
35 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 16:23:54 ] >>33 スレ違い。 そして無視される>28、>29
36 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 16:39:48 ] >>25 C++のstd::ifstreamを使えばOk >>28 ところがどっこい、あのセキュリティ強化のライブラリ関数はTR 24731として公開されており、 下手すると将来の標準Cに取り込まれる可能性すらある。現時点ではまだどうなるかわからないけどな。 ちなみにOpen Watcomのも実装しているようだ。
37 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 18:07:53 ] >>36 M$のはSafer Cと相違点が多すぎる。 警告通りに直したら後でひどい目にあうのは確実。
38 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 18:18:01 ] fopen_s なんか使ってるやついるんか? winアプリならapi使うだろうし 学習用途なら標準Cライブラリだろうし
39 名前:デフォルトの名無しさん [2007/04/15(日) 19:32:11 ] XP VS2002 MFC。 大文字と小文字を区別せずに文字列(char)を検索したいのですが、 速くて簡単な方法ありましたら教えて下さい。
40 名前:デフォルトの名無しさん [2007/04/15(日) 19:44:58 ] 元々は正社員だったのに取引先にフリーのほうが稼げるとか騙されて 結局派遣やってるバカがいるんだけどw なんか派遣先といい関係、とか言ってたから思わず吹き出しちゃったよw 最近はマネージャーもやってるとか寝言言ってるし、派遣がまねぇじゃぁ?はあ!?w そもそも信頼されてるなら直接契約するか正社員にするはずだが、 いつでも切れる派遣会社経由って舐められてんだよ 派遣期間が長くならないうちに早く就職しろ、と忠告したら、ウッキー!って逆ギレw バカで頑固だから何度言っても理解できない 騙されたとはいえ結局は自分で決めて派遣やってる癖に逆ギレしちゃってまぁ 人間として本当に恥ずかしい
41 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 20:23:48 ] >>39 stricmp()
42 名前:39 [2007/04/15(日) 21:36:55 ] >>41 レスありがとうございます。 先頭からstricmpで比較していって検索するモノが出来ました。
43 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 22:19:58 ] SDKで作ったサンプルプログラムですがアプリの動作で ちょっとおかしなところがありまして質問します。 ファイルから読み込んでビットマップを表示させます。 画像がクライアント領域よりも大きければ、表示と同時にウィンドウ標準の スクロールバーを各種設定をして表示させます。 スクロールバーはきちんと機能して画像がスクロールされます。 ところがウィンドウのサイズを小さくして水平スクロールバーが クライアント領域が消えるくらいまで小さくすると水平スクロールバーが 消えたと思ったら下側のフレームに水平スクロールバーが薄く表示されています。 そこからもっとウィンドウのサイズを小さくするとタイトルバーの×ボタンに重なって スクロールバーのサイズグリップが重なって見えます。 これでは見栄えが悪いと思い解決方法はないかと思い質問しました。 よろしくお願いします。 開発環境はVisual C++ 6.0 Pro OSはXP Pro SP2
44 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 23:08:24 ] なんか難解な日本語だなw 下側のフレームに薄く表示されるって状態がいまいちわからんのだけど 言ってる各状態のスクリーンショットとか撮れん?
45 名前:43 mailto:sage [2007/04/17(火) 00:06:02 ] >>44 説明が下手で済みません。画面のスクリーンショットは自分のホームページに載せて リンクしました。 以下がリンクです。 水平スクロールバーが下側のフレームに薄く表示されている画像。 ttp://www3.zero.ad.jp/m-takahashi19741025/20070417BMPViewSample01.png スクロールバーのサイズグリップがタイトルバーの×ボタンに重なっている画像。 ttp://www3.zero.ad.jp/m-takahashi19741025/20070417BMPViewSample02.png よろしくお願いします。
46 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 05:44:09 ] 最小のサイズを決めておけば?
47 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 07:16:21 ] >>45 CreateWindowでウィンドウスタイルにWS_HSCROLLとWS_VSCROLLを指定してスクロールバーを出して その時に一緒に表示されるサイズグリップの挙動ってことでいいんだよな? VCが作る雛型にスタイル追加してやってみたけど、サイズ小さくしたら普通に消えていったけどなぁ 2000とXPの違いなんだろうか・・・
48 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 07:32:24 ] 3つほど質問があります。 @C++はクラス外に関数を記述できますが、main()やWinMain()以外を クラス外に記述する意味はあるのでしょうか? 単にCからの引き継ぎ、慣習ということであれば なるべく全ての処理をクラス内に記述したいのですが。 AVisual C++には、JavaのLoggerクラスの様な標準ログ出力クラスは用意されていないのでしょうか。 見あたりませんでした。clogをリダイレクトする処理を実装するしかないでしょうか。 BGUIアプリを、コンソール出力無しに作成する場合は、 WinMain()関数を使用するしかないのでしょうか?(Google検索だとそのように記述するサイトがヒット) 機種依存するコードはなるべく外出し、極小化したいのですが、 WinMain()からmain()を呼ぶように記述するしかないでしょうか。
49 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 08:16:53 ] 1. まあみんながみんなOOPというわけではないからね。 Cみたいな手続き型プログラミングだけでなく、 STLアルゴリズムみたいにジェネリックプログラミングでは非メンバ関数も必要に応じて使う。 何にせよ、OOPのときでも静的メンバだけのクラスなんて作るなんて馬鹿げていると俺は思うけどね。 2. Logger(というよりJava自体)を俺は知らないが、clogをリダイレクトするくらいなら、 適当なファイルをofstreamで開けば十分だと思う。ちなみにVC++のclogは、バッファリング付の標準エラー出力。 3. プロジェクトのプロパティ→リンカで •システム→サブシステムにWINDOWS(コンソールを使わない指定)、 •詳細→エントリポイントにmainCRTStartup(main用のスタートアップルーチン) を指定すると、mainから始まる非コンソールアプリケーションが作れるはず。 あまり一般的な手法ではないかもしれないが。
50 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 08:59:53 ] >>48 GUIアプリって時点で十分環境依存だからWinMainを排除したところで意味はないぞ。
51 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 09:07:46 ] >適当なファイルをofstreamで開けば十分だと思う。ちなみにVC++のclogは、バッファリング付の標準エラー出力。 (cin, )cout, cerrの他に用意されてるの? #尤も、cerrはバッファリングしないが。
52 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 12:34:20 ] 質問があります。 開発環境、実行環境ともにWindowsXP(SP2) 仕様環境はVC++6.0です レジストリの HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR のStartを3から4に書き換えた(USB大容量記憶デバイス禁止)状態で USBポートに挿入されているリムーバブルディスクの確認(空き容量と場所(E:などの割り当てられる文字))を行う方法が 存在するのなら、ご教示ください。
53 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 20:27:35 ] >>48 1:C++は不完全OOPです。 2:所詮テキストをフォーマットしてファイルに出力するだけなのでそもそも特別に必要でない 3:Windowsの標準的なGUIアプリにおいてはそもそもコンソールなんて使ってません ていうか規定のエントリポイントを排除しないでください
54 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 20:32:30 ] >>51 そうだよ 無論標準C++に含まれている
55 名前:48 mailto:sage [2007/04/17(火) 20:34:52 ] >>49 ご丁寧にありがとうございます。 1につていは、Javaの癖なんですよね。C++では非メンバ関数が当たり前ということであれば 郷に従う必要がありそうです。 2については、ログレベル(外部ファイルで、出力する下限レベルを設定)を 実現したいので、やはり個別実装しないと駄目なんでしょうね。 3については、なるべく一般的なコーディングを心がけて移植性を高めたいと思うので、 一般的でないなら止めた方が良さそうですね。 >>50 そのまま他でコンパイルできることまでは望みませんが、 このクラスは機種依存、と明確にして移植性を高めるのが目的です。 確かに、WinMainでそれを考える意味はあまりないのかもしれませんね。 イベントドリブンでなければともかく。
56 名前:48 mailto:sage [2007/04/17(火) 20:39:34 ] あ、返事中に新たな回答が。 >>53 1、そう意識していくしかないのでしょうね。 もっとも、自分で制約をかければほぼ完全にOOP的に 実装できそうだと思ってはいますが(それが良いかはともかく) 2、>>55 で書いてしまったのですが、ログレベルを実現したいのです。 個別実装したいと思います。 3、わかりました。WinMainを使って素直に実装しようと思います。
57 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 21:00:15 ] Windows用のプログラムを作れる環境では、 どんなコンパイラでもWinMainが使えると思って平気。 その程度の移植性ならある。
58 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 22:16:19 ] ていうかWinMainが使えなきゃWindows用のGUIプログラムなんて作れなくね?
59 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 22:54:30 ] >>58 >>49 インスタンスハンドルはGetModuleHandle(0)で、 WinMainの最後の引数の代わりはSW_SHOWDEFAULTで代用すればいい。 (どうしても拘るのならGetStartupInfoと言う手もあるが)
60 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 07:37:19 ] そこまでする意味が理解できない件
61 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 07:58:28 ] 環境依存コードはどうやったって出てくるだろうしね。 自分は環境依存コードにWinMain書いておいて、そこからmainを呼ぶようにしているが、 それは48氏が初めに書いているね。(それでいいと思うけど)
62 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 16:23:15 ] freepg.fc2web.com/cpp/topic_vce_001.html 以前のパソコンで上のサイトよりVisual C++ 2005 Express Editionを インストールできたのですが新しいパソコンでインストールできません(VISTA) CDイメージ(.iso)インストール(AIR-EDGEだと途中でダウンロードが止まる) Webからインストール(これで試しています) Microsoft Platform SDK を一緒に使うで [PSDK-x86.exe]を実行すると 下のメッセージがでます 「インストールパッケージを開くことができませんでした。 アプリケーションベンダに問い合わせ、このパッケージが有効な Windowsインストーラパッケージであることを確認してください」 3日間悩んでいます>_<;よい意見などあれば宜しくお願い致します。<(_ _)>
63 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 00:34:31 ] Vistaを捨てるのはどうだろう。
64 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 10:52:50 ] MSに訊いてみるのはどうだろう。
65 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 22:44:35 ] Visual C++ 6.0で質問です。 サービスプログラムから複数のスレッドを起動し、中でDLL関数を明示的に 呼び出しているのですが、この関数に不具合があるらしく、アクセス違反が 発生するうえ、呼出元のスレッドごと堕ちてしまいます。 DLLを直せば済むんでしょうが、とある事情によりDLL自体に手を入れ難い状況です。 そこで質問なのですが、DLLのエクスポート関数内で発生した保護エラー等を 呼出元でトラップし、処理続行するようなことはできるものでしょうか? よろしくお願いします。
66 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 23:01:36 ] 自分がやってることは疑わずに悪いのはこの関数と決めつけてるし ほっといてあげよう
67 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 23:20:49 ] 適当に言うけど catch(...) で捕らえられんの?
68 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 01:08:41 ] >>66 仰るとおりです。以後気をつけます。 DLLのソースは入手しまして、fopen()が失敗した際にNULLが返っているにも 関わらずfclose()を実行してそこでコケているので、>>65 のような書き方を してしまいました。 >>67 レスありがとうございます。 catch(...)で試してみたのですが、拾ってくれない(そこまで到達してない) ようです。 一度通常のコンソールアプリに組み込んでトラップできるか試してみます。 何かお気付きの点ありましたら、お願いします。
69 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 08:20:39 ] プログラムの1機能的な例外ではなくOSが発する例外なのにcatchできるわけないべw
70 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 08:25:44 ] >fopen()が失敗した際に 失敗の原因が >サービスプログラムから複数のスレッドを起動 だったりしないよな
71 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 17:02:09 ] >>68 /EHaを付けて、SEH (__tryと__expect)の方を使えば受けられるかもしれない。 SEHで受けられるなら、_set_se_translatorでC++例外へ変換する道が開ける。
72 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 07:55:05 ] >68 そのDLLの内部でfopen()お呼びfclose()が行われてるってことかな。 ソースあるなら呼ばないで自分で似たようなの作り直すってのはダメなのか? あるいは、そのDLLの問題部分を完全に突き止めて、ここをこう直せと指摘するとか。
73 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 08:28:27 ] お前らの話しを全部理解できてないので間違えてるかもしれんが 俺も例外をcatch(...)で取れないことが最近あった。 で、調べた。 記憶が確かなら VC6のころはメモリアクセス違反をcatch(...)で取れた。 VC2005はコンパイルオプションを変えないと その手のCPUがだす例外をcatch(...)で取れない。 あるいは例外ハンドラを自分で書くのかな。 コンパイラオプションは覚えとらんので書けない。 とりあえずメモリアクセス違反を握りつぶすのも問題だから VC2005でデフォルトが例外をcatch(...)で取れないようになったのは 妥当なことなのかな。
74 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 08:33:44 ] >>72 それが一番だよな。 エラー処理が不十分てことだからDLLを直させるべき。 でも自分の担当じゃないDLLの細部まで調べないと云々は納得いかんな。 社外の作成したDLLだからソースなしで 責任転嫁だとか本当にお前の担当部分にバグがないのかとか・・・ 愚痴になってしまったのでおしまい。
75 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 09:30:00 ] >>73 C++例外でないアクセス違反を、C++の構文で捕捉できた事が異常。
76 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 17:52:57 ] >74 >でも自分の担当じゃないDLLの細部まで調べないと云々は納得いかんな。 他人に直させるにしても、問題が本当に相手のソースにあるのかまではつきとめないと やっぱり自分のミスでしたって事になった場合、人間関係に亀裂が入り易いからなぁ。 (はっきり指摘してやって逆ギレするのもいるが、そういうのは置いといて^^;) 少ない修正で済むような問題なら、教えてやった方が結果的にロスタイムも少ないしな。
77 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 18:43:19 ] なぜfopen()が失敗するのか
78 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 19:02:47 ] >>76 別に細部まで調べなくても 渡すデータがDLLの仕様どおりで、呼び出し部以外でコケてなけりゃどう考えてもDLLの問題だし
79 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 19:10:47 ] 下手に全部調べてからDLL担当者に「バグってますよ」というより、 「巧くいかなくて困っているんで、DLL側で助けてもらえませんか」と下手に出たほうが 協力を得やすく労力も減るかもしれない。
80 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 19:27:43 ] もしそのDLLが普通に使われてるんなら 仮にバグがあったとしても今まで問題にならなかったということだ。
81 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 19:47:25 ] とある事情によりDLL自体に手を入れ難い状況ということは今まで何事もなく使われてたんだろ
82 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 21:40:04 ] まあ、ファイル名を引数等で指定して処理させるような形だったら 一度呼び出し側でfopen()して開けなきゃDLLの関数は呼ばなきゃいいんじゃね? 2度手間になるから、もちろんいじれるならDLLいじった方がいいが。
83 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 08:03:55 ] VC++ .NET 2003のオプションで指定するインクルードファイルとかのパスって どこに保存されてるの?
84 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 11:32:52 ] デフォルトの設定 レジストリ プロジェクトの設定 プロジェクトの定義ファイル
85 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 19:15:31 ] レジストリ内の場所ってわかる? レジストリエディタで目的のパスで検索かけてもHitしないんだけどさ・・・ ちなみにオプションのVC++ディレクトで設定する、インクルードファイルとか実行可能ファイルとか指定するとこなんですが
86 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 14:30:15 ] VC++2005なんですが 自作のクラスにメンバを追加したり、STLなどの既存のクラスを読み込んだりしたときに かなりの頻度で、プロジェクトを閉じて開いたり、VSを再起動したりしないと :: や . や -> などを入力した後の一覧に追加したメンバが表示されないのですが 再起動などせずに解決する方法は無いのでしょうか
87 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:29:25 ] MSに要望出せ
88 名前:デフォルトの名無しさん [2007/05/08(火) 20:40:19 ] なぜかある場所でメンバ関数呼び出すと thisポインタを使わないとメンバ変数が使えなくて thisで指定しないでその変数に行くとランタイムエラーだされるんですが これはメモリの領域破壊のバグのひとつでしょうか?
89 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 21:05:01 ] ある場所をはっきりさせてから質問してください
90 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 21:09:54 ] ランタイムエラーが出るんならランタイムに行ってんだろ
91 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 21:14:06 ] ランタイムの使い方がおかしいんだろうね。 その辺りのコード晒してみ?
92 名前:デフォルトの名無しさん [2007/05/09(水) 15:54:38 ] スレ違いでしたらすみません。 質問があります。 ホームページビルダーを久しぶりに起動したら、 次のようなエラーメッセージが出て、起動できなくなりました。 何か解決方法はありますでしょうか?よろしくお願いします。 環境はOSがXP、HBはV9です。 ----------------------------------------------------- Microsoft Visual C++ Runtime Library Assertion failed! Program: ... Files\IBM Homepage Builder V9\bin\hpbpage.exe File: .\RegistryBase.cpp Line: 81 Expression: code == ERROR_SUCCESS -----------------------------------------------------
93 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 16:19:41 ] ホームページビルダー作った会社に訊け
94 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 18:57:27 ] >>92 ここは「Microsoft Visual C++を使う人」のためのスレです Microsoft Visual C++を「使って作られたソフトを使う人」はお帰りください
95 名前:デフォルトの名無しさん [2007/05/09(水) 21:27:25 ] ウェブ上に公開されているサンプル プロジェクトをビルドすると、次のエラーが出て失敗します。 環境はWinXP、VC++2005です。 > error C2678: 二項演算子 '<' : 型 'const ErrorEntry' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。 > c:\program files\microsoft visual studio 8\vc\include\xutility 267 試したサンプルはWinsock Programmer's FAQのAsynchronous I/O Clientです ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/basics/AsyncClient/index.html (ページの下のほうの「project package (33 KB)」からダウンロード) ファイルはVC++5のプロジェクトが丸ごと圧縮されており必要なものは全てそろっているそうです。 VC++2005でプロジェクトを変換して開いたのですが、上記のようになりました。 エラーの場所が場所なのでコンパイラに渡すオプションあたりをいじる必要があるのでしょうか? ご教示お願いします。
96 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 21:40:31 ] 全然関係ないけど P.J. Plaugerが自ら語るVS2005搭載C++テンプレートライブラリ STL.NET
97 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 23:36:26 ] 従来のSTLの機能の大半は.NET Frameworkクラスで事足りるのにSTL.NETとはこれいかに
98 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 23:39:31 ] >>97 まぁ読んでみれ www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.aspx
99 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 20:00:32 ] なんでこう、バージョンアップするごとにIntelliSenseがバカになってくいんだ・・・
100 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 20:03:28 ] 新しいものに慣れるのがつらい年頃なのかね。