★初心者にVisual C++を教えるスレ★ Part31
1 :
デフォルトの名無しさん :
2008/07/31(木) 18:02:28 Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。
・できるだけ具体的に。
質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html ■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
(MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。
過去スレ、関連スレなどは
>>2-5 辺り。
VS2008のSP1はまだかな〜
案外ウィルスに感染しているとかってオチじゃないか?
9 :
8 :2008/08/01(金) 00:54:43
誤爆スマン
VC++6.0を使っています。 vector<string>の宣言時に一括して配列へ文字を 代入したいのですがどうすればいいのでしょうか。 javaとかだとこんな感じの事です。 var s1 = ["【", "】"];
C++スレで質問すればいい
CStringListのがいいよ
初心者なら素直に本でも買って勉強しろ ろくに勉強もしないで人に聞くのは感心しない
>>11 C++スレ行ってみます。
>>12 vectorであるのかなと思いまして。
質問です。 システムフックによって任意のウィンドウを操作するプログラムを作成しているのですが、 以下のウィンドウクラスのウィンドウを移動、リサイズすることができません。 ・afx:... ・WTL:... ・TApplication WM_CREATEメッセージをフックしているのですが、他のメッセージを処理する 必要があるのでしょうか?処理対象のウィンドウが間違っているのでしょうか? 開発環境はVC++ 2008 Express Editionです。WindowsXP SP3で動作確認しています。
スタイルとか属性とか調べるものがあるだろ
17 :
15 :2008/08/02(土) 19:27:39
WM_CREATE以外で動けばメッセージがまずい WM_CREATE以外でも動かなかったら処理対象のウィンドウがまずい
19 :
15 :2008/08/02(土) 19:57:25
>>18 レスありがとうございます。
WM_SIZEメッセージをフックするようにしたところ、afx:...とWTL:...の操作に成功しました。
しかし、TApplicationの操作に失敗します。
>>15 たしかTApplicationではなく、そいつをオーナーにしているウィンドウが
実際に画面に表示されているウィンドウのはず。
21 :
15 :2008/08/03(日) 01:48:33
ウイルス
割れ厨
26 :
22 :2008/08/04(月) 22:26:50
すでに手遅れだから気にしなくていい
28 :
22 :2008/08/04(月) 23:11:06
>>27 分かりました
ありがとうございます。これで夜もぐっすり眠れます
29 :
デフォルトの名無しさん :2008/08/05(火) 17:59:55
ピクチャボックスに表示してある画像をファイルに保存するのは、どうすればいいのでしょうか?
>>29 望む画像形式のデータを構築して、ファイルをopenしてwriteする。
31 :
デフォルトの名無しさん :2008/08/05(火) 20:30:10
エディットボックスに数字以外入力できない様にするにはどうすればいいんでしょうか? タイプはCString型です。
32 :
デフォルトの名無しさん :2008/08/05(火) 20:38:49
C++初心者が1番最初に作ってみるといいプログラムって何ですか?
キー入力見て数字以外は無視 コピペされたら数字以外除去
ES_NUMBER
36 :
デフォルトの名無しさん :2008/08/06(水) 00:14:36
いまVisualc++2005でウィンドウアプリケーションの勉強してるんですが、 HWND hWnd や HINSTANCE hCurInst とは int a みたいな感覚でいいんでしょうか?hWnd、hCurInstのところは自分で勝手に変えられるのでしょうか?
おお、そうなんですか。モヤモヤが晴れましたどーもです!
40 :
デフォルトの名無しさん :2008/08/06(水) 09:59:26
スピンボタンを使いたいんですけど、数値の自動関連付けと自動表示を使わずに、 エディットボックスの文字列をOnDeltaposSpin1関数 内で取得して変数に変換してこの値にスピンボタンを押したとき エディットボックスの文字列の値が指定しただけ増えるというような 設定にしたいのですがOnDeltaposSpin1関数でエディットボックスの 文字列を取得する方法がわかりません。 どうか教えてください。
GetDlgItem(IDC_xxx)->GetWindowText() ていうか、エディットボックスの文字列、普段どうやって取得してるの?
UpdateData(TRUE)
あー、そんなのあったね
44 :
デフォルトの名無しさん :2008/08/06(水) 10:46:20
うまくいきましたありがとうございます。
45 :
デフォルトの名無しさん :2008/08/06(水) 17:09:05
ダイアログ上にエディットボックスとボタンがあって、ボタンを押すと エディットボックスに表示されている文字列が保存されるという事をやりたいんですが、 inifileを使えばいいらしいんですけど調べてみても使い方がよくわかりらないので 教えて下さい。お願いします。
46 :
デフォルトの名無しさん :2008/08/06(水) 19:01:52
VisualC++2005でWindowsフォームアプリケーションを選択してソースを覗いたのですが、 Application::EnableVisualStyles() #include "stdafx.h" using namespace System; using namespace System::Reflection; using namespace System::Runtime::CompilerServices; using namespace System::Runtime::InteropServices; using namespace System::Security::Permissions; この様な中身になっているのですが、これは何の言語なのでしょうか?C、C++? 初めて見る形なので戸惑ってます・・・
C++/CLI というやつです。
つーか、その部分だけなら普通にC++だけどなw
C++なんすか!すんませんCしかやったことなかったんです・・・どうもっす!
_itoa_s _i64toa_s _ui64toa_s の違いがわからんのですが int long int unsigned long int に対応したitoa という認識でおKですか?
64ビットCPUバージョン
まじすか・・・ようやくCを覚えてきたのに、この先不安じゃ・・
VC++2008でPathFileExistsを使う前と使った後で GetProcessMemoryInfoでヒープメモリを比べてみた所、 ファイルサイズ分?メモリを消費していました。 PathFileExistsの後にこの分のメモリは解放できないのでしょうか。
shlwapi.dllを逆アセして調べる
いちいち解放してると効率悪いから、わざと解放しない場合もあるし プログラムがおわった時点で解放されてれば問題なし
なるほどです。 ファイルを読み込ませる時のチェックに使っているので、 その度にメモリへ蓄積されていってくのですが、 こちらは気にしなくても良いのでしょうか。
プログラム終了までにメモリ不足にならない保証があるならいいんじゃない?
ファイルを沢山読み込ませるような事をすると不足になる可能性が…。 そういった場合はどうすればいいのでしょうか。
PathFileExistsに問題があったら他でも問題になってるはずだから PathFileExistsには問題がなくてお前のプログラムに問題があるか、 全然問題ないのに単なる妄想でいらない心配してるかのどっちかだろ
61 :
デフォルトの名無しさん :2008/08/07(木) 13:54:56
すいません上書き保存ってどうやるんですか? ↓のような保存ボタンと読み込みボタンを作って保存して読み込みしたら、 読み込みには成功したんですけど、もう一回保存を押して読み込みを押しても、 一回目の値が表示されます。 TCHAR szIniFile[MAX_PATH+1]; LPCTSTR szSection; GetModuleFileName( NULL, szIniFile, sizeof(szIniFile) ); for (int i = _tcslen(szIniFile) - 1; i >= 0; i --) { if (szIniFile[i] == _T('\\')) { szIniFile[i + 1] = _T('\0'); break; } } _tcscat(szIniFile, "setting.ini" ); szSection = _T("No"); WritePrivateProfileString(szSection, _T("No.1"), m_ed, szIniFile);
>>61 それだけ書かれても原因はわからん。
そこ以外に問題があるんじゃないの?
63 :
デフォルトの名無しさん :2008/08/07(木) 14:23:52
さっきのが保存ボタンのソース全部で読み込みボタンはこれでエディットボックスに 表示する文字列を扱ってます。なにか 指定先にすでにファイルがある場合消去して書き直すような方法はないでしょうか? ほかの部分が問題っていうのはもっとほかの部分なんでしょうか? TCHAR szIniFile[MAX_PATH+1]; LPCTSTR szSection; char tmp[6]; GetModuleFileName( NULL, szIniFile, sizeof(szIniFile) ); for (int i = _tcslen(szIniFile) - 1; i >= 0; i --) { if (szIniFile[i] == _T('\\')) { szIniFile[i + 1] = _T('\0'); break; } } _tcscat(szIniFile, "setting.ini" ); szSection = _T("No.1"); GetPrivateProfileString(szSection, _T("No.1"), _T("0"), tmp, sizeof(tmp), szIniFile); SetDlgItemText(IDC_EDIT1,tmp);
実際にiniファイル直接開いて中見てみりゃいいじゃん。 VistaでProgram Files の中で実行してる、とかじゃないだろうな? あまりiniファイルお勧めしないけどな。
65 :
デフォルトの名無しさん :2008/08/07(木) 16:00:37
なんかいろいろいじくってたらよく分からないけど上書き保存できるようになりました。 アドバイスしてくれた皆さんありがとうございました。 イニファイルのなかってメモ帳みたいですね。 いろいろじくってたせいでいろんな値が入ってました。
66 :
デフォルトの名無しさん :2008/08/07(木) 16:01:26
ていうかメモ帳って書いてありました。 すいません。
67 :
デフォルトの名無しさん :2008/08/07(木) 16:53:48
コンボボックスの使い方で コンボボックスの選択位置を読み取るには、 int n=comboBox1->SelectedIndex; を用いる。一番上が選ばれている場合は、n=0になる。 って書いてあったのでそのままコピペしたら comboBox1定義されていない識別子です SelectedIndex左側がクラス、構造体、共用体へのポインタではありません。 ってエラーが出てきたんですけどどうしたらいいんですか?
>>67 環境は?
FormならComboBox貼り付けたらデフォルトでそういった名前になってると思うが。
MFCなら右クリックで変数の追加、Win32APIならもうちょっと別な方法になる。
69 :
デフォルトの名無しさん :2008/08/07(木) 17:11:16
レスありがとうございます。 VC++6.0のMFCで作ってます。
71 :
デフォルトの名無しさん :2008/08/07(木) 17:24:15
保存ボタンと読み込みボタンとコンボボックスとエディットボックスを使って、 コンボボックスはドロップダウンリスト形式にして、 リストが1.2.3.の三つを作ってドロップダウンリストから1を選んでから 保存ボタンを押すと1にエディットボックスのデータが保存されて、 2を選んでから保存ボタンを押すと2番に保存される、 読み込みボタンの方も同様に1を選んで読み込みを押すと1のデータが読み込まれる、 といったプログラムを作りたいんです。 それでコンボボックスをダイアログに貼り付けてOnSelchangeCombo1() という%
72 :
デフォルトの名無しさん :2008/08/07(木) 17:25:09
保存ボタンと読み込みボタンとコンボボックスとエディットボックスを使って、 コンボボックスはドロップダウンリスト形式にして、 リストが1.2.3.の三つを作ってドロップダウンリストから1を選んでから 保存ボタンを押すと1にエディットボックスのデータが保存されて、 2を選んでから保存ボタンを押すと2番に保存される、 読み込みボタンの方も同様に1を選んで読み込みを押すと1のデータが読み込まれる、 といったプログラムを作りたいんです。 それでコンボボックスをダイアログに貼り付けてOnSelchangeCombo1() という関数を追加したんですがここからどうしたらいいのか分からなくて困ってます。 初心者でよくわからないので教えてもらえたらありがたいのですが。 保存ボタンと読み込みボタンはなんとか作りました。 ひとつしかデータセーブ出来ませんけど。
73 :
デフォルトの名無しさん :2008/08/07(木) 17:28:51
>70さん レスありがとうございます、試してみます。
VC++6.0久しぶりに触ってみたけど、 変数の追加の部分は、右クリックでClassWizard...選んでメンバ変数から 該当のコントロール選んで変数の追加でカテゴリをコントロールにする、だな。
75 :
デフォルトの名無しさん :2008/08/07(木) 17:32:29
70さんに教えてもらった方法を試したら値がとれました! ありがとうございます。
76 :
デフォルトの名無しさん :2008/08/07(木) 17:58:35
値は取れたのでこの値を使って if(m_combo1.GetCurSel==0){0の場所に保存する} という感じだと思うのですが、 すいません実は61からの質問全部僕のなんですけど、保存する場所を変えるにはszSection を変えれば良いんですかね。 コンボボックスの関数追加しなくてもよかったのかな? どうもわかりません、教えてもらえないでしょうか?
iniファイルは、 [section1] key1=param1 という形式。 同じ項目ならkey1を増やせばいいし、カテゴリ増やすならsectionかえればいい。}
78 :
デフォルトの名無しさん :2008/08/07(木) 18:47:15
ありがとうございます。 がんばってみます。
79 :
デフォルトの名無しさん :2008/08/07(木) 20:14:50
おかげさまで保存ボタンの方は3つの場所に分けて保存する事が出来たっぽいんですが、 読み込みボタンで1番以外を選んで読み込むとフフフフフフフフとか出てきて 上手く読み込めません。 これはどういった現象なんでしょうか?
81 :
デフォルトの名無しさん :2008/08/07(木) 20:51:42
そうですフフフフフフフフフフフフです、 でもフフフフフフフフフが一瞬表示されてから、規定の範囲内の値を入れてください、 って警告が出た後、ちゃんと2番目のデータが表示されるんです。 なんで一番目だけうまくいくのか不思議です。
charは1バイトだから8ビットときいたのですが 0〜255までの数値を入れることができるということですよね? charに数値を入れるにはどうしたらいいですか?
そのまま普通に数値を代入すれば良い
84 :
デフォルトの名無しさん :2008/08/08(金) 04:56:56
お世話になります。 C++で質問です。 Visual c++ 2008で勉強中です。 ヘッダーファイルの使い方をお聞きします。 ある本のCDについていたコードなのですが、 hoge.h hoge.cpp というファイルがありました。 ヘッダーファイルにはクラスの定義しか書いていなくて、 cppファイルにそのクラスで利用する関数の中身が書かれていました。 自分はこのままでは、ヘッダーファイルをincludeしても利用できないと考えています。 でも、上記のヘッダーファイルをincludeしたファイルを動かすことができます。 何故上のようにかけるのでしょうか? また、ヘッダーファイルにはクラス定義しか書かなくて、 そのメンバ関数の実装はヘッダーと同名のcppファイルに記述するのが現場ではいいとされているのでしょうか? 「お前これ分かってないからここ調べろ」という意見もぜひお願いします。 誰かに聞くことができない状態なので、ものすごく助かります。 お願いします。
85 :
デフォルトの名無しさん :2008/08/08(金) 05:32:05
VISUALC++に限った話ではないのですが、これを勉強してて思ったのでちょっと質問させてください。 アプリ開発の際は、メモリをどう考えるのでしょうか? たとえばPS1だとVRAMが少ないから格闘ゲームには不向きだ、セガサターンの方が向いてる、みたいな話を見たことがあるのですが 大規模な開発をする場合は、メモリはかなり重要な問題なのでしょうか? 今まではCでソートだとか入出力みたいな勉強しかしてこなかったので、進んでいくうちに疑問がわいてきました。 できればレスお願いします・・・
ヘッダファイルってのは要するにこんな関数 まあこの場合クラスだけど、どこかにはありますよと言う宣言だから そのヘッダファイルをインクルードして実装している ソースファイルがきちんとあれば 他では宣言だけ見て存在だけ知ってれば使える あと現場では良いとかじゃなくて普通そうするもの
そんなのはメモリを相当喰うようなプログラムを作る時に考えれば良いんじゃない?
88 :
デフォルトの名無しさん :2008/08/08(金) 05:52:30
>>86 ヘッダーについて回答ありがとうございます。
なるほど。では、ヘッダーは1つで、実装してるcppが2つある、
ということもあるのでしょうか?
ヘッダーを利用するプログラムによって、そのcppを切り替えたりすることができそうな
気がしいるのですが、そんなことってありますか?
89 :
デフォルトの名無しさん :2008/08/08(金) 06:27:20
VC++で質問です。 開発する際、ソリューションエクスプローラの使い方がいまいち分かりません。 たとえば電卓をGUIで作るとき、どのようなプロジェクト構成になりますか? ■予想1 ソリューション電卓 電卓プロジェクト ソースファイル ○GUIソース、処理ソース ヘッダーファイル ○(必要なもの) リソースファイル ○(なし) それとも、 ■予想2 ソリューション電卓 GUIプロジェクト ソースファイル ○GUIソース ヘッダーファイル ○(必要なもの) リソースファイル ○(なし) 処理プロジェクト ソースファイル ○処理ソース ヘッダーファイル ○(必要なもの) リソースファイル ○(なし) 予想2のように、モジュールごとにプロジェクトを作成するのものなのでしょうか?
>>84 cpp はコンパイルして obj になるだろ。
関数そのものは、このobjとリンクして使えるようになるんだよ。
その関数の使い方が書いてあるのがヘッダだし、
1つ以上のobjをまとめたものが lib ファイル。
>>85 そのソートだって、膨大なデータをソートするとなると
オンメモリでできるのかどうかが重要になるでしょう。
ゲームで問題になるのは、リアルタイムで動作させなくちゃならないから、
できる限りオンメモリにしておく必要があるからな。
>>89 モジュールごとにプロジェクトを作成する。
けど、上記のモジュールってできあがるファイルのことよ。exeとかlibとかdllとか。
もんの凄い強力な電卓でなければ、普通はGUIと計算を別モジュールに分けないでしょうね。
「分けるのが目的なんだ」ってことならば、分けるのは可能です。
93 :
デフォルトの名無しさん :2008/08/08(金) 15:30:49
>>90 >>92 回答ありがとうございます。
どうやらC++でのプログラムの作り方自体自分はよくわかっていないようです。
何か勉強になるサイトや本、見るとためになるようなものがあれば教えていただけませんか?
習うより慣れろ
>>83 ありがとうございました
charに数値を入れることができました
ひょっとしてcharを配列にすると8Bit以上の数値を入れることもできますか?
なぜ試さないの?
>>85 分野にもよる。
家庭用ゲーム機は全体的にメモリが(同時期のPCと比べ)少ない場合が多いというだけ。
だからその分上手にやりくりしないといけない。
PCやサーバだとあまりそういう話は聞かない。無駄遣いは忌避されるべきだがそこまでシビアにはならない。
使えるメモリは有効に使うべき。ってのがVista
>>85 PSとサターンで同じゲームを作ったときは
どの文字を使うかってのも気を使ってた
同じシーンで使う文字種を減らしてフォント絵のメモリ節約とか
音源仕様の差は面倒だったなぁ
101 :
デフォルトの名無しさん :2008/08/09(土) 16:46:11
ここにはゲーム製作者もいるのかお
ゲームってどうやって作ってたん? キャラ動かしたりするのは元データがあって、それをプログラマーが動かしてたの? プログラマーによって綺麗な画面になったり汚い画面になるとか聞いたことがあるが。。。。。。わからん
ゲームとか今の話なのか昔の話なのかでかなり変わりそうだが
昔のゲームのハードを調べるのがいい
今の3DゲームはMAYAとかでモデリングした後に、そのデータを使ってフィールド上で動かすの? それだとリアルタイムレンダリング?だからプログラマーの腕が問われるのかね。スレチだな
106 :
デフォルトの名無しさん :2008/08/10(日) 16:47:15
C++で自分だけのライブラリーのようなものを作るにはどうやって 作っていったらいいのですか? ソリューションライブラリーのようなものを作って、 プロジェクトごとにヘッダーを1つずつ作ればいいのでしょうか?
107 :
デフォルトの名無しさん :2008/08/10(日) 19:04:48
106よろしく!
108 :
デフォルトの名無しさん :2008/08/10(日) 20:18:28
Visual C++ 2008 Express Editionで、本に書いてある通りに ファイル → 新規作成 → プロジェクト → Win32プロジェクト → アプリケーションの設定画面で「空のプロジェクト」にチェック プロジェクト → 新しい項目の追加 → C++ファイル(cpp) として、ソースファイルに #include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR 1pCmdLine, int nCmdShow ) { return 0; } というプログラムを書いて「ソリューションのビルド」をしたところ、 1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------ 1>コンパイルしています... 1>test.c 1>c:\source\test\test.c(6) : error C2059: 構文エラー : 'サフィックスが無効です。' 1>c:\source\test\test.c(6) : error C2143: 構文エラー : ')' が '定数' の前にありません。 1>c:\source\test\test.c(6) : error C2143: 構文エラー : '{' が '定数' の前にありません。 1>c:\source\test\test.c(6) : error C2059: 構文エラー : '<不明>' 1>c:\source\test\test.c(8) : error C2059: 構文エラー : ')' 1>ビルドログは "■■■■" に保存されました。 1>test - エラー 5、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== となって失敗してしまいました。 全て本に書いてある通りに行ったつもりなのですが、何がいけなかったのでしょうか。 使用OSはWindows Vistaなのですが・・・
1pCmdLineがいけない
変数名の先頭って数字は使えなかったんじゃなかったっけ?
112 :
デフォルトの名無しさん :2008/08/10(日) 22:25:33
106も答えてください
自分がよそのlib使うときを考えたらわかるべ
>>106 あまりしつこいと教えてくれないよ。
プログラマとはそんな性分の奴が多いw
115 :
デフォルトの名無しさん :2008/08/11(月) 00:29:37
>>106 ここで聞いても自分で使う暮らすライブラリこりこり作ってる殊勝な人間は少ないから無駄
116 :
デフォルトの名無しさん :2008/08/11(月) 05:49:57
そうなのか。
117 :
デフォルトの名無しさん :2008/08/11(月) 06:03:37
そうなのだ。
118 :
デフォルトの名無しさん :2008/08/11(月) 06:18:01
int型整数の下三桁を抜き出したいんですが、 どうやったら効率的ですか? a=123456 とあったら、 b=456 って感じに抜き出したいんですが。 私が考えたのでは、 b=(a%10); a/=10; b+=(a%10)*10; a/=10; b+=(a%10)*100; a/=10; というのなんですが、もっとスマートなやり方ってありますか?
y = x % 1000; じゃいかんのか?
% 10がわかってて % 1000 が出てこないとはw
前後ってなんだよ。 TrackPopupMenuの前でSetForegroundWindowしてる? どうしてもおかしいままなら、その部分のコード出してごらん。
123 :
121 :2008/08/11(月) 15:17:09
>>122 レスありがとうございます。
以下がフックプロシージャです。
LRESULT CALLBACK MouseProc(int p_iCode,WPARAM p_wParam,LPARAM p_lParam)
{
COPYDATASTRUCT stCopyDataStruct;
MOUSEHOOKSTRUCT *pstMouseHookStruct = (MOUSEHOOKSTRUCT *)p_lParam;
if (p_iCode == HC_ACTION
&& p_wParam == WM_NCRBUTTONUP
&& pstMouseHookStruct->wHitTestCode == HTMAXBUTTON) {
stCopyDataStruct.dwData = 0;
stCopyDataStruct.cbData = sizeof(MOUSEHOOKSTRUCT);
stCopyDataStruct.lpData = pstMouseHookStruct;
SendMessage(g_hWnd,WM_COPYDATA,0,(LPARAM)&stCopyDataStruct);
return TRUE;
}
return CallNextHookEx(g_hHook,p_iCode,p_wParam,p_lParam);
}
124 :
121 :2008/08/11(月) 15:17:43
以下が本体のウィンドウプロシージャです。 LRESULT CALLBACK WndProc(HWND p_hWnd,UINT p_uiMsg,WPARAM p_wParam,LPARAM p_lParam) { COPYDATASTRUCT *pstCopyDataStruct = (COPYDATASTRUCT *)p_lParam; HMENU hSubMenu; // ポップアップメニューのハンドル MOUSEHOOKSTRUCT *pstMouseHookStruct = pstCopyDataStruct->lpData; switch (p_uiMsg) { case WM_COPYDATA: hSubMenu = CreatePopupMenu(); AppendMenu(hSubMenu,MF_STRING,0,TEXT("MenuItem")); SetForegroundWindow(pstMouseHookStruct->hwnd); TrackPopupMenu( hSubMenu,TPM_NONOTIFY, pstMouseHookStruct->pt.x,pstMouseHookStruct->pt.y, 0,p_hWnd,NULL); PostMessage(pstMouseHookStruct->hwnd,WM_NULL,0,0); DestroyMenu(hSubMenu); break; default: return DefWindowProc(p_hWnd,p_uiMsg,p_wParam,p_lParam); break; } return 0; }
125 :
デフォルトの名無しさん :2008/08/11(月) 15:27:15
MSDNライブラリでprintf関数の説明を読んでみると、以下の記述があります。 ---------------------------------------------------- ライブラリ LIBC.LIB シングルスレッド スタティック ライブラリ、リテール版 LIBCMT.LIB マルチスレッド スタティック ライブラリ、リテール版 MSVCRT.LIB MSVCRT.DLL 用インポート ライブラリ、リテール版 ---------------------------------------------------- このことから、printfにはスタティックライブラリの版とDLLの版がある ということが分かります。 そこで質問なのですが、僕が作った"Hello, World"プログラムは printf関数をスタティックに.exeにリンクしているんでしょうか? それとも.exeにはprintf関数は含まれていなくて、実行時にprintf関数 を含むDLLがロードされてそれを呼び出しているんでしょうか? どうやったら確かめることができるのかを含めて教えてください。
>>125 プロジェクトのプロパティの「C/C++」の「コード生成」の「ランタイム ライブラリ」で指定する。
127 :
デフォルトの名無しさん :2008/08/11(月) 18:53:08
keybd_event使って特定キーが押されてる間処理を繰り返したいのですが voidだからwhileの条件式に入れれませんでした。 どうすればいいのでしょうか
128 :
125 :2008/08/11(月) 19:25:58
>>126 なるほど。オプションで指定するんですね。ありがとうございました。
#include <iostream> #include <vector> #include <windows.h> #include <psapi.h> #pragma comment(lib, "psapi.lib") int WorkSize(void){ PROCESS_MEMORY_COUNTERS info; GetProcessMemoryInfo(GetCurrentProcess(),&info,sizeof info); return info.WorkingSetSize; } using namespace std; int pm=WorkSize(); void MyFunc(){ vector<string> vec; for(int i = 0; i < 1000000; i++) vec.push_back("abcdefghijklmnopqrstuvwxyz"); cout<<WorkSize()-pm<<endl; } int main(){ cout<<WorkSize()-pm<<endl; MyFunc(); cout<<WorkSize()-pm<<endl; system("pause"); return 0; } VC++2008でvector+stringを使ったらメモリ解放しきれてないみたいなのですが、 これはちゃんと解放しきる事は出来ないのでしょうか。
130 :
デフォルトの名無しさん :2008/08/12(火) 14:21:54
すいませんVC++6.0のMFCでCSVファイルを作るにはどうすればいいですか?
>>129 std::vectorは一度確保したメモリはデストラクタを除き
自動的には解放されない。
どうしてもやりたいならswap技法を。
vec.swap(std::vector<std::string> >());
vec.swap(std::vector<std::string>()); もしくは std::vector<std::string>().swap(vec); だった
>>130 CSVといっても、所詮はテキストデータ
"123,456,789"
とういテキストデータで、ファイル化してみれば分かる
拡張子csvだと尚良し
今乗り換えというかなれておかないと大変だと思うよ。 俺は趣味でやってるからいいんだけど。
>>132 それをMyFuncの最後に書いてみたのですが、結果は変わらず…。
使い方が間違っているのでしょうか。
↓メモリ表示結果
0
68435968
7213056
freeしてもOSにメモリが返されるわけではないし、 ワーキングセットなんてプログラム上の確保した量とはあまり関係がないし。
>>132 前者はダメだ。
非constな参照引数に一時オブジェクトは渡せない
138 :
デフォルトの名無しさん :2008/08/12(火) 17:51:38
質問させてください。 WINAPIでは、戻り値にTRUEかFALSEを多用している様に思うのですが、これは0か0以外の数値を 表しているのでしょうか? たとえばマウスの左ボタンをクリックして、クリックされたら数字の1、されなかったら0を返す、という事? いまいちイメージが掴めないのですが、0以外の数字が返された場合はその関数を正常処理する、という感じですか?
MBCSの場合charに1バイトと2バイトの文字を混ぜた文字列を設定したとき char[x]が1バイト文字か2バイト文字の前か後ろかを見分ける方法はありますか?
>>138 あまり気にせず、結果をif文その他の条件判断で使える、位に思っていればいい。
>>140 そうなんですか
なんかしっくりこなくて戸惑ってました。ありがとうございます
>>139 MBCSの文字コードによるが、SJISだと前にさかのぼらないと判断できない。
UTF-8だと、1バイト文字か、2バイト以上の1バイト目かそれ以降かの判断はつく。
143 :
デフォルトの名無しさん :2008/08/12(火) 18:39:10
今、猫でもわかる〜を見て勉強しているのですが @ // timer.h #define IDM_END 1000 #define IDM_OPTION 2000 #define IDC_STATIC 3000 A// Dialog OPTDLG DIALOG DISCARDABLE 0, 0, 121, 69 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "オプション" FONT 9, "MS Pゴシック" BEGIN DEFPUSHBUTTON "OK",IDOK,7,38,50,14 PUSHBUTTON "キャンセル",IDCANCEL,61,37,50,14 LTEXT "オブションです。",IDC_STATIC,36,19,48,8 END の、1000や0, 0, 121, 69といった数字の部分がわかりません・・・。 @とAでは数字の意味が違うと思うのですが、@の数字は適当に決めていいのでしょうか? Aは何か決まりごとが?
>>142 つまり、コードによるけどふつうの1バイト文字と同じものが2バイトの前か後ろに
出る可能性はあるということですね
2バイト文字に含まれない文字ってないですかね〜
区切り文字として都合のいい文字を探してます
>>136 なるほどです、ありがとうございました。
>>144 所謂ShiftJISの2バイト目には、(単独なら)アルファベットと同じ文字コードも来れば1バイト目と同じコードも来る。
従って、前に遡って判定するか素直に頭から判定するか、対策が必要。
尤も、0x40未満のコードはShiftJISに使われないので'/'でも';'でも区切りに使えなくはないと思う。
>>143 1の数字は、同じカテゴリでかぶらないようになってれば適当で良い。
2は、ダイヤログの大きさ。後ろ二つが幅と高さ。適当に変えてみるとわかるよ。
>144 タブコードはダメ?
>>146 0x40以下のコードを調べてみようと思います
ありがとうございました
>>148 タブとか改行コードとか使うのが無難ですかねやっぱり
Visual C++ 2005を勉強中なのですが、TRACEマクロ(ATLTRACEマクロ)で ユニコード文字列(*wchar)を出力しようとして、フォーマット文字列に"%S"と 指定したら、実行時にライブラリ内のASSERTで引っかかって止まってしまいます。 TRACE出力にユニコード(漢字)文字列を出力するには、どうすれば良いのでしょうか ?
>>147 助かります、どうもありがとうございました。早速やってみます。
USBから受信したデータをキー入力に変えたいのですが パソコンのキーボードでキーを入力したときに送られるメッセージってなんですか? ソフトでこのメッセージを送ればキーボートと同じようなものも作れますか?
USBから受信したでーた? キー入力フックして入力内容をだますってことか? それともソフトがキーが入力されたように振舞うってことか? それなら最悪DDKとかめんどくさいのに手を出さないとだめかもな どっちにしても何が言いたいのかよくわからん エスパーな人よろしく
別に受信するほうはすでにあるんだろ。 キーを送るのはウィンドウに限ればメッセージ送るだけでいいかもしれない。
オートマウスでも作る気か? MMORPGとかで不正行為する用か、三国人!
156 :
デフォルトの名無しさん :2008/08/14(木) 16:24:45
初心者の妄想質問です。 例えば、1つのアプリケーションなのですが扱う機能が違う為に2つのウィンドウを開いて同時に使う、という場合には どのようにしたらいいのでしょうか? 同じプロジェクト内ではなく、別々のプロジェクトでソースを書いていかなくてはならないのでしょうか? またその際は、ハンドルの名前も別々にしなくてはならないのでしょうか?
>>156 「一つのアプリケーション」が「一つの実行モジュール」を指すなら、逆に寧ろプロジェクトは一つにしないと(一般的には)ダメ。
一つのソースで複数のウィンドウの面倒を見るか、別のソースに分けるかは、使用するライブラリ次第。
# まぁ、普通分けるだろうけれど。
つーか、扱う機能が違うのに「一つのアプリケーション」にする理由がないなら分けた方が使い易くないか?
>>152 ゲームパッドの入力をキー入力に変えたいのか?
だったら無理せずJoyToKey使え。
>>153 PICとPCをUSBで接続していて、親指先が+で他4本が−のスイッチで組み合わせによるPCへのキー入力をしたいのですが、
PICまではできてるんですが、PCのキーボードでキーを押した時と同じようにPC上に送出する関数というかメッセージというか流れが知りたいのです。
>>154 その辺の流れがちょっとわからないのですが、キーダウンメッセージはアクティブなウィンドウに対して受取分岐がソフト上にある場合に機能するもの
なんですよね。キーが押されたメッセージ事態を作り出すにはどうすればいいんでしょうか?
Visual C++ 2008 Express Editionを落としてインスコしてて、諸事情でアンスコしてインスコし直そうと思ったのですが どれをアンスコすればいいのかわかりません C++をアンスコすれば全てアンスコされるのではなく、C++と一緒に複数同時にインスコされてました それぞれ個別にアンスコしないといけないようです C++ アンスコでぐぐっても的したページがヒットしません どれを消すべきかわかる方いましたらお願いします
アクティブじゃなくてフォーカスのあるウインドウ
アンダースコートがどうしたって?
アポリケーションの追加と削除で、VCEEとインストロール日時が同じで、見覚えの無いやつを全部消しちゃえば?
SQL Server CompactとWindows SDKとあと何があったっけ?
>>161 Microsoft .NET Framework 3.5
Microsoft .NET Framework 3.5 Language Pack - 日本語
Microsoft Visual C++ 2008 Express Edition - 日本語
Microsoft Windows SDK for Visual Studio 2008 Express Tools for .NET Frameword
Microsoft Windows SDK for Visual Studio 2008 Express Tools for Win32
Microsoft Windows SDK for Visual Studio 2008 Headers and Libraies
MSDN Library for Microsoft Visual Studio 2008 Express Edition
Microsoft Silverlight
167 :
161 :2008/08/15(金) 09:12:27
(TдT)アリガトウございました無事インスコ出来ました
168 :
121 :2008/08/15(金) 16:16:15
これまではC言語の学習用にEmacsを使用していたのですが、今回VisualStudio2008を購入しました。 そこで質問なのですが、VisualStudio2008にはEmacsのようにtabキーを押したときに必要なだけ字下げする機能がありますか?
複数行選択時の、TAB、ShiftTABの動作が近い?
>>169 とりあえずキーバインド設定は変更したのか?
ちょっと質問があります。 std::cout << std::toupper('a') << '\n'; std::cout << toupper('a') << '\n'; この二つは何か違うのでしょうか? 上のやつは #include <cctype> しないといけないようだが・・・
173 :
169 :2008/08/16(土) 21:20:11
キーバインド Visual Studioで検索したらやり方がわかりました。 どうもありがとうございました。
174 :
169 :2008/08/16(土) 22:53:11
インデントはEmacsのようにできるのですが、 データの保存など他のキーの設定もEmacsのものになってしまいました。 インデントだけをEmacsのものにする方法はありますか?
そうきたか、 コマンド検索のとこに「インデント」っていれて 適当なコマンドと設定を入れ替えろ あと、プログラマ志望なら 今のうちにEmacs操作覚えた方が良いぞ、楽だから vi派って訳じゃないんだろ
( ´д)ヒソ(´д`)ヒソ(д` )今時Emacsだって・・・
最近の流行はなんなんだ?
178 :
デフォルトの名無しさん :2008/08/17(日) 06:58:46
スレ違いかもしれませんが、教えてください。 Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)をダウンロードしてきて インストールしたのですが、インストールディレクトリが”一番空き容量が多いドライブの直下”に インストールされてしまいます。これは仕様なんでしょうか?
テンポラリ展開じゃなくて?
>>179 一時ファイルのようで、展開されたファイルは削除しても問題ないっぽいです。
お騒がせしました
181 :
デフォルトの名無しさん :2008/08/17(日) 13:53:54
Visual C++ 2008 Express Editionで、 ファイル → 新規作成 → プロジェクト → Win32 コンソールアプリケーション プロジェクト → 新しい項目の追加 → C++ファイル として、 stdio.hをインクルードして文字列を表示させる簡単なコードを書いて実行したのですが、 コマンドプロントみたいなウィンドウが一瞬開いてすぐに閉じてしまったため 文字列をよく確認出来ませんでした。 どうしたら開いたままにしておけるのでしょうか?
あるあるw どうするんだろ 出力ウィンドウにも何も出ない?
「○○を読み込みました」・「シンボルが読み込まれました。」 っていうのが4行と、 あともう1行、 「プログラム○○はコード0(0×0)で終了しました。」 っていうのが出ます。 コード0っていうのはreturn 0にしたからだと思うんですが…。
邪気眼がどーのこーの
>>181 同じく初心者で、昨日から始めたんですが
returnの前に、文字を入力する関数を入れることで対処してます。
Cだと
scanf("%d",n);
とかなんですが。
186 :
185 :2008/08/17(日) 15:38:07
ごめん。 今見たら scanf("%d",&n); でした。もちろん、先にnは宣言するものとして。 でもC++だと入力するための関数違うと読んだ気も。
Ctrl+F5でいいじゃね?
そうか、、、 とりあえず、 ・確認したいだけなんだったら、stderrでメッセージ出せる ・あと処理の最後に無限ループ入れる
全ての質問が初心者ではなく初心者を装った釣師によるものだと仮定して いかにうまくボケるかを競いあう ここはそういうスレの一つだと思い込んでいる
192 :
181 :2008/08/17(日) 16:30:01
193 :
デフォルトの名無しさん :2008/08/17(日) 16:42:45
dialogBoxにPostMessageしても届かないんだが、ちなみに PostMessage(hDlg,0x500,123,456); なぜだ?
お前ぜんぶ聞く気だろ 調子乗んな
195 :
デフォルトの名無しさん :2008/08/17(日) 20:53:27
アふぉはだまっとれ
>>185 getchar()でいいじゃん。わざわざ変数を用意する必要があるscanf()を使うのはナンセンスだ。
>>188 無限ループってあんた、エコじゃないな。
>>181 cmd動かしておいて、コマンドラインから動かすって手もあるよ。
昔から、return 0; の部分にブレークポイント置いている。 まあデバッグ必要ないときはCtrl-F5だが。
_findfirst("tes*.tx", &searchData) でファイルを検索した場合には test.tx は見つかり test.txt は見つかりません。 しかし、_findfirst("tes*.txt", &searchData) で検索した場合には test.txt も test.txtx も見つかります。 Q1. ドキュメントには書いてないのですが、この関数は拡張子を3文字しか見ないのでしょうか。 Q2. 4文字以上の拡張子に対応したファイル検索関数にはどんなものがありますか。
>>196 >getchar()でいいじゃん。
あらほんと。今度からこっち使います。
ありがとう。
VC使ってるならsystem("pause");でいいかと
変なクセつけちまうから getchar()で良いでしょ
>198 たしかWindowsが隠して格納してる8.3なファイル名がひっかかるんだな。 Short Filenameってやつ。findfirstしてあらためて排除するとか。
メソッド名の頭にアンダーバー付いてるのとか 何か意味があるのですか?
ありがとう
Dドライブに今までなかったファイルがいくつか作成されてる。。。 Eula.1041.txt globdata.ini install.exe install.ini install.res.1041.dll VC_RED.cab VC_RED.MSI vcredist.bmp しかも作成日時が2007年11月20日。 二週間ほど前にPC買い替えたばかりだからこの作成日時はおかしいと思う。 調べてたらvisualC++が関係してるっぽい。 これなに?
インストーラが一時ファイルを展開したんだろ。
VS2008のインストールしたんだろうな
インストーラって怖いな
やっぱりか 2005は初めから入ってたんだけど、これって勝手に更新したりするものなの? 2008なんてインストールした覚えがないし、気味わるいからアンインストールしたいんだけど。。
別に一時ファイルだし勝手に消せば? とりあえずそのファイル群は再配布可能なやつだと思うから なんかのソフトが必要としたんじゃないの? 2008というのは2007/11/20だからそう思ったんだけど。
なんかのソフトが必要としてるんならアンインストールしないほうがいいね。。
一時ファイルだけ削除しておく。
>>207-210 サンクス
> 2005は初めから入ってたんだけど、 VisualStudioプリインストールなんてどこで売ってるの?? > これって勝手に更新したりするものなの? しない。
visualstudioというのははいってなかった。 visualC++2005Redistributableというのが初めからはいってた。
それはランタイム。VCどころかパソコン初心者レベルの話になってきたな・・・
そのランタイムというやつは消しても問題ない?
消すな。最初から入ってたということは他のソフトが使ってる。
218 :
デフォルトの名無しさん :2008/08/20(水) 20:57:37
Visual Studio2003でWindowsプログラムを作ってるんですが、 よくバグってメモリリークしたり、既に解放済みのアドレスを解放したりしてます。 そういうのって、PCに悪影響は無いんでしょうか?
悪影響はあります
>>217 最初から入ってたのは2005。
今日気づいたら2008がインストールされてた。
まぁ気にしないことにする。
>>224 そんな設定どこにあった?
基本的にMFCを使うかどうかはヘッダのincludeとリンクするライブラリで決まる。
>>225 なるほど。MFCを使用するかしないかを変更することによって
リンクするライブラリやコード生成のオプションが変わるみたいです。
なのでMFCを使用するかしないかの設定はあくまで
テンプレートということですね。
やっぱウィザードに頼っているとだめっすね。
やべー なんかMFCマスターした気がする
おめでとう
ありがとう
オナニーマスター黒沢
>STLのstring型やwstring型は利便性においてはCString型にあるマルチバイトとユニコードの相互変換機能が無い分劣りますが、
>スレッドセーフである為classやtypedef内の変数に宣言するのに向いています。
>マルチスレッドで文字列を扱う際にはstring型かwstring型を使いましょう。
大嘘やん。標準にはスレッドの概念が無いし、スレッドセーフかどうかは実装依存になる。
CStringも使い方さえ間違わなきゃマルチスレッドで使える。
ttp://msdn.microsoft.com/ja-jp/library/h14y172e.aspx
なーんだ
charに0〜255の数値を設定することはできるようですが char[]にintやfloat等の数値を設定したり取得するにはどうすればいいですか?
union使うかビットシフトかキャストで。 目的による。
型について学び直せ。
文字列として受け取って変換するとかの話?
>>236 int i=1234;
char ic[50];
ic = (char[50])i;
こうですか?
キャストできませんでした
一体何がしたいんだ
冗談きつすぎるだろこれは…
int型をchar型に入れなきゃならない理由を述べよ。
>>239 あえてそういう風にキャストしたいのなら、例えば・・・
*(int *)&ic[0] = i;
とか
&と[0]は説明のためにあえて入れただけでなくてもいける
memcpyでいいじゃん
>>242 ネットでデータ送るときに、パケットサイズを固定長にしたいときとか
>>243 ありがとうございます。 下記のようにしたところ
int i=256;
char ic[50];
*(int *)&ic[0] = i;
char[]の最初の4バイトにそれらしい値が入るようになりました
int=32bit char=8bit なので期待通りの結果が得られてる ような気がします
これはcharの参照をintのポインタのポインタにキャストしてるんでしょうか?
char[]に入れることはできましたがintに戻すにはどうすればいいかわからんので
もっと勉強が必要なようです ありがとうございました
C++を仕事で扱い始めて自宅でも勉強したいと思っています。 そこで質問なのですがVISUAL STADIOの学生用の安いものとそうでないものとの間で機能に差はありますか?
>>248 C++の勉強よりも、英語を始めとした一般常識を身につけることをこそ、お勧めします。
>>248 仕事してるんじゃないのか?
なで学生用なんだ
経費で落とせないのか?
EEならフリーで学生じゃなくても手に入れられます。
EE(笑)
っGCC/G++/MINGW
254 :
248 :2008/08/24(日) 19:08:08
愚かなのでわかりません(´・ω・`) あくまで個人で勉強したいので…
gcc makefileのあたりからじっくり、やったほうがいい腕になるよー
>>254 Visual Studio 2008のAcademicはProfessionalと同じ。
だから、同じのが欲しければProfessionalを買え。
違うのがほしければそれ以外を選べ。
Visual Studio Express Edition でググれ と一言書いてやれば済むのに おまえらほんとに卑屈だな
258 :
248 :2008/08/25(月) 06:30:55
259 :
デフォルトの名無しさん :2008/08/25(月) 12:12:39
質問させてください・・・ www.geocities.jp/ky_webid/win32c/010.html このページの、 ・最初にクリックした点から、次にクリックした点までを結ぶ直線を描くプログラムを作って下さい。 という例題は、どの様に書いたらいいのでしょうか? if文を使うのかと思ったのですが、頭が悪くてswitch文とうまくあわせられません・・・ 大変申し訳ありませんが、どなたか教えてもらえないでしょうか?もうだめぽ・・・><
>>259 そのページを読んでいるのだから直線を描画するプログラムは作れるよね?
そのページの前提としてクリックした座標を取得するプログラムも作れるよね?
後は組み合わせるだけだから頭の良し悪しは関係ない。
dllのインクルードというかリンクの仕方を教えてください
262 :
デフォルトの名無しさん :2008/08/26(火) 00:52:05
久々にVC++(2008)を使っているんだけど、 構造体のデータを簡単に表示とかいう拡張機能 できたりしていない? マネージドじゃない状態で。 PHPとかPerlとかやってるとさ、print_r(オブジェクト)で オブジェクトのプロパティとか値がずらずら表示されて便利なんだよね。 標準のC++にないのはわかる。デバッグ用にそういう拡張 されてないかなぁと。 デバッガみれ? それしかないかな?
C++はイントロスペクティブでないから無理ぽ ってSteve Yeggeが要ってた。 pdb漁ってBinaryHackするとかしか思い浮かばないヨ
プログラム中なら、hoge.(ココでCTRL+SPACE) デヴァグ中なら、ローカル変数とかそういうの。 それ以外は知らん。
>>261 そのDLLに対応したインポートライブラリとリンクするか
実行時にAPIでロードして呼び出す。
インポートライブラリはDLL作成時にできるが、
DLLからLIB.EXE等を使って作ることもできる。
266 :
259 :2008/08/26(火) 14:17:55
すみません・・・マジで悪いみたいですオレは理解力がなさ過ぎる・・・
上記みたいな感じでいけるかと思ったんですが、error C2196: case の値 '513' は既に使用されています。
と出て動きません・・・ボタンクリックの1回目と2回目を分けるには、どげんしたらいいんでしょうか・・・
プログラム分けてコピペさせていただきます・・・
>>260 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
HDC hDC;
PAINTSTRUCT ps;
int x[2] = {0,0};
int y[2] = {0,0};
switch(msg)
{
case WM_LBUTTONDOWN:
x[0] = LOWORD(lp);
y[0] = HIWORD(lp);
return 0;
case WM_LBUTTONDOWN:
x[1] = LOWORD(lp);
y[1] = HIWORD(lp);
return 0;
267 :
259 :2008/08/26(火) 14:20:35
case WM_PAINT: hDC = BeginPaint(hWnd, &ps); MoveToEx(hDC, x[0],y[0],NULL); LineTo(hDC, x[1], y[1]); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, msg, wp, lp); } すんません下記みたいな感じ、でした・・
case WM_LBUTTONDOWN:が2個あるぞ。 どっちかはWM_LBUTTONUPの間違いだなんてことない?
>>266 case WM_LBUTTONDOWNが2個あったら、怒られるだろう
あと、それだとx[2], y[2]が、WndProc()抜けると消滅する
static int x[2] = {0,0};
static int y[2] = {0,0};
static int index = 0;
switch(msg)
{
case WM_LBUTTONDOWN:
x[index] = LOWORD(lp);
y[index] = HIWORD(lp);
index = index ? 0 : 1;
return 0;
WM_PAINTで、ボタンクリックが2回目以降のみ描画する・・・
とか、詰めなきゃいけないところは、まだあるけど
とりあえず、こんな感じでどう?
それ、いつまでもindexが0だと思うんだ。
と、入れ替えるのか、失礼
272 :
デフォルトの名無しさん :2008/08/27(水) 16:34:08
Visual C++ 2008 EE で、C++ではなくC言語を使うにはどうすれば良いのでしょうか
ソースファイルの拡張子を.cppから.cに変える
Visual C++ 2008で、フォームを複数使用しているのですが、 変数の値を他のフォームに渡すことは可能ですか?
可能です。
CodeBlocksでこれのVC++のコンパイル諸々を使うためにVisual C++ 2008 EEを入れたんですが コンパイル時にkernel32.libが開けないと言われます Visual C++ 2008 EEを標準でインストールした場合のkernel32.libの場所はどこでしょうか C:\Program Files\Microsoft Visual Studio 9.0\VC\lib 配下あたりだと思ったのですが そのあたり検索しても見つかりません
C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib
278 :
276 :2008/08/27(水) 23:33:57
ケースバイケース
アンケートの質問を複数のフォームに書いて、最終的にその回答 (はい、いいえ、どちらでもない)を質問のフォームとは別の フォームに出力したいと思っています。フォーム1の質問で集めた回答を それぞれの変数に入れ、その値をフォームに2にも引き継ぎ、変数にはフォーム1と フォーム2の値が入っているようにしたいのですが・・・教えていただけませんか?
受け渡しするpublicなメソッド書くとか、プロパティにして読み書きすればいいじゃん。 普通のことなのに、何がひっかかってるのかがわからん。
ご回答ありがとうございます。 プログラミングはC言語を2ヶ月ほどしか学んでいなく、 Visual C++ 2008 EEも使用して2日しか経過していない ので分かりませんでした。publicやメソッドの意味を 調べようと思います。
まずC++/CLIを勉強しないとな。 つか.NET使うんならC#の方がいいぞ。
.netつかうならどう考えてもC#のほうが… C++.net好んでつかってるやついるの? いたら何がいいのか教えて欲しいくらい C++のメリットドブにすててまで.netする意味がわからない
でもC++/CLIはマジで最強だよ
>>285 283のようなやつは時々現れるが、
単にC++→フォームアプリケーションでプロジェクト作っただけで、
好みではなく気付いていないだけだと思う。
C#はフリーの逆アセツールでソースが丸見えなのが嫌でC++使ってまふ
>>286 C++習熟してて
なおかつC#とかで.netつかってるなら
本当に最強かもしれんね
>>288 あとランタイム配布とかめんどくさいの考えると
本気で配布するソフトはあまりC#つかわないのよね
XNAのやる気のなさに絶望して近頃C++しかつかってない
C++/CLIは逆汗してもソースでないの?
やっぱVC++6.0が一番頭よさそうに見えるからつこてる
292 :
デフォルトの名無しさん :2008/08/28(木) 21:27:59
ライブラリとかじゃない、普通のプログラムをデバッグしようとしているのですが、 Debugging information for 'regsvr32.exe' cannot be found or does not match. Symbols not loaded. Do you want to continue debugging ? というメッセージが出ます。(開発環境は英語版のVC++9です) Yesを選択しても、 To register a module, you must provide a binary name. という メッセージが出て結局失敗します。 このエラーメッセージの意味は、regsvr32.exeを引数なしで呼び出したためだ というのは調べてわかったのですが、このあとどうすればよいのかよくわかりません。 ツールの中などで、regsvr32.exeを削除するような操作が必要なのでしょうか? regsvr32.exeはOLEコントロールを登録/解除するために使うらしい、というのも 書いてあったのですが、まったく意味がわかってません。 どうかよろしくお願いします。
regsvr32.exeをデバッグしてるって マイクロソフトの中の人ですか?
294 :
デフォルトの名無しさん :2008/08/28(木) 23:05:59
>>293 結構大きなフリーのライブラリのソースをダウンロードしてきてコンパイルしたのですが、
コンパイル終わって実行する前に、登録するために使うプログラムを選択しろみたいな
メッセージが出てきて、適当にデフォルトのを選択しておいたところ、292みたいな状態になって
しまいました。
ずっとLinux使ってたので、もしかしてすごく見当はずれな質問してるかもしれませんが、
いろいろ検索してもなにも引っかからなかったし、どうすればよいか、ヒントでもよいので
ください。
String^ s = "A"; for( int i=0; i<26; i++ ){ 〜何か操作〜 func( s ); } こんな感じで、func()に、「A〜Z」まで文字列を渡したいのですが、どんな操作をするとスマートに出来ますでしょうか?
func(static_cast<wchar_t>(L'A' + i).ToString());はどう? iの使い道がほかになければ、こういうループにするという手もある。 マジックナンバー26が消えるのがいい(もっとも、'Z' - 'A'でも消せるけど)。 for ( wchar_t i = L'A'; i<='Z'; i++ ) { func( i.ToString() ); }
297 :
295 :2008/08/29(金) 04:19:47
他にも使用していたので、前者を使わせてもらいました。 ありがとうございます。
>>292 >ライブラリとかじゃない、普通のプログラムをデバッグしようとしているのですが、
>>294 >結構大きなフリーのライブラリのソースをダウンロードしてきてコンパイルしたのですが、
どっちなんだ。
ダイアログボックスでボタン配置したときは プロパティからデフォルトボタンに設定できるけど CreateWindowで配置したボタンを デフォルトボタンにするにはどうしたらいいですか?
作った後? 作るときなら、BS_DEFPUSHBUTTON
>>300 作ったあとに
デフォルトボタンにしたり、しなかったり したいです
あとでスタイル変えるのは SetWindowLongでできるけど、 どうなるかはわからん、他のボタンのDEFも外さないと無理かも? 見た目はDM_SETDEFID送ればいいみたいだけど。
BM_SETSTYLE でもいけた。まあいろいろやってみ
304 :
デフォルトの名無しさん :2008/08/29(金) 19:28:50
>>298 すいません。
結構大きなライブラリのソースをダウンロードしてきて、それをコンパイルした後、付属の
サンプルコード(こいつは結構小さい普通のプログラム)をコンパイルしようとしたんです。
なんでどっちも本当です。
結局まだわからないので、スタティックライブラリを自分で作って勉強してみてます。
でもregsvr32.exeなんて使わないっぽい。
スタティックなライブラリをデバックするときって、regsvr32.exeを使いますか?
手順としてはこんな感じ。
(1)ライブラリ作成(名前はStaticLibrary.libとします)
(2)regsvr32.exe \i StaticLibrary.lib
(3)このライブラリをつかうサンプルプログラムを作成してデバッグ。
それはない。 regsver32の対象になるのはDLLだけ。
>>304 exeのプロジェクトのプロパティの「デバッグ」の「コマンド」がregsvr32になってるのかな。
空にしてok押してみて。”$(TargetPath)”が入ると思う。
新しいプロジェクトを作るときのウィザードで選択を間違えたのかな。
307 :
デフォルトの名無しさん :2008/08/30(土) 01:12:35
>>304 ありがとうございます。おっしゃるとおりになってました。
そこを空にして、追加のインクルードパスにboostを追加して、F7でビルドするとビルドできました。
その後、同じソリューションの中のほかのサンプルプログラムをコンパイルするごとに追加の
インクルードパスにboostを追加する、という作業が必要だったのですが、これはしょうがないですか?
どこかで設定すれば同じソリューション内なら一度の追加ですむとか、そういうことはできないですか?
VS2008を使っているのですが、newで確保したクラスの動的配列の内容を デバッガで全て表示させるにはどうしたらよいのでしょうか? STLのstringやvectorだと上手く表示されているのですが、何かいい方法があるのしょうか? どなたか教えて下さい。
変数の後ろに、カンマと数字で
某動画を見ながらVC++2008をインストールしたのですが 新規作成-プロジェクトの 「VisualC++」の「空のプロジェクト」実行で ソース、リソース、ヘッダーファイルが出なく(組み込まれなく?)なりました どこかさわってしまったらしく元に戻せません 超初歩的だと思いますが宜しくお願いします。
「空のプロジェクト」なんだから、そういうのが無くて当たり前。
313 :
311 :2008/08/31(日) 18:34:37
314 :
311 :2008/08/31(日) 18:43:15
連投すいません 他の説明動画で解決できました。 前の動画は編集されてたのかな?
こんな動画まであるのか。 ホントになんでもあるなw
316 :
299 :2008/08/31(日) 23:41:36
>>300 BS_DEFPUSHBUTTON も設定しましたがリターンを押しても反応しません
>>302 DM_SETDEFIDを
SendMessage(ウインドウのハンドル, DM_SETDEFID, (WPARAM)ボタンのID, (LPARAM)0 );
で送ってもデフォルトになってないような?
>>303 SendMessage(ウインドウのハンドル,BM_SETSTYLE, (WPARAM)BS_DEFPUSHBUTTON,(LPARAM)0);
にしてみましたがやはりだめです
配置してるボタンはウインドウ上に1つだけです
ひょっとしてデフォルトボタンはダイアログでしか設定できないのでしょうか?
Enter打つとボタンが押されたことになるって挙動が欲しいなら、 ボタンのIDをIDOKにして、メッセージループにIsDlgMessageを組み込むじゃなかったっけ。
テキストボックスに入力中にリターン押したときに ある関数を実行したいんですが ダイアログのときはデフォルトボタンで代用してました VBとかでいうところのkeydownイベントのときにキーコードがリターンか調べて リターンなら処理をする みたいな挙動がほしいです IsDlgMessageでググったら日本語のページがひとつもないといふ
じゃあ、IsDialogMessageでググってみて
>>315 そして、
本と同じで、こういう動画も初学者向であふれるんだろなw
>>319 ググったけどよくわからんかった
モードレスダイアログにしてIDOK受けるみたいな感じに解釈したんだけど
コントロールのサブクラス化のほうが理解しやすかったんでそっちにしました
ありがとうございました
すいません。 これからVisual C++ 6.0を勉強をしようと思っているんですが、 初心者向きのわかりやすい参考書があれば教えて下さい。 よろしくお願いします。
>>322 本題(参考書の紹介)にレスできなくてごめん。
これから勉強するのに、なんでvc6なのだ?
vc6はc++の規格が固まる前のものでオススメでない。
vc9(vs2008)でいいじゃないか。
VC6使ってるけどC++の規格で困ったことなんかないな
>>323 そうなんですか?
しかし会社で使用する開発環境が6.0らしいんですが・・・
vs2008はOSが2000なのでインストール出来ませんが、
vs2005ならインストールしています。
vs2005を勉強すればvs6.0にも応用出来るのでしょうか?
そういうことでしたらvs2005で勉強してみます。
会社で使うという事情なら6.0にしておけ。
ちゃんとライセンスがあるのか心配なレスだなしかしw
そうですね。 やはり6.0を勉強します。 話は戻りますが、初心者向きのわかりやすい参考書が あれば教えて下さい。
VCの場合はCかC++がある程度使えないと初心者以前なので 勉強してから出直して来てください。
山本信雄のシリーズは入りとしては最高
でも、Cがある程度使えなかったらわかりません
>>329 VC++とC++ってそこまで違うものですか?
C++はプログラミング言語 VC++はマイクロソフト社製の開発環境
そっか VC++はVSのC++コンパイラ群のことだと思ってた
ライセンスなんてそんなに(・ε・)キニシナイ!!
libviscawinの使い方教えてください ていうかどこで聞けばいいですか?
VC++単体パッケージにはコンパイラしかついてないのか
>>332 いやまあその理解でもあまり困らないと思う。
まぁ、VC6と言うとMFCを使えることを想定されるな。
win32だったらprograming windows (ペゾルド) C言語を知っている前提 MFCだったら標準口座MFC6.0(シルト) C++のクラスぐらいまで知っている前提
main( )で始まるプログラムとMFC使ったプログラムは勝手が違うな
ポインタをヘッダファイルで定義して、複数のソースから使用します。 そこでヘッダ宣言時に"_declspec(selectany)"で書くと、リンカエラーもなくビルドできます。 この"_declspec(selectany)"とは、どういったものなのでしょうか?
WM_PAINTメッセージの処理で、クライアント領域の左側を白、右側を黒に塗り潰すとして、 再描画が必要な領域で条件分岐して、
途中で送信してしまいまして、すいません。 WM_PAINTメッセージの処理で、クライアント領域の左側を白、右側を黒に塗り潰すとして、 再描画が必要な領域で条件分岐して、白黒それぞれ描画するか判断するのか、 描画が必要ない領域を塗り潰しても、結局システムは何もしないと思って 両方とりあえず描画するのか、どちらが一般的なんでしょうか
領域を指定する
クライアントエリアの中は全部描く クリッピングは速度のためにある
昨日勉強始めました。 LINK : fatal error LNK1181: 入力ファイル 'object\library.obj' を開けません。 というエラーが出るのですがlibrary.objを検索してもHDにはありませんし、 解決するようなサイトが見つかりませんでした。 なにか解決方法ありましたらお願いします。 環境はVisualC++2008 Expressで、コードはチュートリアル用にダウンロードしたもの。 元のコードはVisualC++6で書かれたようです。
それ理解できないなら別のことやった方がいい
どっかでひろってきたサンプルのコンパイル方法か
349 :
デフォルトの名無しさん :2008/09/07(日) 21:02:29
>>273 について誰か教えてください。よく理解できません。
特に指定がない場合はコンパイラが拡張子見てどっちか判断する
授業でbccを使って書いたプログラムのソース(問題.c)をVisual C++で流用しようとしたら 1>cl : コマンド ライン error D8045 : C ファイル '.\問題.c' を /clr オプションと共にコンパイルできません というエラーが出てコンパイルが完了しません。どうしたらよいでしょうか?
プロジェクト作るときにWin32を選ぶ。 CLR選んだらCは使えない
>>353 ありがとうございます。
しかし今度は
「プリコンパイル ヘッダー ファイルが旧バージョンのコンパイラで作成されています。また、C++ のプリコンパイル済みヘッダー ファイルを C で使用しています (その逆も考えられます)。」
というエラーがありました。
>>354 空のプロジェクト作って追加するのがいいと思うけど、
cppのプロジェクト作って追加したのなら、ソリューションエクスプローラーのとこで
該当ファイル右クリックしてプロパティ出して、C/C++のプリコンパイルヘッダーの項目のとこで
プリコンパイル済みヘッダーを使用しない、にする。
あるいはプロジェクト全体でこの設定をしてもいい。
>>355 ありがとうございます。
何とか上手く行きましたが、最後にscanfの宣言をしてくださいというエラーが出ました。
これはどういうことでしょうか?
357 :
356 :2008/09/08(月) 00:25:56
正しくは「'scanf' の宣言を確認してください。」でした。
358 :
356 :2008/09/08(月) 00:33:44
すみません。自己解決しました。 Visual C++2005からの仕様変更が原因だったみたいですね。。 お騒がせしました。長らくのお付き合いありがとうございました
それは2005以降出るよ。 詳しくは、そのエラーの行でF1押して出たページの「CRT のセキュリティ強化」を読むといい。 その関数使う事が決まってるなら無視してもいいし、気になるならヘルプに出なくする方法も書いてある。 scanf以外にも、printf系、str〜系で出る。
移植性?なんだそれ?そんなの知らん! 俺はMSと心中するんだと言う気持ちならscanf_sなど_s系が付いた関数を使えば良いよ
361 :
デフォルトの名無しさん :2008/09/08(月) 10:26:31
すんません VC++6.0(MFC)でテキストエディタ作れと言われたのですが、 最初の最初でつまづいてます。 プロジェクト新規作成→MFC→SDIアプリ→→で、初期のスケルトン作成。 その後ですが、IDR_MAINFRAMEのフォームの白い部分(メニューバーを除く全部 の領域)を全体的にテキスト入力欄にするにはどう操作すればいいですか? ダイアログベースのプログラムならテキストボックス置けばいいだけですが、 SDIアプリケーションの場合はどうするのでしょうか?
>>361 MFCだといくつかのやり方があって、どういう点を学習してるかによるが、、、
CViewをCEditViewに替えるだけでいけるけど、、、
Editコントロールを貼り付けるのなら、メンバーにCEditでも置いて
ウィンドウのOnCreateで一緒にCreateしてやって、OnSize時に
CEditをクライアントエリアと同じ大きさにしてやればいい。
363 :
デフォルトの名無しさん :2008/09/08(月) 12:04:29
>>362 ありがとうございます。
なんとか後者の方法でエディットボックス設置はできました。
あとは
・起動時にウィンドウのクライアント領域と合わせる
・リサイズ時にも合わせる
のようにしたいですが、ウィンドウサイズの初期値設定、クライアント領域の現在値の取得などはどのようにすれば良いですか?
クライアントのサイズはGetClientRect()というのがあるけど、 WM_SIZEのハンドラ、OnSizeの引数に幅と高さもあるから、それそのまま使えばいい。 起動時にリサイズ(WM?SIZE)も来るから、起動時のことは考えなくてもいい。
365 :
デフォルトの名無しさん :2008/09/08(月) 16:42:03
>>364 ありがとうございます。
試行錯誤した結果、やはりCEditViewにすることにしました。
http://www.vcppclub.com/kouza/nextstep1/mdieditor1.html ここを見たら1行も書かずに、読み込み/保存機能はできてしまったのですが、疑問が。
ファイル読み込みのダイアログを出す→ユーザーが選択したファイルを読み込む→テキストエリアに表示
保存も同様。
これらに必要な処理がどこにも書かれていないような気がするのですが。
調べていた段階で、メンバ関数 OnFileOpen() を作成し、
GetOpenFileName();でダイアログを出し、
CFile型に読み込む手順が必要そうだったのですが、
自動生成されたソースではどこにも書かれていません。
にもかかわらず読み書きできるのが疑問です。
(サイトのサンプルはMDIですが、SDIでもほとんど同じのようです)
その辺はMFCとDocumentViewアーキテクチャの話だからなあ。 CWinAppからCDocument、CEditViewの操作はMFCの中に含まれている。 もちろん、自分で変更することも可能。
派生した部分しか見てないんだろ
オリビア派生
VisualStudioのエディタのタブや改行の記号表示について質問があります. デフォルトの表示を変更したいのですがどのようにすればよいのでしょうか? 具体的には改行文字を$にタブ文字を>---という風に変更したいのですが
ひとりごとです
371 :
デフォルトの名無しさん :2008/09/09(火) 10:49:53
CEditViewでの、現在表示されている文字列を格納しているメンバは何ですか? 入力されたものを文字列型にコピーして保存やらなにやらいろいろやりたいのですが。 逆に文字列型に格納された文字列を表示する方法も。 そういったテキストバッファの操作のしかたがいまいち分からないです
エディットコントロール自身がバッファを持ってる 普通は直接バッファいじらないでメンバ関数使ってアクセスする
普通はCDocumentの派生クラスに自分でデータ構造作ってビューはその表示方法書いたりするけど CEditViewは特殊だからな。GetEditCtrl()でCEditのインスタンスが取れるのでそれを操作すればいい。
typedef struct tagTest { unsigned int x :1; } Test; このようなコードを見かけたのですが、「:1」は何を意味しているのでしょうか。
376 :
374 :2008/09/09(火) 11:43:07
素早い回答、ありがとうございました。
377 :
デフォルトの名無しさん :2008/09/09(火) 13:53:02
>>372-373 なるほど。
CEditのメンバ関数見るとそれらしいものがあるようですね。
しかし、GetLine()のように、行ごとに取得してくる関数はあるみたいですが、
「とりあえず改行も含めて全体をCStringにコピー」するようなものは見当たらないです。
全部の行を走査してコピーする部分は自分で作成しないとダメですか?
全取得はGetWindowText() これはCEditでも、CEditViewでも使える。
>>377 MSDNを見るときは、継承元のクラスのメンバも見よう。
GetWindowText()で取れるんじゃね?
って書いてたら先を越されたw
380 :
デフォルトの名無しさん :2008/09/09(火) 14:28:49
>>378-379 おぉ ありがとうございます!
MSDNの見かたを訓練するようにします。
ところでもうひとつ質問が。
MainFrameのメニュー選択によりそれらの動作をさせたいのですが、
void CMainFrame::On????(){
}
↑ここの記述で、
MainFrameのほうからViewを操作するにはどのようにすれば良いですか?
C(アプリ名)Viewクラスのインスタンス名が分かれば「名前.関数名」のような形
で呼び出せると考えたのですが、
どこにも宣言部分が見当たらないようです。
>>380 えーと、SDIだったよな?
CFrameWnd::GetActiveView()でどうか。
382 :
デフォルトの名無しさん :2008/09/09(火) 15:24:53
>>381 CViewのポインタが帰ってくるようで、継承して作られたC???Viewの関数は使えないようです。
CFrameWnd::GetActiveView()->関数();
このようにしてもビルドが通らないです。
>>382 GetWindowtext()が見つけられないようだったから、わざわざCFrameWnd::GetActiveView()の
書き方にしたのに、そしたらこれかよ・・・
CなんたらEditView* pView = (CなんたらEditView*)GetActiveView();
でいいだろ、ちょっとは考えろよ。
メニューから直接よべる
385 :
デフォルトの名無しさん :2008/09/09(火) 19:30:54
>>383 未熟ですみませぬ・・・
おかげさまで思った通りのものができました。
386 :
デフォルトの名無しさん :2008/09/10(水) 11:58:44
お世話になります。VC++6でダイヤログベースのプログラムを作っています。 ダイヤログにボタンを新設し、Classウィザードを使ってON_BN_CLICKEDメッセージ関数を使って ボタンがおされた事はプログラムで取得できるようにできました。 ボタンを何秒間押したかを調べたいのですが、ボタンが離されたメッセージがなく、 どうやって作ったらいいかわかりません。 どのようなメッセージを使えばいいのでしょうか? よろしくお願いいたします。
CButtonをサブクラス化して自分でLBUTTONDOWNとLBUTTONUPの時刻の差を取るしかないんじゃないかなあ
ボタンのイベントは押した時じゃなくて、離した時に発生する気がしたけど
389 :
デフォルトの名無しさん :2008/09/10(水) 15:12:46
数日前にVC++ 2008 Express Editionを使い始めた初心者です。
ttp://homepage3.nifty.com/ishidate/ を参考にWindowsフォームアプリケーションのテンプレで作成したのですが、
一度目のビルドは普通に実行されて表示されるものの、少しでも書き換えた後(内容に一切変化がない場合でも)
以降ビルドを行おうとするとexeファイルが見つからないと表示され、エラーが発生します。
CやC++は以前から触れていたのですが、VisualStudioの操作に関しては
いまいち分からないので原因が分かりません。
どなたか分かる方は折られるでしょうか?よろしくお願いします。
なんかおかしいね。 PCの時計はくるってない?
391 :
デフォルトの名無しさん :2008/09/10(水) 16:59:39
EXE だけど DLL としても使えるバイナリってどうやって作ればいいですか?
392 :
デフォルトの名無しさん :2008/09/10(水) 18:07:37
VC6で、2003以降のXmldocumentクラスに相当するものってありますか?
393 :
391 :2008/09/10(水) 19:31:29
自己解決しました。とりあえず __declspec(dllexport) 付けて宣言しとけばEXEでビルドしてもエクスポートされるんですね。
394 :
デフォルトの名無しさん :2008/09/10(水) 19:42:43
VC++ 2008 Proを使っています。 デバッグでプログラムを実行させると出力欄に、 「'System.NullReferenceException' の初回例外が ImageRecognize.exe で発生しました。」 と表示されるのですが、これがどの行で発生したかを調べるにはどのようにしたらいいでしょうか? どなたか教えていただけると嬉しいです _ _
ヌルポ
396 :
394 :2008/09/10(水) 19:47:11
すみません、メニューのデバッグ→例外を設定することで出来るようになりました。 お騒がせいたしました。
397 :
デフォルトの名無しさん :2008/09/11(木) 01:08:30
CreateProcessで新規のルートプロセスを発行した後、 親プロセスはWaitForSingleObject(hHandle, 0)を実行して 即終了させようと思っています。(UNIXのデーモンプロセス生成のような感じ) ここでWaitForSingleObject()のタイムアウト時間を0秒に設定すると 何か問題あるでしょうか?
そのwaitに一体何の意味が?
>>398 形式的に入れた方がいいのかと思ったのですが、
もしかして即終了させるならば必要ないですか?
何のために待つのか考えろよ
401 :
デフォルトの名無しさん :2008/09/11(木) 09:40:54
VC++ 6.0で、
xmlファイルを解析して読み込む/書き込む仕組みを作らなくてはならないのです
が、手探りで困っております。
検索してみると、VC2003以降になればXmldocumentクラスなるものが使えるよう
ですが、
VC6.0ではmsxml.hを使わなくてはならないようです。
これについての資料やサンプルがweb上にあまり無くて困っています。
また、xercesのライブラリを使う手段も打診されているのですが、
これについてはどのようにすれば良いでしょうか?
ダウンロードしても構成ファイルが大量にあり、これらをどう組み込むのが検討
が付きません。
また、VC6用のサンプルのプロジェクトファイルは同梱されていたものの、なぜ
かビルドが通らないようです。
こちらから入手したものです。
http://xerces.apache.org/xerces-c/ 次レスに続きます
402 :
デフォルトの名無しさん :2008/09/11(木) 09:42:05
xerces-all.dswを開いてビルドすると エラー内容 C:\Liblary\xerces-c-src_2_8_0\src\xercesc\util\Platforms\Win32\Win32PlatformUtils.cpp(691) : error C2039: 'InterlockedCompareExchangePointer' : '`global namespace'' のメンバではありません。 C:\Liblary\xerces-c-src_2_8_0\src\xercesc\util\Platforms\Win32\Win32PlatformUtils.cpp(691) : error C2065: 'InterlockedCompareExchangePointer' : 定義されていない識 別子です。 cl.exe の実行エラー 外部のライブラリを使用するプログラムを作ったことが無いので、そういった部 分の基本から教えていただけると幸いです。
403 :
デフォルトの名無しさん :2008/09/11(木) 09:51:27
>>401 VC2008とboostいれようぜ。
そしたら簡単。serializationとか
404 :
デフォルトの名無しさん :2008/09/11(木) 09:55:05
VC2008が無料で2005より軽いことをしらんのか?
405 :
401 :2008/09/11(木) 09:57:19
すんません 業務で、VC6と指定なのです。
406 :
デフォルトの名無しさん :2008/09/11(木) 10:02:12
407 :
デフォルトの名無しさん :2008/09/11(木) 10:04:40
>>405 では、boostをいれれば? コンパイルできるかは知らないけれど。
でも、msxml.hを使うのが普通ですね。標準機能なので。
408 :
デフォルトの名無しさん :2008/09/11(木) 10:18:04
ありがとうございます。 boostを研究してみます。
409 :
デフォルトの名無しさん :2008/09/11(木) 10:18:40
410 :
デフォルトの名無しさん :2008/09/11(木) 10:23:01
>>408 boostが動かせる(コンパイルできる) かどうかのコンパイラ別の対応表がどこかにあったのですが
忘れてしまいました。boostのホームページのどこかにあったはずです。
XMLを扱う簡単さでは、boostの方が上と思いますが
VC6の機能からなるべくはみ出ないようにするには、MSXMLと思います。
411 :
デフォルトの名無しさん :2008/09/11(木) 11:24:48
やはりVC6でビルドしようとすると、「ブロックが大きすぎてコンパイルできません」と出ます。 あきらめてmsxmlのほう使います。 詳しい資料ありがとうございました。
412 :
デフォルトの名無しさん :2008/09/11(木) 15:42:25
>>411 MSの機能以外を使って良いなら、いったんVC2008とboostのバイナリパッケージをインストールして
serializationを使ってXML操作DLLやLIBを作成してVC6でそれを利用するという手をある。
上位のライブラリをVC6で使えるかはよくわからないけど、
DLLにしてあればMinGWやBCCやVCで共通に使えるので平気と思う。
413 :
デフォルトの名無しさん :2008/09/11(木) 15:45:08
414 :
デフォルトの名無しさん :2008/09/11(木) 17:15:00
このサイトで解説している、以下の部分
http://www.sutosoft.com/oldroom/devdiary/20020505.html // ●ファイルから読み込む。●
lpXMLDoc->put_async(VARIANT_FALSE);
VARIANT FilePath;
::VariantInit(&FilePath);
FilePath.vt = VT_BSTR;
V_BSTR(&FilePath) = ::SysAllocString(L"test.xml");
VARIANT_BOOL result;
lpXMLDoc->load(FilePath, &result);
::VariantClear(&FilePath);
わざわざファイル名を指定するのにVARIANT型を使うのは何故ですか?
CString型でパス名指定したりして読めれば楽なのですが・・・
実行ファイルと同じフォルダにtest.xmlを置いても、読み込みできていないよう
です。
::VariantInit〜::VariantClearで囲うことの意味、
V_BSTR(&FilePath) と、一見関数に見えるものに代入演算子が付いている意味など、
VARIANT型を扱う処理が全体的に分からず困ってます。
DOM(Document Object Model)、COM(Component Object Model)の約束なのでしかたがないのでは?
Microsoft社が提唱する、部品化されたプログラムを作成・利用するための基盤となる技術仕様。
特定の機能のみを持つプログラム部品を組み合わせることでアプリケーションソフトの開発が容易になる。
この仕様に基づいてデータのやりとりができるプログラム部品のことをCOMコンポーネントと呼ぶ。
COMコンポーネントは開発に使った言語やコンポーネントのある場所などに拠らず、
どの言語からでも、どこからでも利用することができる。
ネットワークを通じて別のコンピュータ上にあるCOMコンポーネントを利用する技術をDCOMと言う。
これらの技術はWindowsだけでなく、UNIXやMac OSにも移植されている。
コンポーネント開発が楽にできるよう改良された次世代のCOM+の開発が進んでおり、
Windows DNAの中核技術として期待されている。
http://bizex.goo.ne.jp/tool/it/8_77/209/
そういうのはVBで扱う前提だからVCだとめんどくさい
CComVariantとか使うべき
char str[20]とかいうのがあって strが"abcd%EFG"だったときに %以前の文字を削る(str="EFG"にする)にはどうしたらいいですか?
>>414 #importでのraw_interface_onlyやめろ。
それを無くすと、高水準なラッパを作ってくれてめちゃくちゃ楽になる。
例えば、loadメソッドならVARIANTやBSTRを使わず文字列を直接渡せるようになる。
size_t length = strlen(str); char * rp = str; // read char * wp = str; // write while (rp != '\0') {
421 :
デフォルトの名無しさん :2008/09/12(金) 11:37:10
>>419 詳しく教えてください。
#importから、raw_interface_onlyを削除しました。
しかし、あいかわらずloadメソッドではVARIANT型、VARIANT_BOOL型のふたつの
引数が要求されます。
IXMLDOMDocument* を定義してから、インスタンスを生成し、ファイル名を指定
して読み込み、ノードを指定してい読み込んでくるまでの
一連の流れを教えていただけると幸いです。
初心者スレでやることとは思えない
ファイルなら絶対指定では file:///C:/windows/test.txt かな? test.txtでもいいとはおもう。
>>418 > char str[20]とかいうのがあって
> strが"abcd%EFG"だったときに
> %以前の文字を削る(str="EFG"にする)にはどうしたらいいですか?
>
char *p;
p = strchr(str,'%');
p++;
strcpy(str,p);
これでいけたけど・・・ #include <msxml.h> #include <comdef.h> #include <atlbase.h> int main(){ CoInitialize(NULL); IXMLDOMDocument* lpXMLDoc; CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&lpXMLDoc); // ●ファイルから読み込む。● VARIANT_BOOL result; lpXMLDoc->put_async(VARIANT_FALSE); lpXMLDoc->load(_variant_t(L"test.xml"), &result); // ●ノード検索● IXMLDOMNodeList* lpNodeList; BSTR NodePath = ::SysAllocString(L"Test/Item"); lpXMLDoc->selectNodes(NodePath, &lpNodeList); ::SysFreeString(NodePath); long lLength; lpNodeList->get_length(&lLength); for (int i = 0; i < lLength; i++){ IXMLDOMNode* lpItem; lpNodeList->get_item(i, &lpItem); BSTR str; lpItem->get_text(&str); USES_CONVERSION; printf("%s\n", W2A(str)); SysFreeString(str); lpItem->Release();} lpNodeList->Release(); lpXMLDoc->Release(); CoUninitialize();}
427 :
デフォルトの名無しさん :2008/09/12(金) 17:59:27
>>423-424 ,426
ありがとうございます。
やはりうまくビルドできないですが・・・
引き続き試行錯誤しつつ、XML関連のスレのほう除いてみます。
ところで、CEdit型のエディットコントロールの、それ自身のウィンドウ内での座標をゲットおよびセットする関数ってありますか?
(つまり、事後的にプログラム内で任意で位置を変更したい)
SetRect(),GetRect()だと思ったらコレはこのコントロール内での座標のことのようでした。
428 :
デフォルトの名無しさん :2008/09/12(金) 19:02:06
ふと思ったんだがCDとかDVDとかって Diskか? Discか?
Discは光学メディア Diskは磁器媒体
CDはソニーが作ったから
サンクス! そう言う区分だったのか ってことはCD/ DVDを「Disk」って書いちまった資料を全部直さないとか・・・
>Discは光学メディア >Diskは磁器媒体 MOはどっち?
VC2008でテキストボックスに0x01と表示するにはどうしたらいいですか? unsigned char buf[2] ={0x01,0x02}; textBox1->Text = buf[0]; と実行したらエラーがでます。 error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)' : 1 番目の引数を 'unsigned char' から 'System::String ^' に変換できません。(新しい機能 ; ヘルプを参照) 1> 使用可能なユーザー定義された変換演算子がない、または 1> 演算型のボックス化された形式からターゲット型への標準変換は存在しません
437 :
デフォルトの名無しさん :2008/09/12(金) 20:24:20
>>436 unsigned char *buf[2] ={"0x01","0x02"};
textBox1->Text = buf[0];
>>437 その方法でもエラーがでまます。
error C2440: '初期化中' : 'const char [5]' から 'unsigned char *' に変換できません。
Hexデータをテキストボックスに表示したいだけなのに。難しい
テキストボックスに "あいう"と表示してみろ
>438 テキストボックスはテキストを表示する所だから Hexデータは表示できない
基本的なことなんですけど 文字判定でスペースが入力されたら 「空白です」 と表示させたいんですけど、誰かご教授ください
442 :
デフォルトの名無しさん :2008/09/12(金) 22:57:06
C++を初めてインスコしたんですけど、 製品の登録ってなんですか? 無料ですか?
有料
444 :
デフォルトの名無しさん :2008/09/12(金) 23:00:42
そうですか。 いくらですか?
>>438 抜粋
private: System::Void Showbutton_Click(System::Object^ sender, System::EventArgs^ e)
{
array<System::String^>^ Numdata = {L"0x01",L"0x02",L"0x03",L"0x04"};
if(i < Numdata->Length)
this->textBox1->Text = Numdata[i];
else{
i = 0;
this->textBox1->Text = Numdata[i];
}
}
private: System::Void NextShowbutton_Click(System::Object^ sender, System::EventArgs^ e)
{
i++;
}
>441 キー入力をチェックしてもいいけど マウスで入力する場合もありえるから 入力内容が変った時のイベントでやるのが無難
447 :
デフォルトの名無しさん :2008/09/14(日) 01:09:45
Express 2005で3連休プログラマーなんだけど、 String^ folderName; の ^ ってなに?
>>447 ハットサイン、或いは山形アクセント記号。
C++/CLIのスレで聞いて来いw
C++/CLIとC++は別の言語。 C++を勉強したいならVisual studioのCLRのカテゴリには手を出すな。
今まで普通に使えていたのですが突然MessageBoxが使えなくなりました。 1>.\main.cpp(135) : error C3861: 'MessageBox': 識別子が見つかりませんでした とエラーが出ます。コードは if(MessageBox(hWnd,"あ","あ",MB_YESNO) == IDYES) 等で文字セットはマルチバイト文字です。windows.hもインクルードしてあるのですが何がいけないのでしょうか。 VS2008再インストールしても直りません。
デフォルトはマルチバイトじゃないはずだから いらんところいじってるだろ
453 :
デフォルトの名無しさん :2008/09/14(日) 10:58:11
MessageBoxAだとかMessageBoxWとかにしてやってみたらー(
プロジェクトの設定にある文字セットってどういう意味なの? あの設定によってコンパイルが通らなくなるし。
マルチバイトかUnicodeか
>>455 exeファイルを配布する上で、文字セットの設定が問題になるの?
Unicode: NTネイティブ、9xでは原則として動かない マルチバイト: NT/9x両方で動くけど、NTではAPI内部で変換がかかるのでオーバーヘッド有り。
>>457 なるほど。参考になります。
文字コードに「設定なし」とあるけどこれは一体?
いや、9xの時代から、APIはAとWの両方あったような記憶があるけど。
TEXT/_Tマクロをちゃんと使った参考書って少ないよな
>>461 正直、文字列は、ワイドかマルチバイトか決めうちにして、それは使わないほうがいいんじゃないかって気がする。
自分ひとりでやるなら勝手だろうけど マクロ使ってない糞サンプルばらまかれると迷惑する
大人数でやるところほど、きめうちしたほうが無難っていうか。 ジェネリックテキストつかってても、ワイド文字版と、マルチバイト版と両方でテストやってるところなんてほとんどないだろうし。 文字列を編集してる処理とか、ちゃんと、マルチバイトでもワイド文字でも動くように意識して書いてなかったりするだろうし。 テスト以前に、コンパイル通すとかもやってないだろうし。 古いコードをあさったら、char *p = _T("・・・・"); みたいのいっぱいあるだろうし。 中途半端に対応しても、どうせ片方でしか動かないコードなら、きめうちのほうが安全だと思われ。
そういう場合は開発環境も限定するだろ 特定の環境でしかコンパイルできないサンプルをばらまかれると皆が迷惑する
いや、ジェネリックテキストなんて、VCにしかないでしょ。
>>466 またまた御冗談を
真面目な話、BCCでもGCCでも<windows.h>が使えるやつならどれでも使える。
<tchar.h>も結構存在するし。
それでもWindows限定じゃん。
まあWindows APIだしね。
>>465 それはジェネリックテキストを使っても、ぜんぜん解決してない。
C#でメソッドなどの一行上に"///"書くことで自動生成されるXMLのドキュメント /// <summary> /// /// </summary> /// <param name="i"></param> /// <returns></returns> public int hoge(int i) { return 0; } このような機能はC++ではないのでしょうか クラスやメソッドをオブジェクトブラウザで参照したいのですが,うまくいきません. どのようにすればいいか教えていただけませんでしょうか. お願いします.
C++はプログラミング言語です
テキストボックスを使わずに、キースキャンで読み取った文字から漢字辞書変換をしたいのですが できるでしょうか?どのようにすればいいですか?
IME使う
説明してあるHPなんかあったら紹介して欲しいです
つ[msdn]
初心者にやさしくヽ(`Д´)ノ
ありがd
480 :
デフォルトの名無しさん :2008/09/16(火) 18:04:42
VC6でDirectXを使いたいです。 本格的なゲーム作るわけじゃないんですが、 ある業務用ソフトの画面効果で軽い2D処理が必要になりまして。(スプライトが 使えればいい程度) ウェブを見た限りではVC6で使う情報はあまり無かったようです。 9.0のSDKと、VC6で使えるようになるという2004 Summer Extrasは入手しました。 ライブラリをインクルードするところから知りたいです。
質問です。 VisualC++ 6.0 MFC WindowsXP SP3 の環境で作成した、画面をビットマップ保存するプログラムを、 別のPC VisualC++ 6.0 WindowsXP SP3 の同じ環境で実行すると、作成されたBMP画像が「描画できませんでした」となってしまいます。 この場合、どのようなことが原因だと考えられますでしょうか? また対応策はあるのでしょうか? どうかご教授おねがいします。
業務用ソフトだったら外注に頼むだけ
多分、ビットマップが微妙に正しく生成されていないのだろう 別のPCで、BMPファイルは何と関連付けされてるの? ペイント?Windowsのビューア?IE? 対策:「画面をビットマップ保存するプログラム」のソースを見直す
画面をビットマップ保存するプログラム 作成されたBMP画像が「描画できませんでした」 本当にお前が作ったプログラムか? ソースコピペしたら動きましたレベルだろ
>>483 Windowsのビューアです。プログラムを見直したいと思います。
>>484 そうです、申し訳ありません。
ですが、同じ環境のPCなのに失敗するのは何が原因と考えられるのでしょうか?
よろしくお願いします。
考えられる原因は無限にある。 せめてどこで失敗するのか突き止めろ。
何も知らない初心者がC#ってやつから始める事にしたお。 その次はJAVAかな。地味に頑張るお。新兵に激励を頼むお。
貴様は人間ではない!糞ほどの価値もない! C#訓練に生き残れたら、プログラムの司祭となる! サービス残業に命を捧げるTI土方だ!
ビットマップの作成で失敗するか、表示で失敗するかぐらい確認しろ それぞれの環境で両方のビットマップ表示したらわかるだろ
491 :
デフォルトの名無しさん :2008/09/17(水) 16:09:06
std::vectorに自分で作ったクラスのオブジェクトのポインタ入れてあるんですけど clear()をすると、保持してるポインタのさしてるオブジェクトをdeleteしてくれるんでしょうか?
スレ違い
493 :
デフォルトの名無しさん :2008/09/17(水) 16:54:08
494 :
デフォルトの名無しさん :2008/09/17(水) 16:57:32
std::vectorに自分で作ったクラスのオブジェクトのポインタ入れてあるんですけど clear()をすると、保持してるポインタのさしてるオブジェクトをdeleteしてくれるんでしょうか?
ここC++スレじゃないけど
>>494 boost::ptr_vectorを使うか、boost::smart_ptrでポインタを包む
497 :
デフォルトの名無しさん :2008/09/17(水) 17:08:26
Visual 「「「「C++」」」」」」
×boost::smart_ptr ○boost::shared_ptr std::auto_ptrはだめです
>>496 >>498 要するに勝手にdeleteまではしてくれないということですね?
boostの使用も検討してみます。ありがとうございました。
数学の授業で小学校レベルの算数の質問されたら迷惑だろ いちおう関係なくはないけど
501 :
デフォルトの名無しさん :2008/09/17(水) 17:15:39
↑今日一番のアホ
>492,495,500 痛いな
寧ろ>493,497,501,502が痛い罠。
いやいや、俺に言わせれば >502,503 が必死w
C++やC#やるのにどのソフトがお勧めとかある?
とりあえず2008 Express Edition使っとけ
Microsoft Visual Studio 2008 Express Editionの事? 無料でいいのか?とか不安に思った Visual Studio .NET Professional普通にこっちのがいいかとも思ったけど Express Editionでも平気ならそっちでいいか
お前に使えるのか不安に思った
むむ…初心者を舐めたらいかん きっとなんとかなる…はず…多分…恐らく…
>>507 グダグダ言ってる間に使ってみればいいだろ
>>499 VC++ 2008にSP1当ればboostなくてもstd::tr1::shared_ptrが使える。
数日前までうまく言っていたのに、急にコンソールウィンドウを 最大化しないと見られなくなりました。 原因が分からないのでどなたか教えてください
513 :
デフォルトの名無しさん :2008/09/18(木) 20:22:37
VC6で、ウィンドウ上部のメニューやツールバーアイコンを、 必要に応じて適宜、グレー可(クリック不可なようにする)などの変更をする方法教えてください。
Enable: ボタンを選択可能または選択不可能に設定します。
CとC++の違いって何ですか?
一言では言い表せない
517 :
デフォルトの名無しさん :2008/09/19(金) 14:06:30
VC++とBorland C++Builderってどっちのほうがつかいやすい? 低スペPCの俺には無理?
人による
VC++のほうが低スペック コンパイル速度はBCC
そんなどうでもいいことで選ぶやつもいるんだ
521 :
481 :2008/09/19(金) 17:35:10
>>486 ビットマップの作成で失敗していると思われます。
プログラムの作成に使用したPCではビットマップ画像のファイルの大きさが2,521KB
に対して、プログラムを移行させたPCではファイルの大きさが1,262KBで作成されてしまいます。
>>487 プログラムを移行させたPCが手元にないのでわかりませんが、調べて同じにしてみたいと思います。
>>490 上にも書いたとおり、ファイルの大きさが違うので作成で失敗していると思われます。
よろしくお願いします。
>>517 VCスレきたんだからおとなしくVCつかっときな
BCのほうはただでさえ人少ないのに
偏屈なこだわりがある自称玄人ばかりだから
ネットの情報すくないし何を聞くにしても大変
だからといってVCはましなのかというと腐ってるわけだがBCほど腐ってない
523 :
デフォルトの名無しさん :2008/09/20(土) 16:48:08
VC6で、DirectXのAPIを使わずに、スプライトなどの2Dグラフィックス表現を実現する簡単な方法はありますか? オートシェイプのような簡単な画面レイアウトソフトを作りたいのですが、 標準のコントロールやCViewクラスの描画メソッドでは、重なりや透過などの指定に限界が出てきてしまうようです。 オブジェクトをドラッグで移動したり拡大縮小したりにも対応させたいので、 ゲームプログラムに近い作り方で各オブジェクトをスプライトとして扱いたいのです。 業務用で使うツールとして、DirectXが動くかどうか怪しい環境でも使うことを想定しているので。 DirectXのAPIを使うことは無しの方向で、いろいろ模索しています。
bitbitがある
526 :
デフォルトの名無しさん :2008/09/20(土) 17:12:53
VC++でソースをかいてビルドするのですが、 VC++が応答なしになってしまってビルドできません。 これはスペックの問題でしょうか? ちなみに警告やエラーはありません。
正直向いてない
bitbltだろww
当然とは思ったけど念のため手持ちのゲームを解析してみたら 必ずしもDirectXは使ってないね
530 :
481 :2008/09/20(土) 22:24:56
解決しました。
>>487 さんがおっしゃってたことを試しました。
プログラムに使用したPCのモニターのカラーのビット数を最高(32ビット)から16ビットにして
ビットマップを作成すると、1,262KBの描画できていないビットマップが作成されました。
なので移行したPCもモニターのカラーを最高(32ビット)に変更したいと思います。
ありがとうございました。
なんつう糞プログラムだ
532 :
523 :2008/09/20(土) 23:17:20
>>524 >>525 >>528 >>529 Bitbltですね。ヒントありがとうございます。
スプライト的な使い方ができる解説やサンプルみたいなのありますか?
>>525 のソースは見てみましたが、
できればVC6のプロジェクト形式でのサンプルがあればと。
Bitbltを使えば、CViewクラスのビュー上に描画することが可能なのですか?
VC++開発においてC#やVBなどで用いられる IDE機能をもたらすアドインはないでしょうか? 例えば、コメント表示(C#ではコメントはXMLで整理されており コード内のメンバにカーソルをあわせたときや入力補完のときに 情報ウィンドウにコメントが表示されます)や、 コードチェッカ・整形(C#ではresharperというアドインによって 定義されていないメンバの呼び出しに色づけしたり、 メンバ名変更などのリファクタリングができます) クラス定義のリンク (既定・継承クラスへのリンクを列挙したり 名前からクラスやメンバを検索したり、 参照へのリンクも標準のgrepみたいな質素なのではなくて、 名前空間・クラス・メンバで階層化されたものがよいです) こういった定番的な付加機能のアドインを知りたいです。 あとVSのエディタで宣言部分 (例えば「Vector vec;」でVectorの部分)に色づけをすることはできませんか?
コピペ、クレクレ厨かよ
535 :
533 :2008/09/20(土) 23:55:04
>>534 お気を悪くされたのでしたら申し訳ありません。
でもコピペではないし、
ここはVC++関連について教えて頂けるスレではないのでしょうか?
クレクレばかりではなく普段自分が教えられることは教えていますし、
事前に一応検索もしました。うまく見つけられなかったので
お力を借りたいと思いここに書きました。
その機能ってインテリセンスなんじゃないのか? あと、特定の単語に色をつける機能はある。Userナントカってファイルがどうのこうの、だったが……忘れた。
>535 初心者スレで質問してるんだから初心者だよな? 慣れるまでデフォルト、ノーマルで使っとけ
538 :
533 :2008/09/21(日) 19:33:38
>>537 すみません、C++は初心者ですが必要になったから使うだけなので
ガリガリ書いてマスターする気にはなれません
(デフォでやったからといって上達するわけでもないし)。
なので支援機能は是非欲しいのですが皆さんデフォで使ってるのでしょうか?
.NETと比べるとまるでプレーンテキストを読み書きする感覚です。
初心者スレではなく他のスレに書いたほうがいいのかな?
C++はマスターしてから書きましょう
540 :
デフォルトの名無しさん :2008/09/21(日) 20:25:18
visual C++の入門書を買おうと思うんですが、どれがいいでしょうか? プログラミング経験は、あまりないです。(PHPを少し扱える程度)
>プレーンテキストを読み書きする感覚 的確な表現だと思うのは俺だけか。 ドットネットが部品を組み合わせて使うものなら、C/C++はその部品を自分で作らなくちゃいけないんだよ。 判りやすく言うと、マゾい。作りたいアプリとは関係ないところで躓くことも多いし、 ちょっと間違えただけで簡単にクラッシュする。一昔前ならOSごと落ちる。 はっきりいって、そのような向上心のない態度ではとてもじゃないが使えない。 時間の無駄。断言できる。結果が出せるまで一年くらいかかることは確定的に明らか。 それでもC/C++を使ってる人たちは、そのような強烈なデメリットを承知の上で、 なおあまりあるメリットを見いだしてるから。 部品を自分で作る必要がある、ってのを、どうとらえるか。 それ次第で、C/C++は便利な道具にも、使えないガラクタにもなる。 いいかね?使う方が言語を選ぶんじゃあない、言語が使い手を選ぶんだ。それがC/C++だ。 わかったらドットネッターにもどるんだな。おまえにも かぞくがいるだろう……
ガイル乙www
少佐!お疲れ様であります!
>>541 マスターする気がないといったことは、
バリバリやってるマ様には失礼な発言ですみませんでした。
でもそこまでマゾになんなくても、
楽をするのに努力を惜しまないのがマなのでは?
OSSが巷に溢れる昨今に部品を自作する意味は弱いという考えもありますし、
そもそも今回の話題は部品の自作ではなく環境の整備が焦点です。
あんまりにも環境が貧弱でそれが無駄にC++の敷居を上げている
と思ったのです。
以下は質問なのですが
継承クラスを探すのにはgrepでもやってるのでしょうか?
与える引数の型がミスしてるのを脳内チェックかコンパイラしか
見つけられないのでしょうか?
メンバ名の変更は対象以外が置き換わる危険性を孕んでまで全文置換でしょうか?
細かな仕様(例えば参照渡しで事前に値設定が必要なのかなど)
もわかりづらいと思うのですが、いちいちリファレンスを引くのでしょうか?
C++は複雑すぎてインテリセンスできないのです。 C#のように単純な言語ならではなのですインテリセンスは。
>>546 インテリセンス(入力補完)はC++でも有効でしょうし複雑さとは
関係がないような気がします。コメント概略が表示されないのは何故…。
>>544 ありがとうございます!少し道が開けた感じです。
連投すみませんでした。皆様もよりよい環境でプログラミング
できますように。
ここでそんなことをぐだらぐだら聞くよりもやるべきことは他にあるだろうに。
自分の知らない単語は無意識に飛ばしてるのだろう。 これは日本語でも英語でも同じw
552 :
デフォルトの名無しさん :2008/09/22(月) 18:54:56
553 :
523,532 :2008/09/22(月) 18:56:55
Bitbltでオブジェクトを表示したりマスクかけたりする処理についていろいろ調べてみました。 画像とそのマスクを用意して透過するぐらいまではなんとかできるようになりました。 今作ってる表示のメインはテキストや図形なので、とりあえずテキストを貼り付けたCDCオブジェクトを用意したいのですが・・・ どのようにしても表示されず困っています。 viewのOnDrawメソッドで、 CDC* spr=new CDC; spr->CreateCompatibleDC(pDC); spr->TextOut(0,0,"テスト文字"); pDC->BitBlt( 0, 0, 300, 300, spr, 0, 0, SRCCOPY); これで何も出ないです。 TextOutではなくDrawTextでやる方法も試みました。 DrawText(spr->m_hDC,"てすともじ",11,temp,DT_CENTER) こちらも表示されないようです。 画像表示のときは CDC::SelectObject() で、対象のCBitMapを指定すれば良かったようですが、 テキストの場合はどう指定すればよいですか? VC6なので資料やサンプルが少なくて難儀してます・・・
>552 PHPを少し扱える程度じゃVCは無理 もうちょっと初心者向けの言語をお勧めします。
>>553 DCはデフォルトでは1x1のモノクロビットマップが選択されている
そのまま描いたらたぶん、1ドットだけBitBltされてると思うよ、よくみてみ。
通常はイメージに限らず、ビットマップを作成してDCに選択し、そこに書き込んでから
ウィンドウにBitBltする。
556 :
デフォルトの名無しさん :2008/09/22(月) 19:20:34
>>555 CBitmapクラスにテキスト(の形)を読み込んで使うということですか?
どのメソッドを使ったら良いか教えてください。
コピペ君には教えるだけ無駄
メソッドじゃできないよ。CでAPIを直に触らないとダメ
>>553 CBitmap::CreateCompatibleBitmapをやって
553で言うところのsprにSelectObject
あとはspr->TextOut or DrawTextしてpDCへBitBlt
手(CDC)に紙(CBitmap)と活字(CFont)を持って(SelectObject)文字を書く(DrawText)
最初は面倒だけどすぐ慣れるよ。
>>556 DCにつながってるデバイスってディスプレイだったりプリンターだったりするじゃない?
そういうデバイスを指定しないで作ったDCはビットマップがデバイスなんだよ。
だから自分でビットマップを作りそれをDCに選択してそのDCにTextOutすると
そのビットマップに文字が描かれる。
そのビットマップをウィンドウのDCにBitBltすれば画面上で見られるってわけ。
561 :
デフォルトの名無しさん :2008/09/23(火) 13:42:57
visual studio 2008 express を使用しています。 現在あるオープンソースソフトウェアをソースからビルドしようとしているのですが、 ビルドに際し、環境変数が見つからないと言われます。 windowsOSの環境変数は指定されている通り設定しているのですが、エラーが起こります。 確かvisual studio自体にも環境変数を指定する箇所があったと思うのですが、 場所がわかりません。 visual studio自体に環境変数を指定する場所があるならば、 その方法を教えていただきたいです。
すいません。 スレ違いのようですね・・・ 失礼いたしました。
さようなら
新規プロジェクト追加時に、自分で設定した値を常に反映させることは可能でしょうか。 具体的には警告レベルを4として、新規プロジェクトが作成されることを望んでいます。
お使いの製品のグレードあるいはユーザーの知的レベルによって可能
VS2005EEです。知能は未アカデミックです。
エンタープライズエディションをばかにするな あやまれ!! みたいな。
カスタムプロジェクトを使用 マクロで設定 既存のプロジェクトをコピーして使いまわす。 プログラム、スクリプト等で定義ファイルを書き替え VSにパッチを当てて改造する。
569 :
デフォルトの名無しさん :2008/09/24(水) 15:57:07
C/C++室から誘導されて参りました。
VC++2005の使い方を教えてください。質問は以下です。
> 482 :デフォルトの名無しさん [] :2008/09/24(水) 07:57:18
> VC++2005を利用しています
> 例外を勉強しているのですが、例外を発生させたときに、
> catchで例外を処理しても、デバッガに例外があったことが出力されます
>
> catchで例外を処理するときは、
> デバッガの出力に例外が発生したことが出力されるのを防ぎたいですが、どのようにすればいいでしょうか
>
> 483 :デフォルトの名無しさん [↓] :2008/09/24(水) 12:37:12
>
>>482 > 出力って、例外時のデバッガのダイアログ?だったら、デバッグ->例外で設定できる
> デバッグ出力の例外のレポートだったら気にするな。レポートが出すぎて困るのだったら例外の使い方が間違っている。
>
> 484 :482 [] :2008/09/24(水) 13:18:40
>
>>483 > れす、ありがとうございます。後者です。
>
> 例外のつかいかたについては勉強していくところです。
> もし、テストケースとかを今後記述するような場合に、デバッグ出力でOFFにできないのか探しています。
リリースビルド
勉強? その出力で困るやつがいるのか? 遊びじゃないんだからいい加減にしろ
無料になってから馬鹿が増えたな
>>569 Googleで検索しろ
遊びじゃないんだからそのくらい自分で調べろ
574 :
553 :2008/09/25(木) 08:33:12
>>559 >>560 大変分かりやすい説明ありがとうございました。
やりたかったことが実現できました。
>>569 例外は文字通り例外的なことが起きた場合に使うもので、実行を中断せざるを得ないぐらいの場合にしか使わないほうがいい。
そんな滅多におきないことのためにifをたくさん書くのは面倒だしテストが大変になる。だから例外を使って楽に例外処理を実装する。
class Hoge{ public: Hoge(); virtual void abs_func() = 0; }; class Hoge_1:public Hoge{ public: virtual void abs_func(); }; Hoge::Hoge(){ abs_func(); } void Hoge_1::abs_func(){ } int main(int argc, char* argv[]){ Hoge *p = new Hoge_1; delete p; return 0; } このコード、BCB6では正常ビルドできるけど VC2005では「外部参照 1 が未解決」リンカエラーなる。 何で?コンパイラスイッチで回避可能?
577 :
デフォルトの名無しさん :2008/09/26(金) 22:18:04
基底クラスのコンストラクタで純粋仮想関数呼んでるから
578 :
デフォルトの名無しさん :2008/09/27(土) 10:58:32
今までEclipceをずっと使ってたんだけど、C++で開発するにあたり、VisualC++を使ってみた。 これにはEclipceみたいに、コンパイルエラーが出る箇所を赤線で事前に教えてくれたりってのはないの?
579 :
デフォルトの名無しさん :2008/09/27(土) 11:12:32
ないね。
ありがと〜
581 :
デフォルトの名無しさん :2008/09/27(土) 11:40:47
ほのぼのしたスレですね
文法間違えてると、それ以降のツールチップヒントが出てこない場合がある。 例えば、構造体のメンバだと、 hoge. ここまで書くとメンバ一覧がひょこっとでてくるが、 前に間違いがあると、 a += b: これ間違い。 hoge. ここでヒントが出てこなくなる。
583 :
デフォルトの名無しさん :2008/09/27(土) 14:30:10
VC2005でプログラム(コンソールで動くもの)を作成しています。 コンパイルして実行してみても予期したとおりに動かないのでデバッグで調べた所、 cppファイルのテキストと実行している位置がずれているようです。 ステップオーバーで1行ずつ実行しているのにありえないところで数行飛んだりします。 (代入文が5つ続いてるのをジャンプしたりする) 一つ気になる点はビルド時に LINK : 前回のインクリメンタル リンクで C:\Documents and Settings\管理者\My Documents\Visual Studio 2005\Projects\****\Debug\****.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。 という表示が出ることです。 ソリューションのクリーンを行ってもncbファイルを削除してからリビルドしてもこの表示が出ています。 原因or解決方法ご存知の方、お助けくださいませ。
Release版をデバッグ実行してね?
585 :
583 :2008/09/27(土) 14:38:59
>>582 素早いレスありがとうございます。
確認しましたが構成はDebugになってます。
そもそもデバッガなんて使わないほうがいいよ。 printfとfprintfがあればおk
587 :
583 :2008/09/27(土) 14:39:42
漢は黙ってmdbg
589 :
583 :2008/09/27(土) 14:43:31
>>586 了解です。
printfで変数を調べてみた所きちんと代入されていることが分かりました。
一つ一つチェックしていくことにします。
回答ありがとうございました。
586みたいなのを時代遅れっていうんだろうな
>>585 つか、Debugビルドの構成が間違ってるんじゃね?
592 :
583 :2008/09/27(土) 14:52:03
>>591 回答ありがとうございます
構成マネージャ->
構成=Debug
プラットフォーム=Win32
ビルド=チェックあり
構成プロパティ->C/C++->全般にある
デバッグ情報の形式=C7互換
となってます。
Debugビルドの構成の部分がどこを指すのかイマイチよくわからないのですが
デバッガに頼るようでは真のプログラマとは言えない
594 :
583 :2008/09/27(土) 14:56:02
>>593 まだ真のプログラマじゃないのでご容赦下さい
旧バージョンのプロジェクトからアップグレードでもしたのかな? C7互換を /Zi か/ZI にする。 最適化 無効 (/Od) であることを確認する。 変なのが沸いてるけどデバッガにトラウマでもあるのかな(笑
596 :
583 :2008/09/27(土) 15:12:34
>>595 最適化無効によりデバッグ情報と実行位置情報が一致するようになりました。
無事いつもどおりのデバッグができるようになりました。
回答していただいた皆様、どうもありがとうございました
最適化してたら一致しないのはあたり前だ
598 :
583 :2008/09/27(土) 15:30:00
>>597 すいません。全くもってその通りですね…
いつもはデフォルトで最適化が無効になっているのですが
今回はなぜか最適化されてしまっていたので気づきませんでした。
599 :
デフォルトの名無しさん :2008/09/28(日) 00:30:32
Visual C++ と C++ って何が違うんですか><
VC++は商品名。
C++はプログラミング言語の名前、Visual C++はC++開発のためのソフトウェアの名前
開発ソフトの名前に言語名入れるの禁止にしようぜ
むしろ言語名が入ってないほうが困る
Visual C++/CLI でおk
パソコンもプログラミングも初心者ですがインストールで詰まったり(一応)解決できたりしたので報告してみる OS:Vista HomeBasic SP1 はじめ、Visual Studio 2008 SP1 のDVDイメージをダウンロードして焼いてVC++インストール開始。 インストールの途中で、暗転・黒背景白字の英文エラー数秒出て(読めない)OSが落ちて再起動、インストール失敗。 次に書籍付録DVDからVC++2008無印をインストール。一応最後まで成功。 だが前回インストール失敗した残骸(?)が中途半端に残っているのか、登録手続きでキーが表示されなかったり、 ヘルプの参照で壊れている項目があったり、ということが発生。 そこでMicroSoftのアンインストールツールでアンインストール、.NET FRAMEWORK 日本語パックと本体も削除した。 今度はVC++2008SP1をウェブインストール開始。 が.NET FRAMEWORKインストール直後あたりに数秒エラーメッセージが出て(やっぱり読めない)落ちて再起動、失敗。 再びアンインストール作業をして、今度はもうちょっと慎重にやろうと決意。 LAN抜いて、セキュリティソフト(ウイルスバスター2008)を切って、msconfigからMS以外のサービスを停止。 そしてSP1のDVDからインストール開始。 途中Machine Debug Managerを停止せよとの通告が出たので、コンピュータの管理から該当サービス停止。 またHTMLアプリケーションホストも停止せよと言ってきたので、(これっておかしくね?DVDからインスーラ起動する(?)htaのアレだろ? なんで邪魔にすんだよ?とか思ったが)setup.htaのウィンドウを閉じて、再試行。 最後まで進んでコンピュータの再起動。「システムの構成を更新」してるという表示が出て2回ほど再起動。 今度はうまくいったようで、今のところ問題なく hello fuck'n world とかで遊べてます。 すごい迷走だ。バスターのせいだったのかな。
606 :
605 :2008/09/28(日) 14:50:10
Cドライブ直下にインストール作業フォルダっぽいのがいくつも残ってるwww
ここはあなたのメモ張じゃありませんよ
失敗例と解決しての成功例は貴重なレポートなのでむしろいいぞもっとやれ
ブログにでも買い解け
インストールだけでこんなにも躓く奴が存在するなんて・・・
613 :
デフォルトの名無しさん :2008/09/30(火) 19:59:04
VC6で質問です。 CScrollViewクラスのビュー上で、 クライアント領域にBitbltでいくつかのオブジェクトを貼り付けて表示したり動かしたりするプログラムを作っています。 ページが動かないときはそれでいいのですが、スクロールバーを動かしたりしても連動して動いてくれないです。 たとえばBitbltで座標100,100に貼り付けた場合、スクロール有効領域全体の0,0を基点にするわけではなく、 「現在見えている」領域の、100,100の位置に貼り付けられるといった具合です。 OnScrollメソッドで再描画をかけて、GetScrollPosition()の値分、補正して貼り付けてやれば、 スクロールバー連動で位置を動かすことはできたのですが、画面がちらついてしまいます。 スクロールバーと連動して描画したい場合、もっとスマートなやり方はありますか? たとえば、スクロール有効領域全体の0,0を基点にしたデバイスコンテキスト(のようなもの)を取得して、 そこに貼り付けてやればこちらで再描画かけてやらなくても、スクロールによりWindowsが勝手に動かしてくれるイメージで。
ずらして描画は正しい まずはちらつく原因を特定して、それを抑えよう バッファに描いてそれを転送でもいいし、バックグラウンドの塗り潰しかもしれん スクロールした場合、元の画像はずらしてくれて、 新たな部分だけ無効領域になってるはずだよ
ってもしかしてOnScrollでInvalidateしてんのか? それは意味ないぞ 全部更新したいなら別だが。 そこはUpdateWindowだけな
VisualC++ 2005 Express Editionをインストールしようとしたらvs_setup.msを開けませんでした と出てきてインストール出来ませんでした。 ちょっと前には普通にインストール出来てたのですが、何が原因かわからないです。
私も分からないです
ハードディスクがお亡くなりになる前兆ですね なむ〜
>>618 HDの寿命なのか・・・
うわああああああああああああああああああ
621 :
613 :2008/10/01(水) 14:09:24
>>614 ありがとうございます。
バッファとしてのデバイスコンテキストを持つようにする方式を試してみました。
CreateCompatibleBitmapでビューのDCと互換のでDCをクリエイトするようにしたところ、
ディスプレイ解像度を超える部分には書き込まれないようです。
(ディスプレイ解像度を大きく超える広さの領域をバーでスクロール表示したい)
ディスプレイに影響されない、独自の形式(解像度)のDCを作る方法がありましたら、教えてください。
CreateCompatibleBitmapではなく、
CreateDCで独自の形式(解像度)のDCを定義することを考えていますが、
このメソッドの使い方(引数の指定方法)がよく分かりません。
ウェブの資料にあった、
bufDC.CreateDC("DISPLAY", 0, 0, 0);
とすると、書き込んだ時点で全画面モードになってしまう予想外の動きが・・・
そりゃディスプレイのDC持ってくりゃそうなるだろ。 いったいどうやってんの? Bitmap作るのに大きさ指定できるでしょ? GetClientRect(&rect); CPoint pos = GetScrollPosition(); (略) pDC->BitBlt(pos.x, pos.y, rect.Width(), rect.Height(), &dc, pos.x, pos.y, SRCCOPY); こんな感じでやってる? 面倒だからとりあえず、 pDC->BitBlt(0, 0, bitmap.Width, bitmap.Height(), &dc, 0, 0, SRCCOPY); で試してみては?
ところでbitbltの読み方はビットブリットでいいのかな ビットブルト?ビットブロット?
ビットブリットと言っているなあ
自分はビットブリットだと思ってるけど 周りのみんなはビットビルトって言ってる
>>620 vs_setup.msiでした
無事インストール出来ました。ありがとうございます
>>622 ありがとうございます。
ディスプレイ解像度うんぬんは的外れで、CBitmapのCreateBitmapのところで必要な解像度指定すればうまくいきました。
もうひとつ質問です。
VC6で、DrawTextで貼り付けるテキストを、サイズ指定したりフォントや色を変えたりできますか?
MFC見ているとVC2003以降はDrawTextExってのがあるみたいですが、6でそのようなことをする方法あったら教えてください
えーと、、、、それは基本中の基本だと思うんだが。 フォント作ってDCに選択して書くだけだろ。 色はペンやブラシを替えればいいし、GDI関連一通り実験してくれ。
DrawTextExはVC6にもある
俺はビットビーエルテーって読んでる。
C++って何て読むのー?しーぷらすぷらす?
シータスタス
吹いた
質問です。 今、自作のゲームソフトを作っているのですが、 プログラムでどのぐらいメモリが使われてるか見てみようと思って Windows タスクマネージャでメモリ使用量を眺めていた所です。 どうも、ファイル読み込みがあるたびにメモリ使用量が増えていき ある程度の数字を超えると使用量の増加がやむ、というような感じみたいなのです。 mallocやnewで確保したメモリが開放されていないのかな?と思いましたが、 何度見直しても開放処理を行っています。 これってひょっとしてXPのシステムキャッシュというのが プロセスのメモリ使用量として加算されてるという解釈であっていますでしょうか? また、ゲームを公開するにあたって動作環境の表記は必要だと思いますが、 このようにプログラマの意図しない所でメモリが消費されているとすると、 プロセスが実際に使う最大メモリ使用量というのはどのように割り出せばいいのでしょうか?
メモリのほうは判らんが、 動作環境なら、自分の動かしてる環境書いて、「これ以上のスペックなら問題ないでしょう」でいいんじゃない?
>635 基本的に「メモリ使用量」(専門的にはワーキングセットという)は OSがプロセスに割り当てた物理メモリの量。 プログラムがまたアロケートしたときに 割り当てのための余計なコストが増えないよう 物理メモリを確保したままでとどまる。 プロセスがバックグラウンドに移されたり、 他のプロセスがメモリを要求したりした時点で 初めてワーキングセットが減らされる。 ちなみに実際にプロセスが使っているメモリの量を知りたければ 「仮想メモリサイズ」を得る必要がある。
>>636-637 レスありがとうございます。
>>636 確かにそれでもいいのかも知れませんが、Windowsアプリになれたプロの人なんかは、
そのソフトに必要なメモリをどのように決めているのかと思いまして。
>>637 >プログラムがまたアロケートしたときに
>割り当てのための余計なコストが増えないよう
>物理メモリを確保したままでとどまる。
ということは、メモリ割り当ての問題であってファイル読み込みとは無関係なのですか?
音声のファイルを読み込んだりしたときに、ディスクアクセスしてないように見えるのですが
そりゃ以前読み込んだ音声ファイルのデータがキャッシュに残ってたんだわ。 ちなみにシステムやプログラムが使ってない物理メモリは 全部ディスクキャッシュとして使われる。
なるほど。ファイル読み込みのキャッシュはプロセスのメモリ使用量とは また別として確保されるのですね。 仮想メモリサイズを取得するというのはGlobalMemoryStatus()でしょうか? これってプロセス単体の使用量を調べられましたっけ? それとも、他にプロセスの仮想メモリサイズを調べるための関数がありますか?
GUIアプリとコンソールアプリの共存って出来ますか? 例えば、物理シミュレーションの映像をDirectXやopenGLでウィンドウ表示しつつ、 演算結果はコンソールで表示し続けるみたいなことです。 プロジェクトを作るときに、コンソールとwin32アプリの2択しかないので、 そういうことは出来ないのでしょうか…
コンソールプログラムからCreateWindow関数を呼ぶとできます。
643 :
641 :2008/10/02(木) 11:39:08
そんなに簡単に呼べたっけ? ライブラリとインクルード用意すれば呼べそうな気もするけど、 mainとwinmainで全然作りが違う気がする
一つのプロジェクトの中には、一つのmain関数しか定義できないのですか? だとすると、directxなどのライブラリを用いるサンプルソースを試すにはその 都度、プロジェクトを作成しなといけないと思うのですが、ソリューション内の プロジェクト全てに同じインクルードパスとライブラリパスを適用するような ことは出来ますか?
パスの設定はVC++そのものの設定でやればいいだろう。 lib指定が面倒だったらヘッダーに#pragma comment入れとけばいいし
647 :
645 :2008/10/02(木) 13:02:32
>>646 ありがとうございます。
#pragmaはコンパイラによって挙動が違ったような気がするので
見送りかな。linuxでもコンパイル出来るようにしときたいので。
>>647 LinuxではDirectX使えないよ
そもそもここはVisualC++のばりばり環境依存のスレです
>>644 #include <windows.h>
int main(void)
{
HWND myWindow = CreateWindow(
TEXT("STATIC"),
TEXT("hogehoge"),
WS_OVERLAPPED,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
NULL,
NULL
);
ShowWindow(myWindow, SW_SHOW);
MessageBox(NULL,TEXT("ok"),TEXT("close"),MB_OK);
return 0;
}
650 :
640 :2008/10/02(木) 13:40:43
一応自分なりに調べてみてGetProcessMemoryInfo()という関数があるのがわかりました。 プロセス終了時に取得したPROCESS_MEMORY_COUNTERS構造体のメンバのうち、 PeakWorkingSetSize と PeakPagefileUsage の合計値が プロセスで実際に使われた最大メモリ使用量という事でいいのでしょうか? というか、ゲームに使われる全てのファイルサイズの合計超えてます^^; こういうものなのでしょうか?プロの人は本当にどうしてるのか気になります。 一度大きくメモリを確保してプログラムで小出しにするなんちゃってアロケート実装とかですかね?
651 :
647 :2008/10/02(木) 13:45:51
>>648 directxはあくまで例で言っただけで、openGL使うと思います。
混乱させてすみませんでした。
テストプログラム作って実測だろうが 机上で計算しても何の意味もない
lib指定のpragmaはcomment文なので、他には影響なさそうだけどね。
>>641 は入門用にglutから入ればそんな心配も出てこなかったろうに。
>>652 >>650 は実測はしてはみたけどそれが正しい方法なのか知りたいって事でしょ
俺もメモリ関係よくわからんから知りたいわ
>一度大きくメモリを確保してプログラムで小出しにするなんちゃってアロケート実装とかですかね? こんなこと言うくらいだから知ったかぶりして余計な心配してるだけだろ
GUIって「ぐい」ってよみますよね。 無知な後輩から馬鹿にされたんですが。師ねよ。
>>656 Windowsはともかく、家庭用ゲームの開発だと大抵はそういう手法とってるよ
Windowsのメモリ管理なんてまともにやってるゲーム会社なんてないんじゃね?
自動で付けられるコードの「 { 」を次の行にする設定ってあるんでしょうか?
>>659 C言語で { を勝手に改行されたら逆に困りますよ
C++クラスの追加とかの自動で挿入されるコードについて、ってこと?
具体的に言うと private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { を private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { て感じです そもそも後者の方は一般的ではないんでしょうか? もしそうなら今の設定に慣れるように努力します
俺は後者だよ。その方が見やすい。別に手動で改行すればいいじゃん。
自動でできる設定はないですか・・・。 分かりました手動で頑張ってみます どうもありがとうございました
ツール→オプション→テキストエディタ→C#→書式設定→改行→新しい行にメソッドの始めかっこを配置する にチェック ではないか C++/CLIの設定ってあるのかね?
自分で探せ
667 :
デフォルトの名無しさん :2008/10/02(木) 23:33:03
あるレジストリキーの直下にある複数のレジストリキーの リストを取得する関数はありますか? 具体的には↓のtest直下にあるtest1、test2、test3の名称を取得したいです。 test\test1 \test2 \test3
apiにはそういう機能がないから第三者が作った関数を探してるということ?
669 :
デフォルトの名無しさん :2008/10/02(木) 23:50:43
test以下に何があるかわかんない場合だよね RegOpenKeyEx と RegQueryInfoKey と RegEnumValue で列挙できたと思う 詳しい使い方忘れた、ググれ
>>668 そういうAPIを探していたのですが見つからないので
自作しかないでしょうか?
>>669 ありがとうございます。それらのAPIを調べてみます。
RegEnumKeyExという関数を見つけました。 これで取得できそうです。
#define ANYARGS ... と言う宣言は、可変長引数を表しているのですか? '...'でググッたら死ねましたorz
レジストリ触るのが怖くて未だにINIファイルな俺
そう予測したのなら、可変長引数でググってみればいいじゃない
>>673 名前と ... から考えるとそうだろう
今Vista(x64)マシンでVC++.net2008を使いコンパイルしたのを ノーパソのXP(x86)にもってきてみると動きませんでした 動かない理由は 1.x64でコンパイルしたから 2.MS土台のバージョンが古いから 3.そもそもXPでは動かない どれでしょうか?
クイズかよ
ワロタw
あと2008は2005と違って日数制限があって完全フリーじゃないんですよね?
2008 expressはフリー゜
AnyCPUなら動くよ… fw入ってないんだろう
そうですか 677 ノーパソに2008入れてないのがまずいのかな〜
ああ、ここVC++か 再配布可能なファイルredistなんたらが入ってるから それ入れてみ
やってみます 使う側も最新にしとかないとだめなんですねえ
あと、ターゲットをx64にしてたら 動かすほうのOSも64bitじゃないと 動かないよ、当然だけど念のため
了解
あーあとコード生成の設定で/MTにすると追加無くても動くかもな。
/MTですか 探して見ます
結局、Debug版という落ちだったりして。
>>674 俺は商用アプリでもなきゃレジストリ使わないな
インストーラーアンインストーラー不要で済むし
いくらなんでもメッセージ見て気が付くだろ
.netから *View.cpp はないんですよね 全部 *.cpp に書くんですか
C++/CLIのことを言ってるならありゃ全部 *.hに書くんだぜ。 MVCとかMVPにしたいなら自分で勝手にrefクラスを分ける。
C++勉強しようとインストールしたまでは良いのですが、コンパイルが出来ません メニューにビルドの項目が無いのですが、どうやって追加するのですか?
新規プロジェクトを作成して、書いたコードをプロジェクトに追加してからビルドする。
>>696 メニューの、新規作成 -> プロジェクト でプロジェクトを作成しないと、ビルドはでないよ。
あなたはプログラムをやらない方がいいと思うよ とっととコンビにのバイトの面接でも受けにいけばいかがでしょうか。
コンビ弐
学校で聞け
過去ログ読まないでいきなり質問するやつ
>>704 このスレのログは「ファイル」で検索して読みました。
読んでもわかりませんでした。
この程度のことを自力でできないような奴にプログラマになられても迷惑だよ
>>705 何がどううまくいかないのか説明して欲しい。
fopen()でNULLが返ってくるのか、
それとも他に何かエラーが出ているのか。
>>707 ソースコードは
#include<stdio.h>
void moji_line_count(const char *filename){
FILE *fp;
int prev='\n', moji, moji_count=0, line_count=0;
if((fp=fopen(filename, "rb"))==NULL) return;
for(;(moji=fgetc(fp))!=EOF;prev=moji,moji_count++) if(moji=='\n') line_count++;
fclose(fp);
if(prev!='\n') line_count++;
printf("File : %s\nCharacter count : %d\nLine count : %d\n\n", filename, moji_count, line_count);
}
int main(int argc, char *argv[]){
int i;
for(i=1;i<argc;i++) moji_line_count(argv[i]);
return 0;
}
なのですが、エラーが帰ってくるのではなく純粋にこのソースコードで開くファイルを指定する方法ががわからないのです
コマンドラインに打ち込んだ文字列も書けよ
>>708 ファイルを指定する方法は、
プロジェクトのプロパティ>構成プロパティ>デバッグ>コマンド引数で
ファイル名を指定する、と既にアドバイスをもらっているはずだけど。
>>710 適当なテキストファイルのフルパスを打ち込んで見ましたが、うまくいきませんでした
アドレスは
打ち込むのってこれであってますよね?
C:\\Documents and Settings\\ユーザー名\\デスクトップ\\テキストファイル.txt
gccつかえ
コマンドライン使えないやつ
>>711 何度も言うけど、うまくいかないという書き方は良くない。
何をやって何がうまくいかなかったのか丁寧に書くべき。
で、そのフォルダに「テキストファイル.txt」というファイルは置いてある?
結局何がどううまくいかないのかがわからないんだが。 意図していた結果と、実際に得られた結果がどうなってるの?
>>715 すいませんでした。
Ctrl+F5でビルドしても「続行するには何かキーを押してください」とでてキーを押すと終了します。
ファイルは確かにデスクトップにおいてあります。
>>716 >>708 のソースで求めているものは、
ファイルを1つまたは複数指定し、
各ファイルに含まれる行数と文字数を数えて画面に出力
なのですが、
ファイルを指定して各ファイルに含まれる行数と文字数を数えて画面に出すことができず、
終了してしまいます
もう711で答え出てるじゃん
>>717 コマンド引数を指定して、ファイルは存在するとしたら
プログラム自体がおかしい、となる。
そこでブレークポイントを置いてF5でデバッグ実行。
あっちの71です。 ひょっとしてDocuments and Settingsの罠にかかってる? argvの中身確認してみて。
>>720 argvをググりましたがさっぱりわかりません
だめだこりゃ
ダメですか… んじゃー退散します つきあってくれたかたありがとうございました
>>721 何がわからないのか説明(ry
あとデバッグ実行(ry
argvの中身を確認しろと言われてググるとは… プログラムは誰かに作ってもらったんだろうな。
最初から宿題スレで作ってもらったと書いてあるやん
\\ バカじゃねーのwww
質問者も回答者も馬鹿 ホントゴミ溜め以下だなここは
宿題やってもらう前に授業をちゃんと受けろと
こういうのがいるから、ソフトのバグはいつまで経っても無くならないんだろうなあ……
GUI環境でコンソールプログラムをやると GUI環境とコンソール環境の両方の知識が必要になるから 最初はコンソール環境で始めた方がいい。 小さなプログラムコンパイルするのにいちいちプロジェクト作ったり パラメータ渡すのに設定いじるとか よくそんな面倒なことやってるなと感心する。
>>731 MAKEFILE覚えないですむから比較的楽じゃね?
いきなりデバッガ使えるからGUIに限る。 しかしデバッガ自体知らないのでは話にならんが。
確かに、printfデバッグより楽だからいいよな まあでも学生ならgccなりBolandのC++コンパイラーなり覚えた方がいいと思うが
プロジェクトつくるまでもない規模ならMAKEFILEも必要ない
プロジェクト作る程度の事がそんなに大変だともおもわんけどね
プロジェクトがないとCやるのは不便 一ファイルに難行も詰め込んだら間違える
まあ、ちょいとしたツールや宿題程度の問題なら、 cl main.c で充分だわな
Microsoft Visual C++ 2008 Express Editionで
windowsフォームアプリケーションを作成しようとしています。
フォントについて質問させてください。
ニコニコ動画や、Live2Viewというソフトのような
白地の上でも見づらくない白文字→(
http://www2.imgup.org/iup703826.jpg.html )
が使いたいのですが、それらしいフォントが見つからず、
ラベルのフォントのプロパティでも見つけられませんでした。
フォントやプロパティの設定とかじゃなく、けっこう難しいことをしないと実現できないのでしょうか。
※白地の上でも見づらくない白文字であれば、
ニコニコのように影を付けるでも、Live2Viewというソフトのようにフチを付けるでも
どちらでもよいです。
昔書いたときは、黒い文字書いてずらして白い文字書いたっけな、 上下左右でずらせば縁取り
上下左右っつーか、左上、左下、右上、右下だったかな
ま、フォントだけで表現するならそれしかないわな つーかそれぐらい思いつけよ 影をつけるんならPhotoshopでも使って書いて画像を表示しろ
GDIパス
それはないわw
ツリービューについての質問です。 WM_NOTIFY で TVN_BEGINDRAG を捕まえ、 TVM_CREATEDRAGIMAGE を呼んでいるのですが、 直後の GetLastError() で 6 (ハンドルが無効)となってしまいます。 また、ハンドルは返ってきているため そのエラーを無視して処理を続けたのですが、 ( ImageList_BeginDrag() など ) ドラッグイメージが描画されません。 ただし、描画されないだけで落ちるようなことはありません。 また、ドラッグイメージを使用するためには、 TreeView_SetImageList() を呼び、 関連付けしなければいけないとリファレンスに書いてあると思いますが、 イメージリストの作成方法が間違っているのでしょうか? イメージの追加 ( ImageList_Add() など ) はしていません。 加えて、項目の先頭に不要な空間(イメージが出ているであろう場所)が あるのですが、それをなくすことは可能でしょうか? 現在は以下のように処理をしています。 img = ImageList_Create( 16, 16, ILC_COLOR, 0, 1 ); TreeView_SetImageList( htree, img, TVSIL_NORMAL ); ツリービューのスタイルは以下の通りです。 | TVS_HASBUTTONS // +/-ボタンを表示する。 | TVS_HASLINES // 破線を表示する。 | TVS_SHOWSELALWAYS // 選択したアイテムの色が変わる。 | TVS_LINESATROOT // rootにも破線表示。 | TVS_EDITLABELS // ラベルの変更をする。 | TVS_CHECKBOXES // チェックボックス付き 環境は XP SP2 + VC2003 です。 よろしくお願いします。
ImageListに先にイメージを格納してみては。
748 :
746 :2008/10/08(水) 17:36:52
>>747 アドバイスありがとうございます。
以下のように変更し、試して見ましたが
変化はないようでした。
img = ImageList_Create( 16, 16, ILC_COLOR, 0, 1 );
{
HDC hdc( GetDC( m_Hwnd ) );
HBITMAP bmp( CreateCompatibleBitmap( hdc, 16, 16 ) );
int ret( ImageList_Add( img, bmp, NULL ) );
BOOL b( ImageList_Remove( img, ret ) );
DeleteObject( bmp );
ReleaseDC( m_Hwnd, hdc );
}
TreeView_SetImageList( m_Hwnd, img, TVSIL_NORMAL );
ImageList_Remove() をしなかったり、
ImageList_Create() の最後を2つの引数をいろいろ変更してみましたが、
それも変化なしでした。
周波数などを自由に変更して音を出したいんですが、どういう方法でやるんですか?
>>748 イメージリストは生きている間、保持してないとならんはずだが。
渡した先でコピーを持ってるわけじゃない。
>>749 デバイスは?
Beep()つかうか、DirectSoundあたりで。
そういやsndPlaySound()とかもあったなあ。
754 :
746 :2008/10/08(水) 18:47:18
>>750 イメージリストはプログラムの終了時に破棄しています。
ビットマップも同じくプログラムの終了時に
破棄するようにしましたが、変化ありませんでした。
GetLastError()の事について書いてないなら、そのエラー値は意味無いぜ。 (成功したら必ずNOERRORにリセットされるわけではない)
>>742 それを全てやらないときれいにふちどりできないよ
上下左右の方がまだマシな結果になるんでね
どちらにしても一ドットずらし限定だけど
757 :
746 :2008/10/08(水) 19:11:59
>>755 確かにリファレンスには GetLastError() については書かれていません。
しかし、以下のソースを実行すると、実行前は 0 に対し、
実行後に 6 になりました。
( ここでの DebPrintf() はデバッグ出力自作関数です。 )
DebPrintf( "bf %d\n", GetLastError() );
m_DragImg = TreeView_CreateDragImage( m_Hwnd, lpnmtv->itemNew.hItem );
DebPrintf( "af %d\n", GetLastError() );
別に珍しい処理でもないし、 ちゃんと動くサンプルがいっぱいありそうなもんだけど
ダメな理由がimagelistのハンドルがすでに無効としか思いつかんなあ。 普通に試しても動くからな。
>>757 だからMSDNに何も書かれてなければ、その値には何の意味も無い。
中での処理でたまたまそうなっただけ。
戻り値が成功を示しているのなら成功している。
DirectSoundでもwaveOutでも結局WAVEデータのデータ以外のフォーマットを理解してファイルを作らないと再生できないんですか? もっと、ONOFF比率50%で262Hzをサウンドカードから出力させて、スライダーで周波数を変えていくようなデータ垂れ流しをするのはどっちいいですか? フィルタとか合成とかもする場合いちいちRIFFフォーマットをつくって再生関数で再生させるんですか?
762 :
746 :2008/10/08(水) 20:03:54
>>759 そうですか・・・
わざわざ試していただいてありがとうございました。
>>760 なるほど。
では、エラー値が返っていないということで、
その他の処理をしても問題ないのですね?
ありがとうございました。
描画処理の方を見直してみます。
>>お答えいただいた方々
ありがとうございました。
764 :
740 :2008/10/08(水) 22:14:14
>>741-744 ,
>>756 アドバイスありがとうございます。
単純にフォントのプロパティをいじるだけでは
ムリということですね。
どうやらCSSやJavascriptでできるようなので、
ラベルの代わりにブラウザ窓を配置して対応してみようと思います。
それがイメージ通りのものになるのかはまだ見えないので、
それがダメなようならフォントを重ねる方向で行きたいと思います。
ありがとうございました。
面倒なことすんのね。別にいいけど
すみません。 VC++をいじってるんですが、double型の値を画面に表示させると 「0.000000」といった感じで小数部が6桁表示されてしまいます。 この小数部の表示桁数を制限したいのですが、何か良い関数など があれば教えて下さい。 よろしくお願い致します。
死ね
C++スレで聞け
>766 どうやって画面表示させてるんだ?
>>766 %fを使っているのなら、%gに代えろ。
>>766 良い関数あるよ
printf( )を使うといいよ
って使ってるんだろうけど
2つのクラスがあってそれぞれが相互にメンバにアクセスできるようにしたいのですが class AAA; class BBB; class AAA{ public: int inta; void InitB(){ bbb.intb = 0; } }aaa; class BBB{ public: int intb; void InitA() { aaa.inta = 0; } }bbb; void main(void){ bbb.InitA(); } みたいにプロトタイプ宣言をしてもだめでした どうすればお互いに相互アクセスできるでしょうか?
ソースファイルに関数の定義を書く。
ごめん、関数の定義をクラスの宣言から分けて書く。
C++スレへ行く
メモリいっぱいまで変数配列確保したあと初期化しないでメモリの中見るといろんなデータが埋まってるんだけど、これってフリーソフトに定期的に確認して送信するのを組み込めば ネットバンキングとか全部抜ける?いやデータが入ってたから一瞬思っただけなんだけど
ひとりごとです
オマエ程度が思いつくことはとうの昔にみんなやってるよ。
もうみんなやってる
もとからあるインクルードファイルでエラーが出ます。DVDから修復したんですが、変わりません ファイル名がわかっている場合の修復はどうすればいいんですか?メディアを検索してもファイル名が引っ掛かりません
何を言っているのかわかりません。 質問は日本語でお願いします。
インクルードファイルを変更してしまってエラーがでるんです。
ものはwinnt.hです。
解決しました!
解決してしまったんじゃあしょうがない 教えるのはやめにしよう
STLのlistとかvectorで 空なのにpopしたりとか、エラーが出るようなコードを走らせたとき、 STLのコード内でのエラーで止まるのはわかるとして、 どの呼び出し元が原因でSTL内でエラーが出たのか知るにはどうすればいいでしょうか?