[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 04/29 15:56 / Filesize : 181 KB / Number-of Response : 740
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

★初心者にVisual C++を教えるスレ★ Part31



1 名前:デフォルトの名無しさん [2008/07/31(木) 18:02:28 ]
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。
・できるだけ具体的に。

質問の仕方については次のページが大変参考になります。
www.hyuki.com/writing/techask.html

■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。

過去スレ、関連スレなどは>>2-5辺り。

49 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 19:16:31 ]
C++なんすか!すんませんCしかやったことなかったんです・・・どうもっす!

50 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 23:12:41 ]
_itoa_s
_i64toa_s
_ui64toa_s

の違いがわからんのですが
int
long int
unsigned long int
に対応したitoa という認識でおKですか?

51 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 23:58:29 ]
64ビットCPUバージョン

52 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 00:01:35 ]
>>49
C++/CLIは最早C++ではないぞ。

53 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 02:47:24 ]
まじすか・・・ようやくCを覚えてきたのに、この先不安じゃ・・

54 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 03:26:17 ]
VC++2008でPathFileExistsを使う前と使った後で
GetProcessMemoryInfoでヒープメモリを比べてみた所、
ファイルサイズ分?メモリを消費していました。
PathFileExistsの後にこの分のメモリは解放できないのでしょうか。

55 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 04:40:43 ]
shlwapi.dllを逆アセして調べる

56 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 06:10:53 ]
いちいち解放してると効率悪いから、わざと解放しない場合もあるし
プログラムがおわった時点で解放されてれば問題なし

57 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 08:53:48 ]
なるほどです。
ファイルを読み込ませる時のチェックに使っているので、
その度にメモリへ蓄積されていってくのですが、
こちらは気にしなくても良いのでしょうか。



58 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 09:02:42 ]
プログラム終了までにメモリ不足にならない保証があるならいいんじゃない?

59 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 12:01:16 ]
ファイルを沢山読み込ませるような事をすると不足になる可能性が…。
そういった場合はどうすればいいのでしょうか。

60 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 13:10:19 ]
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);

62 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 14:07:41 ]
>>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);

64 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 14:52:45 ]
実際に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左側がクラス、構造体、共用体へのポインタではありません。
ってエラーが出てきたんですけどどうしたらいいんですか?





68 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 17:06:19 ]
>>67
環境は?
FormならComboBox貼り付けたらデフォルトでそういった名前になってると思うが。
MFCなら右クリックで変数の追加、Win32APIならもうちょっと別な方法になる。

69 名前:デフォルトの名無しさん [2008/08/07(木) 17:11:16 ]
レスありがとうございます。
VC++6.0のMFCで作ってます。


70 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 17:20:06 ]
ググったけど、これか。
ttp://homepage3.nifty.com/ishidate/vcpp05_3/vcpp05_3.htm
ここでの解説はフォームアプリだからVC++6.0じゃ参考にならないよ。
まあMFCなら、変数の追加でControlで好きな名前で追加して、
その名前.GetCurSel() になるかな。

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さん
レスありがとうございます、試してみます。


74 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 17:31:59 ]
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
を変えれば良いんですかね。
コンボボックスの関数追加しなくてもよかったのかな?
どうもわかりません、教えてもらえないでしょうか?




77 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 18:15:19 ]
iniファイルは、

[section1]
key1=param1

という形式。
同じ項目ならkey1を増やせばいいし、カテゴリ増やすならsectionかえればいい。}



78 名前:デフォルトの名無しさん [2008/08/07(木) 18:47:15 ]
ありがとうございます。
がんばってみます。

79 名前:デフォルトの名無しさん [2008/08/07(木) 20:14:50 ]
おかげさまで保存ボタンの方は3つの場所に分けて保存する事が出来たっぽいんですが、
読み込みボタンで1番以外を選んで読み込むとフフフフフフフフとか出てきて
上手く読み込めません。
これはどういった現象なんでしょうか?

80 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 20:40:06 ]
>>79
debugビルドだよね?きっと「フ」じゃなくて「フ」だよね?
なら、プログラムが値を入れていない所を読み出したってこと。
www.google.co.jp/search?hl=ja&q=%EF%BE%8C%EF%BE%8C%EF%BE%8C%EF%BE%8C%EF%BE%8C%E3%80%80debug&lr=

81 名前:デフォルトの名無しさん [2008/08/07(木) 20:51:42 ]
そうですフフフフフフフフフフフフです、
でもフフフフフフフフフが一瞬表示されてから、規定の範囲内の値を入れてください、
って警告が出た後、ちゃんと2番目のデータが表示されるんです。
なんで一番目だけうまくいくのか不思議です。


82 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 20:51:55 ]
charは1バイトだから8ビットときいたのですが
0〜255までの数値を入れることができるということですよね?
charに数値を入れるにはどうしたらいいですか?


83 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:07:25 ]
そのまま普通に数値を代入すれば良い

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でソートだとか入出力みたいな勉強しかしてこなかったので、進んでいくうちに疑問がわいてきました。
できればレスお願いします・・・

86 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 05:35:50 ]
ヘッダファイルってのは要するにこんな関数
まあこの場合クラスだけど、どこかにはありますよと言う宣言だから

そのヘッダファイルをインクルードして実装している
ソースファイルがきちんとあれば

他では宣言だけ見て存在だけ知ってれば使える

あと現場では良いとかじゃなくて普通そうするもの

87 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 05:37:48 ]
そんなのはメモリを相当喰うようなプログラムを作る時に考えれば良いんじゃない?



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のように、モジュールごとにプロジェクトを作成するのものなのでしょうか?

90 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 09:49:02 ]
>>84
cpp はコンパイルして obj になるだろ。
関数そのものは、このobjとリンクして使えるようになるんだよ。
その関数の使い方が書いてあるのがヘッダだし、
1つ以上のobjをまとめたものが lib ファイル。

91 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 09:51:14 ]
>>85
そのソートだって、膨大なデータをソートするとなると
オンメモリでできるのかどうかが重要になるでしょう。
ゲームで問題になるのは、リアルタイムで動作させなくちゃならないから、
できる限りオンメモリにしておく必要があるからな。

92 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:44:52 ]
>>89
モジュールごとにプロジェクトを作成する。
けど、上記のモジュールってできあがるファイルのことよ。exeとかlibとかdllとか。
もんの凄い強力な電卓でなければ、普通はGUIと計算を別モジュールに分けないでしょうね。
「分けるのが目的なんだ」ってことならば、分けるのは可能です。

93 名前:デフォルトの名無しさん [2008/08/08(金) 15:30:49 ]
>>90
>>92
回答ありがとうございます。

どうやらC++でのプログラムの作り方自体自分はよくわかっていないようです。
何か勉強になるサイトや本、見るとためになるようなものがあれば教えていただけませんか?



94 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 15:43:14 ]
習うより慣れろ

95 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 19:06:15 ]
>>83
ありがとうございました
charに数値を入れることができました

ひょっとしてcharを配列にすると8Bit以上の数値を入れることもできますか?

96 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 19:28:03 ]
なぜ試さないの?

97 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 00:04:46 ]
>>85
分野にもよる。
家庭用ゲーム機は全体的にメモリが(同時期のPCと比べ)少ない場合が多いというだけ。
だからその分上手にやりくりしないといけない。
PCやサーバだとあまりそういう話は聞かない。無駄遣いは忌避されるべきだがそこまでシビアにはならない。



98 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 00:13:04 ]
使えるメモリは有効に使うべき。ってのがVista

99 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 13:50:06 ]
>>85
PSとサターンで同じゲームを作ったときは
どの文字を使うかってのも気を使ってた
同じシーンで使う文字種を減らしてフォント絵のメモリ節約とか

100 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 13:53:12 ]
音源仕様の差は面倒だったなぁ

101 名前:デフォルトの名無しさん [2008/08/09(土) 16:46:11 ]
ここにはゲーム製作者もいるのかお

102 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 16:50:39 ]
ゲームってどうやって作ってたん?
キャラ動かしたりするのは元データがあって、それをプログラマーが動かしてたの?
プログラマーによって綺麗な画面になったり汚い画面になるとか聞いたことがあるが。。。。。。わからん

103 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 16:53:19 ]
ゲームとか今の話なのか昔の話なのかでかなり変わりそうだが

104 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 16:55:51 ]
昔のゲームのハードを調べるのがいい

105 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 18:38:36 ]
今の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なのですが・・・


109 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 20:29:08 ]
1pCmdLineがいけない

110 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 20:43:51 ]
変数名の先頭って数字は使えなかったんじゃなかったっけ?

111 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:10:24 ]
>>109 >>110
言われた場所を変えてみたらできました!
ありがとうございました!

112 名前:デフォルトの名無しさん [2008/08/10(日) 22:25:33 ]
106も答えてください

113 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 22:39:30 ]
自分がよそのlib使うときを考えたらわかるべ

114 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 23:52:58 ]
>>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;
というのなんですが、もっとスマートなやり方ってありますか?


119 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 07:54:38 ]
y = x % 1000;
じゃいかんのか?

120 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 09:35:47 ]
% 10がわかってて % 1000 が出てこないとはw

121 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 13:24:21 ]
質問です。
以下のページに記載されている内容と同じ問題が発生します。
m--takahashi.com/bbs/pastlog/05700/05696.html
TrackPopupMenu()の前後でSetForegroundWindow()とPostMessage(WM_NULL)を実行しましたが、
効果がありません。どうすればこの問題を回避することができますか?

122 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 14:02:21 ]
前後ってなんだよ。
TrackPopupMenuの前でSetForegroundWindowしてる?
どうしてもおかしいままなら、その部分のコード出してごらん。

123 名前:121 mailto:sage [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 mailto:sage [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がロードされてそれを呼び出しているんでしょうか?

どうやったら確かめることができるのかを含めて教えてください。


126 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 15:50:02 ]
>>125
プロジェクトのプロパティの「C/C++」の「コード生成」の「ランタイム ライブラリ」で指定する。

127 名前:デフォルトの名無しさん [2008/08/11(月) 18:53:08 ]
keybd_event使って特定キーが押されてる間処理を繰り返したいのですが
voidだからwhileの条件式に入れれませんでした。
どうすればいいのでしょうか



128 名前:125 mailto:sage [2008/08/11(月) 19:25:58 ]
>>126
なるほど。オプションで指定するんですね。ありがとうございました。

129 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 14:19:03 ]
#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ファイルを作るにはどうすればいいですか?

131 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 14:22:53 ]
>>129
std::vectorは一度確保したメモリはデストラクタを除き
自動的には解放されない。

どうしてもやりたいならswap技法を。

vec.swap(std::vector<std::string> >());

132 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 14:24:48 ]
vec.swap(std::vector<std::string>());

もしくは

std::vector<std::string>().swap(vec);

だった

133 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 15:37:34 ]
>>130
CSVといっても、所詮はテキストデータ
"123,456,789"
とういテキストデータで、ファイル化してみれば分かる
拡張子csvだと尚良し

134 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 15:48:32 ]
今乗り換えというかなれておかないと大変だと思うよ。
俺は趣味でやってるからいいんだけど。

135 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 15:53:12 ]
>>132
それをMyFuncの最後に書いてみたのですが、結果は変わらず…。
使い方が間違っているのでしょうか。

↓メモリ表示結果

0
68435968
7213056

136 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 16:11:06 ]
freeしてもOSにメモリが返されるわけではないし、
ワーキングセットなんてプログラム上の確保した量とはあまり関係がないし。

137 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 17:25:11 ]
>>132
前者はダメだ。
非constな参照引数に一時オブジェクトは渡せない



138 名前:デフォルトの名無しさん [2008/08/12(火) 17:51:38 ]
質問させてください。
WINAPIでは、戻り値にTRUEかFALSEを多用している様に思うのですが、これは0か0以外の数値を
表しているのでしょうか?

たとえばマウスの左ボタンをクリックして、クリックされたら数字の1、されなかったら0を返す、という事?
いまいちイメージが掴めないのですが、0以外の数字が返された場合はその関数を正常処理する、という感じですか?


139 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 18:11:12 ]
MBCSの場合charに1バイトと2バイトの文字を混ぜた文字列を設定したとき
char[x]が1バイト文字か2バイト文字の前か後ろかを見分ける方法はありますか?



140 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 18:27:31 ]
>>138
あまり気にせず、結果をif文その他の条件判断で使える、位に思っていればいい。

141 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 18:29:38 ]
>>140
そうなんですか
なんかしっくりこなくて戸惑ってました。ありがとうございます

142 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 18:30:04 ]
>>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は何か決まりごとが?

144 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 18:39:52 ]
>>142
つまり、コードによるけどふつうの1バイト文字と同じものが2バイトの前か後ろに
出る可能性はあるということですね

2バイト文字に含まれない文字ってないですかね〜
区切り文字として都合のいい文字を探してます

145 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 19:52:52 ]
>>136
なるほどです、ありがとうございました。

146 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 21:16:15 ]
>>144
所謂ShiftJISの2バイト目には、(単独なら)アルファベットと同じ文字コードも来れば1バイト目と同じコードも来る。
従って、前に遡って判定するか素直に頭から判定するか、対策が必要。
尤も、0x40未満のコードはShiftJISに使われないので'/'でも';'でも区切りに使えなくはないと思う。

147 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 21:29:37 ]
>>143
1の数字は、同じカテゴリでかぶらないようになってれば適当で良い。

2は、ダイヤログの大きさ。後ろ二つが幅と高さ。適当に変えてみるとわかるよ。



148 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 22:31:47 ]
>144
タブコードはダメ?

149 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 02:03:57 ]
>>146
0x40以下のコードを調べてみようと思います
ありがとうございました


>>148
タブとか改行コードとか使うのが無難ですかねやっぱり






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<181KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef