★初心者にVisual C++を教えるスレ★ Part27
1 :
デフォルトの名無しさん :
2007/09/10(月) 12:20:27 1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。
質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html http://myu.daa.jp/osiete/ ■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
(MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。
過去スレ、関連スレなどは
>>2-5 。
2 :
デフォルトの名無しさん :2007/09/10(月) 12:21:02
3 :
デフォルトの名無しさん :2007/09/10(月) 12:21:37
4 :
デフォルトの名無しさん :2007/09/10(月) 12:22:16
\
ヽ
____ }
_, -‐ 二 -―‐- 、`ヽ、_
ィ=ー-、/ ヽ `ヽ、
, '´ \ \
/ / `ヽ 丶 ヽ
, '⌒ / /: / /! l 丶 ヽ ',
/ /// / / / / l ヽ \ ハ l
〃 / l l | l ∨' ヽ ヽー-、 lヽ l l
. !l l | | j_{ _,ノ \ l\`ー弋ニ T l j | |
. !{ | l l l 乏≠ミ \l >fテ示ヾjl | ./ l i l、
ヽ ヽ .N ヽ l{i |ヘiii::l lヘiii:::} i}| j∧リ. i lヘ
\ヽ j小 と)_;ソ r'_;;(つ/ イノ ヽjハ
`ト ハ ゚:::::::. ' .:::::゚ __/‐<ヘ ヽ ヽ
>>1 乙でごわす
l: 八 (⌒¨¨⌒ヽ 〃´ ̄`ヽ、ム \ヽ
ノ l> 、 ´ ̄ `´ / `ヘ ヾ',
/ l {>ー <{ ∧ i \
l /l l / l / ∧ l \
| l∧ ` ヽ _ / l // ヽ |ヽ、 ヽ
警告のレベルを最大にすると、他人のライブラリで警告だらけになります。 こういうときは、 #pragma warning(push, 0) #include "....h" ... #pragma warning(pop) で、いいでしょうか
7 :
デフォルトの名無しさん :2007/09/10(月) 22:58:00
これまでVCを使ったことはありません。 俺は今後VCを使う日がくるのでしょうか? (VS2003は持ってる) 本を整理中なんですが、VC、MFC、Win32API、VBあたりの入門的な本を 売っちゃうか悩み中です・・・。
売れ
9 :
デフォルトの名無しさん :2007/09/11(火) 08:40:05
std::istream から >> で std::string を読みだす時、 空白でストップしますが、二重引用符で囲んでいる場合は その間は空白も読み込むようにはできないでしょうか? ファイル名をストリームで読み込もうとしているのですが、 空白を含むファイル名も扱えるようにしたいのです。
ダブルクォーテーションで括っている間だけというのは無理だろう。 自前で解析するしかないと思う。 空白も含めて読み込むことは、 std::getline関数か、std::noskipwsマニピュレータと>>を使うかで可能。
次立てるときはC/C++の質問はそっちのスレへ誘導するようにしてほしいな
>>7 入門書は売っちゃってもいいけど、中級以上
APIの本とかは残しておくのがいいと思う
自分の場合、今でもPC9801の本とか、ターボアセンブラについていた、オペコード一覧とか
重宝してるよ
13 :
デフォルトの名無しさん :2007/09/11(火) 13:20:16
次立てるときはC/C++の質問はそっちのスレへ誘導するようにしてほしいな
ソースは見てないが マクローリンのスペル違うぞw でもこっちの方がなんかいいなw
>>13 どうやってデバックして問題ないと判断したのか、その過程を示せ。
-3から3まで0.1刻みのループでは60回繰り返すけど、それは確認したのか。
使っり?
18 :
13 :2007/09/11(火) 18:39:07
いや、宿題スレにあった問題を解こうと思って 解いてる最中に、どう表示されるかを見ようと思い デバッグ→OK デバッグ無しで実行→BAD で、デバッグポイントつけてステップインして デバッグしまくっても、問題なく終了。 で、VS2005のどっかがおかしくなったのかと思い VSを修復。 そんで再度、デバッグ無しで実行したら 数値は出て、エラーは出ませんでした。 ま、そんなところです。
縦読みでおk
>>18 宿題スレの確認ならまあその程度だろうけど、それでは普通デバッグしたことに
ならない。
>>16 で答え言ったつもりだったんだけど、60要素分の書き込みに対し、
領域を10要素分しか確保してないからオーバフローして領域破壊しているだけ。
計算の目的知らないけど、単純に考えれば、Ansの第3パラメタが60か、または
Ans関数内のdxの刻みが0.6か、どちらかが違っていると思う。
21 :
デフォルトの名無しさん :2007/09/11(火) 19:33:01
驚愕の新事実発覚!!! Windowsで外字「㈰」を含むファイル・フォルダ名が、コピー、削除、リスト表示もできません。 CopyFile()、GetCurrentDirectory()などで取り扱えません!!! でも、dir コマンドはできます。dir>file とリダイレクトすると、fileの中で この外字は ? に変換されてしまいます! 誰か回避策教えてちょんまゲ。 文字コードは"\x85\x40" です。よろピク。
自分の中での驚愕の新事実発覚は心の中で唱えてろ
たまたま使えてしまう場合もあるけど 使えない字は使ってはいけない
24 :
デフォルトの名無しさん :2007/09/11(火) 20:02:37
でも、dir とか、ファインダーからは使えちゃうんです。 同じ外字(機種依存文字)でも①などはおk。
うるさい死ね
その文字はU+3230だろ。 シフトJISに対応する文字が無いから化けるだけじゃねえの? Unicode系のAPIを呼ぶように修正しろ。
>>24 ①は外字でもないし、
Unicodeに収録されているので、もはや機種依存文字ですらない。
28 :
デフォルトの名無しさん :2007/09/11(火) 20:46:09
化けるのは問題ないですが、アクセスできずにエラーになってしまうのが困ります。 このフォルダーがあることさえも検出できません。 このフォルダを dir>file としてfileを見ても アスキーの'?' に置き換えられているので ㈰ があることが検出できないのが問題です。消そうと思ってもアクセスできません。
29 :
デフォルトの名無しさん :2007/09/11(火) 20:49:18
30 :
デフォルトの名無しさん :2007/09/11(火) 20:53:59
>>26 Unicode系のAPIとは何でしょうか。教えていただければ幸いです。
>>30 末尾がWで終わるWin32API群。
例えばCreateFileに対してCreateFileWといった具合。
文字や文字列引数がみなWCHAR (wchar_tのtypedef)を使ったものになっている。
32 :
デフォルトの名無しさん :2007/09/11(火) 21:17:14
>>31 ああ、見たことあります。やってみます。
アリガト
シネ
マ
処女
喪失
童貞
38 :
デフォルトの名無しさん :2007/09/13(木) 21:13:56
Visual C++ 6.0を使いたいのですがOSはXPでも大丈夫なんでしょうか? Visual Studio とは何でしょうか? 初心者ですいません・・・
「Visual Studio とは何でしょうか?」というレベルなら、まずはVisualStudio2005EEを使ってみてはどうだろうか。 VisualStudioはVC++やC# VBなどでWindowsを開発できる統合開発環境です。 アナルは開発できません。
41 :
デフォルトの名無しさん :2007/09/13(木) 22:25:14
VC6はお勧め 2005EE入れたけどVC6の方が良い
VC6の付属STLはカス C++98の準拠度もカス よってC++を使うならVC6は
43 :
デフォルトの名無しさん :2007/09/13(木) 22:36:43
Windows XP ではどうかしらないけど Windows 2000 に Visual Studio 6.0 いれて MediaPlayer 9 いれたら Visual C++ Run-time Error で エクスプローラがめちゃめちゃ落ちるようになたな。 あまりおすすめはしない
>>43 Visual Studio入れたら何かとエラー起こすのは昔からお約束。
>>43 MediaPlayer 9 いれたら何かとエラー起こすのは昔からお約束。
Windows 2000 いれたら何かとエラー起こすのは昔からお約束。
M$とはエラる事と見つけたり
2005EEに実行がないんですけど。2008βでは実行してもテストがどうのっていわれて コンソールもでないし。ソースはよくあるmainにcoutだけのやつです。
>2005EEに実行がない シュールだ。
ソースをプロジェクトに加えてなかった・・。#include <iostream.h>とやるとファイルがないと 言われるし.hを取ると今度はcoutが定義されてない識別子。実行はデバッグなしで開始で いいんですよね?
#include <iostream> using namespace std; もっと基礎を勉強しろ
分かりました(・◇・)ゞ
ひさしぶりにVC++6.0で勉強再開したのですがSP6が出ていたので当てましたが バージョン情報には変化がありません。確認する方法はないのでしょうか。
GetDlgItemでハンドルの取得に失敗してるようなのですがどんな原因が考えられますか。 コントロールのIDは合ってます。HWNDはダイアログボックスの引数です。
まだコントロールができてない
能力不足 コントロールのIDは合ってるつもりなだけ。HWNDにダイアログボックスのハンドルを指定していない。 HWNDがスコープの範囲外である。
ハンドルをグローバルにコピーしたものを使うようにしたら解決しました。 。ありがとうございました。
58 :
デフォルトの名無しさん :2007/09/16(日) 21:01:42
CDC* pdc1 = GetDC(); CPen *oldPen; oldPen = pdc1->SelectStockObject(BLACK_PEN); これで error C2440: '=' : 'CGdiObject *' から 'CPen *' に変換できません。 とerrorが出るのですが、本に書いてあるとおりやってるだけなのですがなぜダメなのでしょうか?
59 :
58 :2007/09/16(日) 21:10:10
ごめんなさい CDC* pdc1 = GetDC(); CPen myPen(PS_SOLID, 1, RGB(0, 0, 0)); CPen *oldPen; oldPen = pdc1->SelectObject(myPen); です
>>59 ×oldPen = pdc1->SelectObject(myPen);
○oldPen = pdc1->SelectObject(&myPen);
61 :
58 :2007/09/16(日) 21:36:14
62 :
デフォルトの名無しさん :2007/09/17(月) 00:12:35
ぜったい本の通りやってないだろバカ
63 :
58 :2007/09/17(月) 00:29:01
いえ本が間違ってました 工学社 Visual C++ .NET ゲーム制作教科書 片山幸雄著 の39ページ40ページです もちろん他の部分から類推できるものなのでそれができなかったのは私がバカなのですが
64 :
デフォルトの名無しさん :2007/09/17(月) 00:53:59
アナログ時計のプログラムってどんな感じなんでしょうか・・・ デジタルなら簡単に出来るんですが。 どなたかご教授お願いしますorz
>>64 文字盤の上に、時分秒に従い角度を計算して針を書くだけ
注意点としては針を進めるとき、下の針を消してから新しい針を書くのではなく、
ダブルバッファリングという手法を使って画面を更新すること
これだけ注意すれば問題ないはず
66 :
デフォルトの名無しさん :2007/09/17(月) 01:23:37
>>65 ダブルバッファリングですか。
難しそうですが、頑張ってみます。
ありがとうございました。
プログラミングWindowsのサンプルは消してから書く方式だったと思う サンプル動かして見たけど特にそれで問題ない
68 :
デフォルトの名無しさん :2007/09/18(火) 01:21:43
DLLプログラムで、自分自身が動作しているパスを取得したいのですが、 どうすればいいのか解りません。よろしくお願いします
GetModuleFileNameに自分のインスタンスハンドル渡す。
70 :
68 :2007/09/18(火) 02:21:26
眠いのですが、どうすればいいのか解りません。よろしくお願いします
眠りましょう。 眠れなければ医者へかかりましょう。
いつかは寝なければいけないときが来るのだから寝とけ
どうせそのうち寝るのなら、今はがんばって起きていたい
でも眠いんだろ?
俺の経験から言うと 無理して徹夜するよりきっぱり定時に帰って 明日朝からしゃきっとがんばった方が効率が良いと思って 早朝7時くらいに出社して徹夜するはずだった分を補填しようとするけど 結局5分遅刻して(;´Д`)
あるあるw
意味わからね。
正解
vc6でMFC無しでプログラミングしています。 vector< char >のサイズを動的に確保する配列を使いたくて、 vector <char> *vec; vec = new vector<char>[ size ]; delete[] vec; としたのですが、コンパイル時にdeleteのところで、「配列のdeleteは合わないから*(ポインタ)と解釈するよ」 という旨のワーニングが出ます(開発環境が手元にないのでうろ覚えです) 実行するとdeleteの行で落ちます。 配列の形式でnewしたら配列の形式でdeleteすると理解していて、上記のように書いたのですが、 どういう形でdeleteするのが正しいのでしょうか。 よろしくお願いします。
>>80 何か間違ってないか?
VC6起動して試したけどワーニング出ない
実行エラーにもならない(上記3行だけだけど)
vector<vector<char> > でいいじゃん
そんなvectorの使い方はじめて見た。というか意味不明。
>>84 二次元データを扱うために、vector<vector<float> >なんて使い方するのは常套手段だが。
>80の使い方なら確かに気色悪いと思う。
>>85 いや、当然>80の話よ。vectorの意味を理解してない気がするので。
vector<char> vec(size);
こうしたいだけだよな
>>80 は
C++の話はどうでもいい
list<vector<char>> vector<list<vector>::iterator> でいいじゃん
vector<char>使うならstd::stringを使いたい気分
boost::ptr_vector<std::string> str_vec(size);
>>83 死ね って言ってる理由が分からないんだが。
vector<vector<char> > は何か問題あるの?
94 :
デフォルトの名無しさん :2007/09/21(金) 22:15:06
リソースエディタ経由ではなく直接リソースIDを確保したいときどうしたらいいですか? Resource.hにじかに編集?
C++でBot作れますか?
作れない方がおかしい
>>94 resource.h を直接編集してますね
個人的に気をつけてるのは、プロジェクトを閉じてから編集を開始するのと
編集後.apsファイルは削除しておくことくらい
VC++6で、キー入力を捕まえたいんですが、 設置してあるボタンを押したあとだとキー入力を受け付けてくれません。 原因は何でしょうか?
99 :
デフォルトの名無しさん :2007/09/22(土) 00:03:53
Win32API で CreateWindowW( とすると引数の情報が出てくるんですけど CreateWindow( では情報がでてきません。 これが普通なんでしょうか? それとも何かファイルが壊れててでなかったりしてるんでしょうか?
>>98 もっともっともっともっともっともっともっともっともっともっともっともっともっともっともっと詳しく。
>>99 お前バカじゃねぇの
環境書けよ
どうせ2005だろ?仕様だよ
102 :
デフォルトの名無しさん :2007/09/22(土) 00:19:11
>>100 すみません。
ボタンを押した後、フォーカスがそこにあっていて
キー入力を認識しないみたいなんです。
ボタンが押されたときは
case WM_COMMAND:
switch(LOWORD(wp)) {
・
・
・
case ID_CF:
if(field_flag==FIELD1) field_flag=FIELD2;
else field_flag=FIELD1;
InvalidateRect(hWnd, NULL, TRUE);
break;
}
のようなかんじで、
キー入力の受け付けは
case WM_KEYDOWN:
GetKeyboardState(state);
if(state[VK_UP] & 0x80){
if(mode_flag==HAITI){
・
・
・
}
でやっています。
わろた
インラインアセンブラが使え無い言語は 基本的に劣っていると考えたい・・・
105 :
デフォルトの名無しさん :2007/09/22(土) 00:34:16
すみません、超初心者なんで・・・どうしたらよいのでしょうか?
ワロタら良い
原因がわかりました。 どう調べたらいいのか分からなかったので・・・ ありがとうございました。
ソーセージ買いに行ったら自己解決しとった
今からオナルんか? まんこ臭くなるから気を付けろよ
エラー デバッグ ブラウザ ツール
http://www.mozilla-japan.org/ シンプル プログミング ツール
http://proforceone.web.fc2.com/ 素因数分解サンプルプログラム
Calculation processing にコピーして[RUN]
A=2*3*5*11*13*17*19;
x=A;br();write(" "+x+" ⇒");
for(i=2;x>=i;i++){if(0==x%i){k=0;
for(j=2;(i>=j)&&(1>=k);j++){
if(0==i%j){k++;}
} if(1==k){write(" "+i);}
}}
インラインアセンブラじゃなくてインラインフォートランにすればいいのに
112 :
デフォルトの名無しさん :2007/09/22(土) 03:22:01
strtokがエラー出るんだけどなんで? strtokのソースの中で検索ヒットした文字に\0で置き換えするところでアクセス違反起きてる ちゃんと文字列の中アクセスしてるはずなのになんで?どうして?
お前がバカだから
114 :
デフォルトの名無しさん :2007/09/22(土) 03:32:47
マジで?
115 :
デフォルトの名無しさん :2007/09/22(土) 03:35:13
くまった
116 :
デフォルトの名無しさん :2007/09/22(土) 06:13:46
ローカルの変数にコピったら動いた!!!!1 頭いいかもしんない。ここのみんなじゃ無理だったかも・・・
お前の事だからそんなこったろうと思ったよ 頭わるすぎw全米がわろた
>>116 無理だったね。
112に書いてあることだけで答えを導き出すには、
おそらく一級のエスパーが必要だったろうから。
>>116 正解だったね。
113に書いてあるとおりで答えを導き出せないのは、
おまえが超級のパーである証明だったろうから。
VC++5.0(mfc42のヤツ)のインストールについて教えてください。 WindowsXPが出始めた頃にVC++5.0をインストールして普通に使えていたのですが、 XPのSP2を入れたらInfoViewerが表示できなくなってしまいました。 (HTTP 404 - ファイル未検出)とか言うエラーが表示されます ググッったら、以下のような情報を見つけました。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DISABLE_MK_PROTOCOL に新規キーで「MSDEV.EXE=dword:00000000」を作成 が、そのときにはVC++5アンインストールと再インストールをしてしまっていました。 (上の情報を早くみつけていれば、レジストリの修正だけですんだのに。。) インストールしなおしたVC++5.0では、上記のレジストリキーを設定しても やはりinfoViewの内容を表示させるとエラーになります。 なにか解決方法をご存知の方がいらっしゃったらだったらご教授ください。 よろしくお願いします。
新しいのにする
122 :
デフォルトの名無しさん :2007/09/22(土) 11:11:35
CDC *pdc = GetDC(); pdc->Ellipse(x1, y1, x2, y2); とかのEllipseの引数を自分で作ったクラス(myclass)にしたい場合 CDCクラスにEllipse(&myclass)みたいなのを作る myclassにEllipse(&CDC)みたいなのを作る CDCクラスとmyclassを継承したクラス(myCDC)にEllipse()を作る(1行目もmyCDC *pdc = GetDC();) どれが普通なんでしょう
>>97 サンキュー
やっぱそんなかんじか。マイクロソフトはホントダメだな。
マイクロソフトがダメなんじゃなくてお前がダメw
JavaScriptに近いC++ありませんか?
C++0x
>>122 フレームワークの中身を書き換えるなんて原則もってのほか。だから1はない。
3番目の案は悪くないが、GetDCがCDCへのポインタ返すのに
myCDCへのポインタとして扱うことは、
(これくらい動くだろうが)規格上、未定義なので気持ち悪い。
仮にGetDCがmyCDCへのポインタを返すように書き換えるとしても
それは1と同じ理由で却下。
残るのは2番。
人はそれをヘルパ関数と呼
129 :
デフォルトの名無しさん :2007/09/22(土) 16:42:49
CButtonとかはリソースエディタで追加するとそのまま使えるのに 手で追加するとなぜCreateを呼ばないといけないの? リソースとして追加した場合なんでCButtonのインスタンスが無いの?
ボタンはコントロール C++のクラスではない CButtonはそれをMFCで扱うためのクラス
ダイアログ上のコントロールは、 ダイアログ作成時にWindowsが作る(そのためのダイアログだ)。 あとは、作成されたコントロールとソース上のCButtonとを 関連付けるだけなので、Createする必要がない。
>>130-131 なるほど。。つまり以下の様に理解したけどOKですか?
(1)リソースとしてボタンを追加した場合、MFCのダイアログクラスが初期化のときに自分でそのボタンをCreateしている。
(しかもダイアログクラスはボタンが必要だという情報をリソースファイルから得ている?(だってソース上は見当たらないからなぁ。))
(2)リソースとして追加したうえ、変数を割り当てるとそのCButtonクラスと、内部で生成したボタンコントロールのウインドハンドルをどこかで関連付けている。
(3)リソースエディタを使用しない場合、ダイアログはそのコントロールを作成しない。だから自分でCreateを呼ぶ必要がある。
>>132 >(2)
つ[OnInitDialog()]
>>133 ありがとうございます。ステップ実行してOnInitDialogでなんかごにょごにょして、その過程でCButtonのメンバが有効な値をもつようになったの確認できました
教えるだけ無駄なようだね
本当は教える知識がないんでしょ?w
えぇーどんだけーってレベルでしょ
いかほどぉ~
>>132 (1)、「MFCのダイアログクラス」ではなく、「Windows」。
140 :
デフォルトの名無しさん :2007/09/23(日) 00:15:44
まず何から勉強すればいいですかね?
>>140 C→C++→Cでwin32apiをかじる→MFCでわけわかんなくなる。
→それでもがんばる→疲れる→Cが恋しくなる→でもC++でがんがる
→どうでもよくなる。
Cを少しかじる→C++でわけわかんなくなる→MFCをかじる→感動する→C++も分かった気になる →win32apiも分かった気になる→Cが恋しくなる→久しぶりにCに戻ってみる→ MFCが恋しくなる→でもがんばる→むかついてどうでもよくなる。
Cを少しかじる→むかついてどうでもよくなる。
visual C++ からg++なんかの外部のコンパイラを使うにはどうすればいいの?
cl.exeを置きかえる
カスタムビルドステップ
むりむりかたつむり!
148 :
デフォルトの名無しさん :2007/09/23(日) 16:42:12
WM_KeydownのところでOnKeyDownを追加したんですが、 キーボードから何を押してもそこへ飛んでくれないんですが これって何か初期設定みたいなのが必要なんでしょうか?
WM_KEYDOWN を受け取ろうとしているウィンドウにフォーカスが当たってないんじゃない? たとえば、ダイアログ上のエディットボックスでキーを押した場合、 WM_KEYDOWN が飛んでくるのはダイアログじゃなくてエディットボックス
150 :
デフォルトの名無しさん :2007/09/23(日) 17:19:31
>>149 ダイアログをクリックしてから押してるんだけどうんともすんとも
ちなみにダイアログだけのプログラムでダイアログにはボタンが6個あるだけです
151 :
デフォルトの名無しさん :2007/09/23(日) 18:28:26
Visual Studio2005使って、Windoxsフォームアプリケーションやってるけど リソースの使い方がわからない…
がんばれ
Windoxs
>>151 すっげーなお前
Visual Studio2005使って、Windoxsフォームアプリケーションなんかやってるんだ
155 :
デフォルトの名無しさん :2007/09/23(日) 18:54:42
>>155 次期SPや修正パッチなどの出荷用テスト
私、昨日買ったばっかなんですが、勉強したくて
初心者向けの製品は別にあるよ
本か何か買ったの? それ見てやればいいんじゃね?
160 :
デフォルトの名無しさん :2007/09/23(日) 21:31:01
最近のWindowsアプリケーションはいったいどんな種類があるの? 自分はダイアログベースアプリが80% 10%はDLLやStaticLib 時々SDIアプリ たまーにActiveX GUI系で最近の流行ってなんですか?
スリープ(モニタ電源OFF)から復帰すると動作がおかしくなってるのですが なにか特別な処理をする必要があるのですか?ソフトはアナログ時計です。 なおPC不調でサスペンドから復帰できなくなってるのでサスペンドの場合はどうなるのか 不明です。
サスペンドの場合はPCの電源が即座に切れ二度と起動しなくなります。
163 :
デフォルトの名無しさん :2007/09/25(火) 22:01:23
Visual C++と、標準C++って何が違うんですか?
Visual C++は商品名で標準C++は言語名
Visual C++で、入門者がMFCを最初にやるのは馬鹿ですかね?
C++ をよく理解してるんならいいんじゃないのかな。 でも Windows プログラムの動く仕組み理解しておいた方がいいんじゃないかな
VisualC++で、キーボードからの入力をテキストファイルに保存したいんですけど、どうしたら出来ますかね?
1)キーボードから入力を受け取って 2)ファイルに書き込む といいよ
ついでに特定のサイトを見ているときだけ保存したいんですけど、どうしたらできますかね?
はい
173 :
デフォルトの名無しさん :2007/09/26(水) 07:28:10
vs2005ですが、デバッグの際、 stlのvectorとかでエラーが出たときに なんかウィンドウが出るだけでデバッガの方に出力されないので どこでエラーが出てるのか分かりにくいです。 どうにか場所を特定する方法ってありますか?
174 :
デフォルトの名無しさん :2007/09/26(水) 08:12:35
キーボードからの入力を受け取りたいんですけど、やっぱりAPIとかの知識がないとだめなんですかね?
キーボードからの入力以前に、やっぱりAPIとかの知識がないとだめ人間です。
>>173 つブレークポイント
まず適当にブレークポイントを設定して自分のコードのどの場所でエラーが出るか特定する
次にその部分で使ってる関数の各ステップにブレークポイントを設定してどの場所でエラーが出るか特定する
それを再帰的に繰り返していくとランタイムアサートのマクロ構文に辿り着く筈
178 :
デフォルトの名無しさん :2007/09/26(水) 20:53:45
質問です。 struct Base { void *p; virtual ~Base(){} }; struct Hoge : public Base { Hoge(){p = new HogeData;} }; と、このように IData *pを派生先で共有したいと思っています。 派生先ごとにpに何を生成するかは決まっており、 Hoge なら new HogeData Main なら new MainData John なら new JohnData といった具合です。(xxxData たちは全て、IDataを継承しています) この状態で Hoge *pHoge = new Hoge; と、VisualSturio6.0のデバッガ「変数ウインドウ」で見た場合、pはあくまでvoid*型なのでそれ以上データを見ることはできません。 しかし、プログラマである私が決めたルールとして Hogeの時のpは*HogeDataとして扱うというルールがあります。 これをデバッガに認識させる方法はありませんでしょうか? ・Base *pHoge = new Hoge; とした場合、pHoge->pをHogeDataだと認識する必要は無い(高望みすぎるので) ・void *p; のかわりに IData *p; にしてみたが、IDataとしてしか認識してくれなかった(HogeDataの持つ変数は見られなかった) ・デバッガに認識させるために、何か特別な記述を加える労力は惜しまない ・クイックウォッチを使ってきちんと手動で型認識させてやれば見られたが、毎回手動はきつい(自動にできる方法があるならそれでもいいかも) よろしくお願いします。
1行間違いです >と、このように IData *pを派生先で共有したいと思っています。 ↓ と、このように void *pを派生先で共有したいと思っています。 曖昧な表現でした >pはあくまでvoid*型なのでそれ以上データを見ることはできません。 ↓ つまり、変数ウインドウ上のpの頭のところに[+]記号が出てこないということです
>>178 仮にBaseはpを持っている必要がないとすれば、
BaseにIData* GetData() = 0;のようなメンバ関数を用意して、
個々の派生クラスで、メンバ変数pとpを返すGetDataを定義するという方法が思い付く。
派生クラス毎にpを持てば、HogeDataなど特化した型にできるだろう。
void pointer…(ゴクリ
>>180 お返事ありがとうございます。
派生クラス毎に持つという案は確かに考えたのですが、
Base <- Hoge <- HogeEx
とやったときに複数ポインタが存在することになってしまいます。
(Baseには無しとしても、Hoge分とHogeEx分)
IData* GetData() =0; の手法ですが、そのGetDataを呼び出す記述がソースに無い限り
いきなりブレイクして変数ウインドウを見ても表示されないのではないでしょうか。
一応今も非virtual なGetDataをそれぞれ持つようにさせ、クイックウォッチの時の記述が統一的になるようにはしています。
(ただ、それでもクイックウォッチ呼び出すのかなり面倒なのですよね…)
template <typename T> struct Holder : public IHolder { Holder() : p(new T) { IHolder::p = p; } T* p; }; を作って typedef Holder<HogeData> Hoge; typedef Holder<MainData> Main; みたいに使えばどうか? 見るだけならrelease時はT* p を持たないバージョン作っといてそれを使うようにすればいいし
変数ウインドウで値みなきゃデバッグできないわけじゃないし それだけのためにごちゃごちゃソースいじるのも頭わるすぎる
185 :
デフォルトの名無しさん :2007/09/26(水) 21:54:44
なるほど、テンプレートですか 実験してみようと思います。 しかし逆に考えると、テンプレート使うくらいしか方法が無いってことなんでしょうかね 私の妄想上の記述ですが struct Base { void *p; virtual ~Base(){} }; struct Hoge : public Base { union { void *Base::p; HogeData* pHogeData; } Hoge(){p = new HogeData;} }; こんなことできないもんでしょうかね?
>>184 確かに正論だと思います。
なので「簡単に変数ウインドウで確認するための方法」があるなら知りたいわけです。
とてつもなくソースが難読になってしまうのなら、やらないだろうと思います。
もちろんできますお でもこうすればIHolderがいらない子になってしまう template <typename T> struct Holder { Holder() : derived(new T) {} union { IData* base; T* derived; }; }; HogeやMainもポインタや参照経由で多態性を持たせるなら もっと面倒臭くなるし下手すりゃVC6ではコンパイルできなくなるかも
MFCのランタイムクラス情報を使っていれば、 自動で派生クラスの内容も表示できたりするけど、 今回はそれは無しだろうしなあ。
自分でautoexp.datを書くってのはどうだろう。
>>187 定義済みの変数を、unionで「こいつとも共用体ってことで」って後付けできないもんでしょうか
>>188 MFCはなしですね…。携帯電話用なもので
>>189 ぐぐってみましたがこれは面白そうですね。ちょっと調べてみます
autoexp.dat を使えばもしかしたらいけそう…。 と思うのですが、ポインタの型変換の書き方がわかりませんね… Hoge=b=<((HogeData*)p)->b> では認識してくれないようです。 どなたかautoexp.datについて分かるかたいらっしゃいませんでしょうか もしくは詳しいページor書籍などを紹介していただけると嬉しいです
192 :
デフォルトの名無しさん :2007/09/28(金) 15:45:55
Visual Studio 2005 Standard Edition を購入しようとしています。 今2003版を持っているので、アップグレード版を買えばいいとは思うのですが、 2003のユーザー登録がしていなといけないとか、 同じパソコンにインストールしないといけないとか、 アップグレード版にはそういった制約があるのでしょうか? 教えて下さいませ
ない
194 :
192 :2007/09/28(金) 17:14:14
>>193 ありがとうございます。
もし2003を持っていなくても、普通に動くという事?
インストール時に2003のディスクチェックくらいあるだろう
ディスクチェックもなければアクチもねえぞ
197 :
デフォルトの名無しさん :2007/09/29(土) 00:46:19
#include "gameframe.h" void GameFrame::doMainLoop(){ ChangeWindowMode(TRUE); if(DxLib_Init()==-1) return; SetDrawScreen(DX_SCREEN_BACK); while(ProcessMessage()==0&& CheckHitKey(KEY_INPUT_ESCAPE)==0){ ClsDrawScreen(); ScreenFlip(); } DxLib_End(); とソースコードをコンパイルしようとしたら・・・ こんなエラーが出てきましたどうしたらいいでしょう?? ↓↓ エラー E2090 型限定子 'GameFrame' がクラス名または名前空間名ではない エラー E2040 宣言が正しく終了していない
エラーコードについて msdn で調べてみるか google 先生に聞いてみると良いよ。
教えるだけ無駄そうだな C++勉強したことある?
今までVBばっかり使ってたのですが、 最近Visual C++に興味があります 何から始めたらいいでしょうか?
201 :
200 :2007/09/29(土) 07:27:18
書き忘れました VS2005です
C++やったことがないとVisual C++は無理
?
204 :
200 :2007/09/29(土) 09:06:42
そうですか(><; どうも
205 :
デフォルトの名無しさん :2007/09/29(土) 17:57:30
coutってなんて読むのでしょうか?
シーアウトかな
コウティー
208 :
デフォルトの名無しさん :2007/09/29(土) 19:37:55
コンソールアウト
コウト
の中では
兵器
な
const int const_cout_count = 0;
215 :
デフォルトの名無しさん :2007/09/30(日) 08:31:56
昔のVCのプロジェクトをビルドしようとしているんですが、 そのプロジェクトではnasmというコマンドを使ってアセンブラファイルをアセンブルしようとしていました。 そしてVC6ではnasmは見つからないらしく、コマンドが見つかりません、ってエラーになります。 nasmはVC6ではなくなってしまったのでしょうか?代替のアセンブラはありますか?
昔のVCにnasmついてたっけ? 自分で作ったプログラムかそれ?
プログラムはネットで拾ったものです。
ググれ。nasmならsourceforge.netで公開されている。
ありがとうございます。ググッて来ます
おかげさまで今アセンブルできました!! ありがとうございましたm(_ _)m
nasmはintel表記に従っているから好き。 gasは独自表記に拘っているから嫌い。
222 :
デフォルトの名無しさん :2007/09/30(日) 22:17:09
リソースファイルで設定した製品バージョン VALUE "ProductVersion", "0, 0, 0, 1" をプログラム中から取得するにはどうすればよいのでしょうか?
>>222 GetFileVersionInfo + VerQueryValue
224 :
デフォルトの名無しさん :2007/10/01(月) 06:18:06
なるほど、一旦できた実行ファイルから取得するしかないんですね。 もっと静的にコンパイル時に取得できる物だと思っていました。
exeはコンパイルし直さない限り変らないから静的な情報だろ
226 :
デフォルトの名無しさん :2007/10/01(月) 08:16:41
>>225 それはそうなんだけど、コンパイル時に決定できるなら
よかったなぁ、と思って。マクロの中で使いたいから。
Resource.hあたりに、"0, 0, 0, 1"を適当にdefineして、 .rcと使いたいマクロ中でそれ使うようにすればいいだろ!!! とか、言ってみる。
>>226 リソースはコンパイル時に確定していない情報なんだから当然、無理。
# リソースが確定するのはリンク時。
>>226 マクロの中で使う場合でも定数である必要はないんじゃないの?
取得用関数を1つ別に作って、マクロの中でその関数使えばすむ話だと思うけど
231 :
デフォルトの名無しさん :2007/10/01(月) 21:48:11
Win2k3 x64上で64ビットEXEから 32ビットのみ対応DLLを使いたいと思っております。 しかし、MSDNを見ると、上記は不可能であると知りました。 32ビットのみ対応DLLを64ビット対応にする、という方法以外で、 64ビットEXEから32ビットdllを使用できる方法、プロセス構成として 何が考えられますでしょうか? なるべくパフォーマンスが落ちないような実装として何がありますでしょうか? 加えて、最も簡単な方法もありましたら教えていただきたいです。
32ビットDLLを呼ぶEXEを作って、それと64ビットEXEとでプロセス通信したらどうか。 COMで32ビットアウトプロセスサーバ作ってもいいだろうし。 いずれにせよ32ビットEXEを介すことに変わりはないが。
233 :
231 :2007/10/01(月) 21:58:02
>232 ありがとうございます。 プロセス通信というと、Socket通信とかでしょうか? メモリを共有することはできないんですよね。 もしできたとしてもコーディングが難しいのでしょうかね・・・?
ソケットもそうだし、ウィンドウメッセージ、メモリマップドファイル、パイプ、メールスロット、その他色々ある。 用途に合わせて好きなの選べ。
235 :
231 :2007/10/01(月) 22:17:54
>>234 ありがとうございます。やはりプロセス間通信しかないですか・・・
dllには大きなデータを一度に渡すのですが、その場合に最も効率いいものはあるのでしょうか?ここからは自分で調べないといけないのかもですね。
Win32 and COM Development - Development Guides - 64-bit Windows Programming - Running 32-bit Applications - Interprocess Communications 速度的には共有メモリだろうけど、一時ファイルを介するのも一つの手かもな。
237 :
デフォルトの名無しさん :2007/10/02(火) 12:24:13
始めまして、質問させていただきます。 Microsoft Visual C++ 6.0で人が作ったアプリケーション拡張開こうとしてるのですが 開き方が分かりません。誰か教えてください。宜しくお願いします。
「人」に聞きなさい。
239 :
デフォルトの名無しさん :2007/10/02(火) 12:33:56
落ちてたものなので、人に聞くことも出来ないので、ここに聞くことに したのですが、誰か教えてもらえませんか?宜しくお願いします。
アプリケーション拡張ってDLLのこと? 開くって何したいの?
241 :
デフォルトの名無しさん :2007/10/02(火) 14:03:24
>>240 開き方わかります?知ってたら教えてください
VC++ 2005 Express Editionで質問です。 VC++のヘルプをMSDN Express Libraryからmsdn2007年6月版に変更したいのですが msdnから落として完全インストールでデフォルトのC:\Program Files\MSDNに入れました。 VC++でヘルプを開くとき新しく入れた2007年6月版が開くように設定するにはどうしたらいいですか?
>>241 釣り?
DLLは「開く」ものじゃないぞ?
244 :
デフォルトの名無しさん :2007/10/02(火) 16:04:13
そのまま VC++ に取り込んで改造できると思ってんのか 笑っちゃう
>240に対して>241の応答は酷すぎる。「言葉が通じない」の実例だ。
>>241 DLLを開きたいならCreateFileを使え
話をかき混ぜるようなこと書くなw
落ちてたものなのに「人」が作ったとなんで判ったんだろう。
249 :
デフォルトの名無しさん :2007/10/02(火) 17:24:52
人に聞けないってここの住人は…(以下略)
250 :
デフォルトの名無しさん :2007/10/02(火) 17:29:51
>>248 人が作ったのでなければ何だね。
自動コーディングスクリプトかね。
まさか神が造ったなどと言うつもりではあるまい。
落としたつもりは無いんだけど
何このカオス
そこらへんのディレクトリ・ファイルは、管理者権限持ったユーザにしか 書き込み系のアクセス権限がないはず。 管理者権限持って出直してこい。
管理者権限持っているんだが、どうもおかしいな
でもね、昨日の「-1」は、まじでわかっていた 信じて
Vista+UAC
すみません VC6.0 初心者です。 ATLでNTサービスプログラムを作っています。 デバッグ用にメッセージボックスが出せると便利なのになぁと 思うんですけど、MessageBoxを使うと「ボン」と音がするだけで、 見えるところに出てきません。 (処理はそこで止まるので、出てはいるようです) やむなく LogEvent 関数でログを吐き、 イベントビューアで見てますが、NTサービスでは メッセージボックスを出せないものなんでしょうか?
>>259 デスクトップとの対話をサービスに許可
というオプションは試した?
>>260 対話を許可にしたらできました。
どうもありがとうございました(´・ω・`)
Visualstudio 2003 C++で、ダイアログプログラムを作っているのですが ダイアログを編集しているときにグリッドを表示させているのですが、 標準ではグリッドの表示がされていないので、 書式-ガイドの設定-グリッドをチェック グリッドの間隔はデフォルトで6になっているのを3にしてOKボタンを押すのですが VC2003が覚えてくれません。これはやっぱり仕様なのでしょうか? どこかにデフォルトの設定を変えて通常グリッドON、間隔3にできないものでしょうか? ご教示ください、よろしくお願いします。
fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? と、表示されるのですが…どうしたらよいのでしょうか… 文は「試しにこれをコンパイルしてみよう」みたいなのを何度も見直したんで大丈夫なはずなのですが…
'#include "stdafx.h"' をソースに追加しましたか?
それがイマイチわからなかったので追加しない方法もあったようで そっちでやったらコンパイルできました…
266 :
デフォルトの名無しさん :2007/10/10(水) 01:50:25
タイトルバーを持つけどドラッグできないウインドって作成できますか? ウインドを移動させたくないんです。
WM_MOVING をのっとって見るとか?
>>267 こんばんは。早速試してみましがダメでした。:-)
WM_WINDOWPOSCHANGING
>>269 ありがとうございます。しかしそのメッセージを処理させないようにしたら
ウインドの初期化処理でシステムから利用されているらしく、ウインドが表示されなくなってしまいました。
ウインドをドラッグしようとすると枠だけが移動するヤツありますよね?
ドラッグを終えたときだけウインドが一瞬で移動するやつです。
あんな風にドラッグ操作だけは受け付けるけど、放したときに結局元の位置に戻っちゃう、
みたいなのでもいいです。
クレクレですみませんがよろしくお願いしま~す
>そのメッセージを処理させないようにしたら どっちも現在の位置を入れるんだよ
272 :
266 :2007/10/10(水) 02:56:36
こんばんは。皆さん、遅くまでありがとうございます。 いろいろ試してみたのですが、上手くいかないみたいです。 海外のサイトをあさっていて上手く行く方法を見つけました。 HMENU hMenu = GetSystemMenu(mhWnd, FALSE); ::DeleteMenu(hMenu, SC_MOVE,MF_BYCOMMAND); でメニューから「移動」を取ってしまう方法のようです。 お騒がせしました。(^0^)/
273 :
デフォルトの名無しさん :2007/10/10(水) 11:22:33
>>272 試してみたら本当に動かないな。なんて怪しい仕様なんだ……
275 :
デフォルトの名無しさん :2007/10/10(水) 16:22:12
日付の取得方法を教えて下さい
カレンダーを見る
本に書いてない? MSDNにもサンプルコードのってたような気がする
VC2005を使っています。 Bitmapクラスを使って、ビットマップデータを、ファイルではなく、指定したメモリに格納したいと思っています。 ファイル保存しかできないでしょうか? できるのなら、例を教えていただけるとありがたいです。
ファイルとして保存する所までできてたらメモリでもいっしょだろ
つ System.IO.UnmanagedMemoryStream
281 :
デフォルトの名無しさん :2007/10/10(水) 22:35:15
サンプルコードではなく、実用的なアプリケーションのソースを公開してるとこありませんか? MFCでもSDKでOK wwwを検索すると、Viewに”hello world”とTextOutしていかにも、C++/VC++/MFC使えますみたいな のばっか、そんなの誰でもできるっちゅうねんw
OSS
探せばいくらでも見つかるはずだけど 馬鹿には見つからないんだな
>>281 実用的なアプリケーションのソースくらいお前以外誰でも書けるっちゅうねんw
MFC、SDK ぐらいしか検索ワード知らないんだから そういうサイトしかヒットしないのは当たり前
ネットで言語の勉強してたら自然とそういう情報に当たるか見つけ方自ずと分かるっちゅうねんw
287 :
デフォルトの名無しさん :2007/10/10(水) 22:46:21
あらあらあおりと取られちゃったのかしらんw 次元ひくっ
質問の次元が高すぎるっちゅうねんw
あらあらあおりと取っちゃったのかしらんw 次元ひくっ
質問の次元が高すぎるっちゅうねんw
291 :
デフォルトの名無しさん :2007/10/10(水) 22:51:07
>>281 実用的なアプリケーションのソースが理解できないから
お前のレベルに見合ったhello worldしか目に付かないのだっちゅうねんw
逆にどういうキーワードで検索してるのか気になるっちゅうねんw
293 :
デフォルトの名無しさん :2007/10/10(水) 22:56:34
しかし、
>>281 が言ってることも的を射てるよ
webでプログラミング情報を公開してる奴って結構多いが
どれも、同じようなことしか書いていない
彼は恐らく日本語のページしかみてないんじゃないかな?
ぜんぜんプログラミングの知識のないやつとかが、 どっかで拾って来たソースのビルドの仕方聞くことが結構あるから まったく見つけられないやつはかなり特殊
どれも、hello worldしか書いていないページを是非紹介して貰いたい
Visual Studio 2002 C++で開発しております。 現在、ディスプレイの主電源が入っているか確認するプログラムを 作成しているのですが、主電源の状態を取得する事ができておりません。 SC_MONITORPOWERで情報がとれないかなとも試してみたのですが 主電源情報となると取れないようでした。 お手数ではございますが、ご教授のほど、よろしくお願い致します。
>296 そのプログラム考えたやつに聞けば? できる前提じゃないとそういう細かい要求でないと思う
298 :
296 :2007/10/10(水) 23:37:51
>>297 考えたのは自分なので、聞くことはできないです。
その為、主電源情報を取得する方法ご存知の方が
いらっしゃるのではないかと思い、質問させて頂きました。
299 :
278 :2007/10/10(水) 23:38:55
>>279 280
ありがとうございます。bitmapクラスのSaveでファイル保存をしていました。
このメソッドはファイル保存しかできないように見えます。保存先をメモリにしたいです。
UnmanagedMemoryStreamをMSDNで見ましたが、どのようにこの問題の解決のために使うのかわかりません。
サンプルを教えていただけないでしょうか?もしくはBitMapクラスでメモリ保存できるAPIはあるのでしょうか?
うちのモニタは主電源は入りっぱなしだけど パソコン立ち上げた時にモニタのスイッチ押さないとモニタ写らない。 パソコン立ち上げた時にモニタが自動で写るようにしてほしいな
自分ですればいいじゃん
>>299 ぐぐった先頭にあるMSDNのページにサンプルあるんだけどそれではダメなの?
もしかして、サンプルに書いてあるコメントが読めないとか?
仕様勉強するにはやっぱり なんか1冊本を買ってきて最初から読むのがいいですかね
人それぞれ
>>299 そもそも、そのBitmapはネイティブ、マネージのどっちだ?
ネイティブのgdiplus::Bitmapなら、IStream*を引数に取るSaveを使え。
IStreamは自分で実装してもいいし、CreateStreamOnHGlobalを使ってもいい。
マネージのSystem::Drawing::Bitmapなら、Stream^を引数に取るSaveを使え。
渡すStreamは、System::IOのMemoryStreamでいいだろうが、
場合によってはUnmanagedMemoryStreamが適する場合もあるかもしれない。
307 :
デフォルトの名無しさん :2007/10/11(木) 19:05:33
マルチスレッドを実現するためにスレッド作成をしたいと思ってます。 以下はスレッドを作成するクラスのソースです。 このように、staticをつけないとコンパイルエラーになります。 スレッド関数は、必ずStaticにしなければならないのでしょうか? Staticを使わずにスレッド生成を実現したいと思っております。 というのも、Static内の関数を全てStaticにしないといけなくなるので ・・・ スレッド生成でStaticを使わない実現方法があったら教えていただきたいです。 実際、みなさんはどのような方法でスレッド生成を実現しているのでしょうか? class TestThread{ // コンストラクタ、デストラクタは省略 public:void Function() { // スレッド作成 Thread^ main= gcnew Thread(gcnew ThreadStart(ThreadProc)); } private:static void ThreadProc() // staticをつけないとエラー {// 処理 } };
gcnew ThreadStart(this, &TestThread::ThreadProc)かな。
>>308 レス感謝です。しかしコンパイルエラーになりました。
deligate引数が無効と出ました。
>>309 ああごめん。
>>308 の方法は、値クラスか参照クラスにしか使えない。
もし、ネイティブクラスの非静的メンバ関数を別スレッドで実行したければ、
マネージクラスでラップするか、CRTの_beginthreadexを使う必要がある。
311 :
307 :2007/10/11(木) 21:54:57
>>310 マネージクラスでラップ(クラスにrefをつけた)ら、
コンパイルが通り、正常に動作しました。
beginthreadexについては調べてみます。
ありがとうございました。
マネージドとか、最近妙なモンが出てきやがって。。
もう最近でもないような。
:::::::::::::::::...... ....:::::::゜::::::::::.. (___ )(___ ) ::::。::::::::::::::::: ゜.:::::::::: :. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . .. :::: :::::::::.....:☆彡:::: //[|| 」 ||] :: :::::::::::::: :::::::::::::::::: . . . ..: :::: / ヘ | | ____,ヽ | | :::::::::::.... .... .. .:::: ::::::...゜ . .::::::::: /ヽ ノ ヽ__/ ....... . .::::::::::::........ ..: :.... .... .. . く / 三三三∠⌒>:.... .... .. .:.... :.... .... ..:.... .... ..... .... .. .:.... .... .. .... . .... . ..... .... .. ..... ............. .. :.... . ∧∧ ∧∧ ∧∧ ∧∧ .... .... .. .:.... .... ..... .... . ... ..:( )ゝ ( )ゝ( )ゝ( )ゝ デテキヤガッテ・・・. .... i⌒ / i⌒ / i⌒ / i⌒ / .. ..... ................... .. 三 | 三 | 三 | 三 | ... ∪ ∪ ∪ ∪ ∪ ∪ ∪ ∪
おまえらあんなC++もどき使うのやめちまいな!
誰も使ってないような。
317 :
デフォルトの名無しさん :2007/10/12(金) 00:16:45
C#やVBなんかよりは全然いいがなw
リストビューで選択されているすべての項目のインデックスをしらべるにはどうしたらいいんですかね? なんか GetFirstなんたらの後に、GetNextなんたらをやってもうまくいかなかったのですが…
LVIS_SELECTED
>>318 CListCtrl::GetFirstSelectedItemPositionのサンプルコードをよく見直せ。
それでも判らないならコードupしる。
コンストラクタはオブジェクトの初期化処理を行い デストラクタはオブジェクトの終了処理を行う というのは、どういった場面で使われるのですか? いまいち理解出来ないです
コンストラクタは最初に呼ばれて、デストラクタは最後に呼ばれるだけ 利用方法がわからなかったら無理に使わなくてもかまわない
>>322 デストラクタは、freeのような使い終わった後に呼ばないといけない解放処理を書く。
例えばstd::auto_ptrが内部に保持しているポインタをdeleteしたり、
ATL::CHandleはCloseHandleしたりなどという具合。
コードがスッキリするし、例外が投げられたときでも確実に資源が解放されるのがいい。
325 :
デフォルトの名無しさん :2007/10/13(土) 09:06:01
>>322 オブジェクトを作るときに
メンバ変数の値を動的に初期化するときとかにコンストラクタを使う
たとえばある時はメンバ変数をAで初期化したいけど
別の時にはBで初期化したいようなとき。
っていうのがまだまだ初心者な俺の理解です。
たとえば
class obj {
char test;
public:
obj(char ch) { test = ch; }
};
obj testobj('A');
っていう感じかなぁ
あとは動的にメモリを確保する必要があるときとか。
クラスのこともっと勉強していけばわかってくるよ。
326 :
デフォルトの名無しさん :2007/10/13(土) 09:28:46
コンストラクタ=母 デストラクタ=嫁
327 :
デフォルトの名無しさん :2007/10/14(日) 12:45:49
環境XP professional SP2
Microsoft Visual C++ 2005 Express Edition(MSからダウンロードしてます)
SDKインストールすみ(MSからダウンロードしてます)
cppファイルとdefファイルをビルトしたいのですが
以下のメッセージがでてビルトできません。
------ ビルド開始: プロジェクト: aaaaaa32, 構成: Debug Win32 ------
コンパイルしています...
aaaaaa.cpp
c:\documents and settings\administrator\my documents\visual studio 2005\projects\123ler\aaaaaa.cpp(1) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
ビルドログは "file:\\c:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\123ler\Debug\BuildLog.htm" に保存されました。
aaaaaa32 - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
というメッセージがでて ビルドできません
どうも設定の段階でつまずいているようなのですが
また、ここに参考になりそうなコメントをみつけたのですが
どこの設定がまちがえているのかが よくわかりませんでした。
ttp://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=472335&SiteID=7 どなたかエラーを解決する方法をおしえていただけないでしょうか?
よろしくお願いします。
>>327 想像だが、標準ファイル名をダブルクォーテーションで囲んでいるのではないか?
×#include "windows.h"
○#include <windows.h>
Expressの場合は何かのファイルを自分で編集しなきゃいけなかったような
331 :
デフォルトの名無しさん :2007/10/14(日) 22:27:56
327です 328さん、329さん、330さん ご返事ありがとうございます。 手順3というのが よくわからなくて、 (いきなり オプションとかかれても 初心者にはどこにあるかすぐには わかりませんでした)(メニューから オプションとかいてくれるといいかも) いろいろと 試行錯誤して やっと意味がわかりました Executable ファイル Include ファイル Library ファイル のボタンが 右側上に あるのが やっとわかりました。 あと当方のバージョンでは そこも日本語に翻訳されており(カタカナもあり) それで 上からそれぞれのパスを設定したら うまくいきました。 フォルダをクリックしパスの本文をダイレクトに入力するんですね(^ ^;) (アイコンの意味も、私には わかりにくかったです) この理解のために、Visual C# 2005の本(秀O)も買ったのですが 少しバージョンが違うようですね。(2006年8月第1版) ここでのつまずきに かなりの時間をついやしました。 ほんとにありがとうございました。(^ ^) このあと、日付を変更して、別なテスト(実験)をやっていたら Microsoft Visual C++ 2005 Express Editionがうごかなくなってしまいました (今朝インストールしなおしたばかりなのに) (これも承認しないといけないんですね)
あほすぎ C++とC#は別物 オプションなんてたいていツール→オプション(設定)でどのソフトも同じ Windowsは初めて? その程度の知識でプログラムを作る側のアプリを触るのはやめて下さい。
どうい
ずぶの素人に本気になって相手できるお前らがうらやましい。 まるで泣いている赤ん坊に「日本語しゃべれねぇヤツは日本人じゃねぇよ!」 ってマジ切れしてる大人のようであります。
やれやれ どこに本気になっている人がいるんでしょうか? 赤ん坊に自分の見合った事をやりなさいと諭してるだけでしょ。
> どこに本気になっている人がいるんでしょうか? いないなら問題ないです^^
VC2005EE+SDKを最初に手に取った赤ん坊には拍手を送りたい。 VC#と間違ってVC落としたのなら別だけど...
338 :
デフォルトの名無しさん :2007/10/15(月) 03:44:06
#と++を見間違えたのだろうか。 それとも本当にばかなんだろうか。
339 :
デフォルトの名無しさん :2007/10/15(月) 06:14:13
初心者のちょっとしたあやまちだろう。 おまえらが、パソコンに初めて触ったときのことをよく 思いだして見ろよ、ハゲ。
思い出した!うーんそんな間違いはしなかったなぁ。うん。
HOW MANY PAGES の意味が解りませんでした(><)
How many files(0-15)?がどうかしたって?
VC++はcl.exeとデバッガだけ使うようにしてさ エディタはemacsとかvim使おうぜ その辺の初心者の10倍の速度で上達するよ☆(ある意味で)
たまに現れるけど何がしたいの
Vimと言えば、初心者向けに操作方法を説明しているサイトは多いが、 始めにQuickFixコマンドの説明を含めている所は見たことが無いな。 名前付きバッファなんざ覚える暇があったら、:cwだけでも覚えるべきだ。
もぅ…訳がわからん MFC使うためにオブジェクト指向プログラミングを勉強してるが、 静的メンバ変数とか、メンバイニシャライザだとか、訳がわからなくなってきた、
今時MFC使うなんてバカじゃねぇのw
ナウなヤングに今のトレンドを教えてください。
.NET? だけど俺はあえてATL/WTLを選ぶぜ!!
351 :
デフォルトの名無しさん :2007/10/16(火) 23:02:35
>>346 MFCには魔物が潜んでいる。
ヤツは必ずキミを破滅に導いてくれる。
もはやマイクロ・ソフトさえ見捨てたMFCを、なぜ今更?
Googleさんが言うには vc mfc の検索結果 約 1,950,000 件中 1 - 10 件目 (0.06 秒) vc wtl の検索結果 約 225,000 件中 1 - 10 件目 (0.05 秒) vc c++/cli の検索結果 約 1,510,000 件中 1 - 10 件目 (0.13 秒) C++/CLIが意外と多いのに驚いた。
それ、vcとc++とcliで検索がかかってないの?
355 :
デフォルトの名無しさん :2007/10/16(火) 23:29:52
MFCってさ、文字列だはSTLに比べて格段に扱いやすいんだよな。 ただそれだけ。それだけなの。 深みにハマれば人生を棒に振るだけだから、絶対に近づかないほうがいい。 廃人になって捨てられる悲しい人生が待っている。 「MFCやめますか?それとも人間やめますか?」 そもそも 「DLL HELL」 とい言葉はMFCから生まれたもの。 意味はDLL地獄。DLLという単語とHELL=地獄をかけてある。 ようこそMFC地獄へ!
std::basic_stringてSTLの問題児のひとつじゃないかw
357 :
デフォルトの名無しさん :2007/10/16(火) 23:37:48
そう。だからだよ、MFCの方が使いやすい。文字列だけはな。 でも、コレに騙されてはイカン!
358 :
デフォルトの名無しさん :2007/10/16(火) 23:50:17
すんごい同意☆ MFCはCStringだけが取り柄w あとちょっとしたアプリはDialogベースアプリで書けるのがメリットかな。 だから俺はいつもMFCのDialogベース。 皆はなに使ってるの?Win32?
うん
MFCはAPIのラッパークラスだし何でSTLが比較対象に上がるのか理解に苦しむ。
361 :
デフォルトの名無しさん :2007/10/17(水) 00:51:28
>>360 初心者にはそこが分からない。
間違った方向へ進もうとしている初心者を正しく導くのが、
このスレの住人に課せられた使命。
MFCにはCStringがある。だからSTLと比較される。
363 :
デフォルトの名無しさん :2007/10/17(水) 01:44:23
MFCは CString 以外は使うな。人間性を失いたくなければ。
ダイアログベースのアプリならMFCが楽でいいよ。 そっから先は無理だけど。 作るもの全てがダイアログベースのアプリになってしまう。 俺がいい例。
たまにはドキュメントビューアーキテクチャのことも思い出してあげてください
366 :
デフォルトの名無しさん :2007/10/17(水) 16:23:14
VC6.0でWindowsサービスを作っています。 作ったサービスはXPでは動作するのですが、 2003 Server ではサービスとしての起動ができません。 (正確にはWindows Server 2003 R2 Standard Edition です) サービスマネージャで「サービスの開始」をクリックすると、 プログレスバーが出てしばらく後 「ローカルコンピュータのxxxx(サービス名)サービスを開始できません。 エラー1053:そのサービスは指定時間内に開始要求または 制御要求に応答しませんでした。」となります。 根本的に、2003 Server 向けのサービスをVC6で作ることはできないのでしょうか。 ご存知の方おしえてください
>>365 つーかMFCはそれがメインだと思うんだが、使いこなせない人多いんかな。
369 :
デフォルトの名無しさん :2007/10/17(水) 18:21:47
C++作成支援プログラムって存在しますか? たとえばHTMLならPOWERPOINTで画像やボタンの配置などが簡単にできますがC++でも同じようなことができる プログラムってありますでしょうか。
スレが違うと思われ
Visual C++は、まさにそういう類いのソフトウェア。 ところで、PowerPointはただの釣針だよね?
>>371 powerpointじゃなかったpublisherだった。
ありです。
>>369 GUIツールキットとかGUIビルダーとかかな・・・
スレッドあるからそこで雰囲気見てみるといいよ。
VC++初めて使おうと思ってるんですけどVBのプログラミング言語のところだけC++になったもの、と考えてあってますか? もしVBのようにGUIが作れるのであれば本格的に勉強しようと思ってるんですが・・・
VBと違って簡単なプログラムでも大量のコードが必要
待て、Publisherも名前からして違う。 MS OfficeならFrontPageだろ。 まあこれも別製品に後継を譲る立場だが。
>>374 Standard以上のVCにはいくつかのライブラリが付いてくるんだけど
.Netを使うならVB.NetのようにGUIを作れる。ただ言語は純粋なC++じゃなく
C++/CLIになる。ライブラリ使わないなら375の言うようなことになる。
C++のライブラリもあるんだけど、必ず変なのが来て暴れるので説明省略。
VC++ってもしかしてCopyFile(○○,××,FALSE)に対応してない? どなたか解決方法教えてください
たぶん原因が<windows.h>をインクルードしてないからなんだと思うのですが、#include文を入れると 大量にエラーが増えてしまいます・・・ どうすればいいのでしょうか
>どうすればいいのでしょうか コンパイラが教えてくれるだろ。 ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう。 ・できるだけ具体的に。
381 :
デフォルトの名無しさん :2007/10/18(木) 12:38:16
VC2005 Proを使ってます。 クラスライブラリのヘッダにて、abstract sealedの クラス内にtypedefとtemplateを使った定義をしました。 しかし、そのヘッダ内では使えるものの、そのほかのクラスでは使用 できません。コンパイルエラーになります(定義されていないとのこと) (staticのメンバ関数などはOK)。 どうしたら、他クラスで使用できるのでしょうか?また、templateや typedefをクラスライブラリで定義する場合はこの方法しかないのでしょうか? // typedefを使用したクラス(例) public ref class TYPES abstract sealed{ public: typedef short test16; typedef unsigned short utest16;}; // templateを使用したクラス(例) public ref class METHODS abstract sealed{ public: template <typename T1> static T1 TEMPTEST (const T1& t1) {return t1;} // このメンバ関数は他クラスでも使用可能 static void TEST(int num){int i = 3;} };
スレ違い? クラスライブラリで template、typedef 使うなよ
>>381 いつものC++みたいに、ヘッダファイルも一緒に配ればOK。
STLとMFCだと、プログラミングの技術に差は出ますかね?
使い道が全然違う
386 :
デフォルトの名無しさん :2007/10/18(木) 23:15:55
MFCって次期VSから無くなるんじゃなかったっけ? もうどうでもいいよ
>>386 確かMSDNにMFCに関するQ&Aがあって「MFCはなくなりませんか?」みたいなQに対して、「永久になくなりません。」ってAがあった。
ホントかよっ!と思いつつ読んでいたが、無くなるのか。。
今から勉強するならSTLですかね? 参考書籍等が書店に見当たらないのですが、ほとんどがMFCを説明している本でして、
>>364 ダイアログベースなら他のツール使えば?
ダイアログベースのアプリなんて使ったこと無い
390 :
デフォルトの名無しさん :2007/10/18(木) 23:34:55
>>388 MFCとSTLは全く別物
どちらもやってもよい
簡単なGUIアプリケーションを作りたいと思っています。 一応、C,C++は基本的なことは理解しているつもりです。 検索したらMFCや.NET Framework、Win32APIがあったのですが。 違いもいまいちわからないのですが、どれを使ったらいいのでしょうか? 宜しくお願いします。
とりあえず2008ではなくならない むしろ拡張されてる
けど、あいかわらずグリッド系は自前で作るしかないのね
395 :
デフォルトの名無しさん :2007/10/19(金) 01:14:27
Visual Basic2005とVisual studio2005って何が違うのか何方か教えてください
わらた
397 :
デフォルトの名無しさん :2007/10/19(金) 01:27:45
>>389 いまのアプリケーション開発(Win)ってトレンドってなんだろう?
Win32だとGUIを作るのが大変そうだし。
視覚的にGUIが作れるのってダイアログベースアプリくらいしか思いつかない。
あとはVBかC#。
C#も作ったコントロールやウインドがやたら画面の端に引っ付いたりして気に食うものがなかなか出来ない(と個人的に思う)
VC++のフォームを使ってボタンを押すと特定のファイルを移動するプログラムを作りたいんですが、 copyfile の identifier が見つかりませんでした、とビルドエラーがでます。助けてください
全ソースupしたら助けてやらないことも無い。
WinAPIのCopyFileなら 必要なヘッダ(windows.h)をincludeしてない CopyFileなのにCopyfileやcopyfileにしてる
どなたか
>>392 お願いします。
スレ違いだったら言ってください。
どれでも好きなの使ったらええやん 向き不向きがあるだろ
403 :
デフォルトの名無しさん :2007/10/19(金) 10:59:48
C++/CLIでWindows.Formsがトレンドなんじゃないの? とC#を使いながら言ってみる。
>>389 >ダイアログベースなら他のツール使えば?
ツール???何の?
ツールの話なんて誰がしてたの?
ソースファイルはあるのだがどうにもコンパイル出来ない・・。 替わりに俺がやってやるぜ!なんて素敵な方、いませんか? g++とsqliteのライブラリ・ヘッダがあれば良いらしいのですが。 欲しいバイナリはwin32用です。
壱千万で引き受けます。
それ・・は・・むり・・。orz
408 :
デフォルトの名無しさん :2007/10/20(土) 03:28:28
おいおい、NTTデータなら800億円で受注する仕事だぜ?安いもんさ。
VC++2005EEを使っています。 コマンドラインからclでコンパイルのみを行ってからlinkを使った場合、 CRTやkernel32.libは指定しなくても自動的にリンクされるようですが、 デフォルトでリンクされるライブラリファイルはどこで定義されているのでしょうか?
410 :
デフォルトの名無しさん :2007/10/20(土) 12:54:14
Windows2000でVC++2002でアプリケーションを作成したのですが "read" になることはできませんでしたのエラーがでても動いているので そのまま稼動させて大丈夫でしょうか? readってことは参照しかしてないってことですよね?
だめだよ
412 :
デフォルトの名無しさん :2007/10/20(土) 13:00:38
なぜですか?
>409 lib
415 :
デフォルトの名無しさん :2007/10/20(土) 13:19:19
1万7千行ありますが
何でその程度で触ってんの? 一人で使うなら問題ない それが君の力量だから
417 :
デフォルトの名無しさん :2007/10/20(土) 13:38:21
一人では使いませんが一人で作っています
418 :
409 :2007/10/20(土) 13:40:40
>>413 それはライブラリファイルがある場所を示してくださっていると解釈してよろしいですか?
ライブラリがある場所ではなく、デフォルトでリンクされるライブラリファイルが
どこでどのように設定されているのかを知りたいのです。
例えばkernel32.libやCRTはデフォルトでリンクするが、
user32.libは指定しないとリンクされない…とか。
corewin_express.vspropsで設定されているライブラリファイルは
コマンドラインでのリンクには影響を与えないことを確認しました。
419 :
デフォルトの名無しさん :2007/10/20(土) 14:17:07
hBitmap=LoadImage(hInstance,MAKEINTRESOURCE("IDB_CHAR"),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); if (hBitmap == NULL) { MessageBox(hWnd,"BitMap Load Error", "エラー",MB_OK); return 0; } これでリソースからビットマップを読んでるつもりなんですが 何故、メッセージが出るんでしょうか? #include "resource.h" も付けています。 MAKEINTRESOURCE("IDB_CHAR") の部分に ビットマップのパスを入れても同じです。
GetLastError()
>>419 MAKEINTRESOURCE(゚⊿゚)イラネ
このマクロは、LPCTSTRにWORD型のIDを突っ込むために使う。
422 :
デフォルトの名無しさん :2007/10/20(土) 20:42:10
>>410 ポインタの使い方間違ってるんじゃないの?
423 :
デフォルトの名無しさん :2007/10/20(土) 23:41:40
「猫でも~」で、C++でもGDI+が使えることを知りました。 さっそく画像表示プログラムつくってみたんですけど、パスに漢字がはいると 表示できません。これはなぜでしょうか?
VC++6.0でOutlook2007と携帯W54Tのスケジュールとタスクの同期プログラム作りたいんだけど。 まずは、bluetoothの制御方法から教えてくれ。 サンプル世路
そのようなことができる方は初心者とは言いません。
初心者とは、初心の心を持っている者のことである。
427 :
デフォルトの名無しさん :2007/10/21(日) 00:34:12
うるせぇ!オレ様は初心者だぞ。おまいら初心者を差別するつもりか? 初心者には知る権利がある。質問する権利がある。違うか? オレの言ってる事が間違っているなら、筋道立てて理路整然と反論してみろや!
俺は小心者ですが何か?
429 :
398 :2007/10/21(日) 02:09:50
#include <windows.h> #pragma once using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace testfile { public ref class form : public System::Windows::Forms::Form { public: form(void) { InitializeComponent(); } protected: ~form() { if (components) { delete components; } } private: System::Windows::Forms::Button^ button1; protected: private: System::ComponentModel::Container ^components; 続く
#pragma region Windows Form Designer generated code void InitializeComponent(void) { this->button1 = (gcnew System::Windows::Forms::Button()); this->SuspendLayout(); this->button1->Location = System::Drawing::Point(58, 130); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(163, 74); this->button1->TabIndex = 0; this->button1->Text = L"button1"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &form::button1_Click); this->AutoScaleDimensions = System::Drawing::SizeF(6, 12); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 266); this->Controls->Add(this->button1); this->Name = L"form"; this->Text = L"form"; this->ResumeLayout(false); } #pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {CopyFile("\\files\\readme.txt","C:\\program files\\testprogram\\readme.txt",FALSE); } }; } 長いですけどフォームつかったら自動的にいろいろ追加されてこんなふうになってしまいました。ボタンを押すとファイルを書き換えるだけなんですけど・・・ とりあえずボタン押して
431 :
398 :2007/10/21(日) 02:17:02
そしてビルドしたときのエラー 1>------ ビルド開始: プロジェクト: testfile, 構成: Debug Win32 ------ 1>コンパイルしています... 1>form.cpp 1>c:\documents and settings\○\my documents\visual studio 2008\projects\project1\testfile\testfile\form.h(1) : error C2001: newline in constant 1>c:\documents and settings\○\my documents\visual studio 2008\projects\project1\testfile\testfile\form.h(1) : error C2059: syntax error : 'string' 1>c:\documents and settings\○\my documents\visual studio 2008\projects\project1\testfile\testfile\form.h(88) : error C2065: 'FALSE' : undeclared identifier 1>c:\documents and settings\○\my documents\visual studio 2008\projects\project1\testfile\testfile\form.h(88) : error C3861: 'CopyFile': identifier not found 1>ビルドログは "file://c:\Documents and Settings\○\My Documents\Visual Studio 2008\Projects\Project1\testfile\testfile\Debug\BuildLog.htm" に保存されました。 1>testfile - エラー 4、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
CopyFile で右クリックして「定義へ移動」すると勉強になると思う。
CLR-Windowsフォームアプリケーション で新規作成、 ボタン配置してハンドラを同じように書いてみたけど、 文字列がUnicodeでないと文句言われただけで、後は問題無かった。 form.h(1)の謎のエラーが後に影響しているのかもしれんね。 そのエラーだと、ヘッダをインクルードしているソース側に問題がある可能性もあるから、 #include "form.h" より前の部分もチェックした方が良いな。
現在, Visual C++ 6.0 → .netの2005 Windows2000 → WindowsXP SP2 へようやく以降したのですが,分からぬエラーが. 6.0 + 2000 = 問題ない 6.0 + XP = 問題ない 2005+ 2000 = 問題ない 2005+ XP = 問題あり 何が問題か,ですが テキストファイルを読み込むと終了時にアクセス違反 というエラーがでます. テキストファイルを読み込まなければエラーは起きません. 何かXPと2005の組み合わせで気をつけなければ ならないことあるのでしょうか?
435 :
409 :2007/10/21(日) 10:21:58
436 :
デフォルトの名無しさん :2007/10/21(日) 12:43:51
>>421 hBitmap=LoadImage(hInstance,"C:\\test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
なら、その後Bitbltで描けるようですが、
hBitmap=LoadImage(hInstance,MAKEINTRESOURCE("IDB_NULL"),IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR);
これだと駄目です。MAKEINTRESOURCEを取っても駄目です。
パスで指定 → OK
リソースから → 駄目
もう、どうしたらいいか・・・
>>436 GetLastError()で見たのかよ低脳
""取ってみ
MAKEINTRESOURCE("IDB_NULL")→MAKEINTRESOURCE(IDB_NULL)
>>434 自分の2005+XP SP2では問題は発生しない。
2000->XP SP2 はもちろんクリーンインストールだよな。
>>435 コンパイラの既定CRTライブラリは/MTなので、
出力されたオブジェクトファイルにlibcmt.libのリンク指示が含められている。
で、リンク時にCRTライブラリによってエントリポイントが解決された結果、
それが依存するライブラリもリンクされている。
CRT内部で何をしているか調べるのは正直骨だし、
とりあえず宣言しとけばいいんじゃね?被っても問題無いし。
ちなみに、エントリポイントを自分のコードで解決してCRTを一切リンクしなかった時は
kernel32.libすらリンクされなかったので、あくまで依存関係に従っていると考えて良さそう。
>>436 リソースの識別には、16ビットIDと文字列を対応付ける二つの方法がある。
"IDB_NULL"という文字列を対応付けているなら "IDB_NULL" で良いが、
resource.hのIDB_NULLのID定義を介しているなら、MAKEINTRESOURCE(IDB_NULL)だ。
画像はウィンドウクラスでカーソルとアイコンの登録しかやったことないけど メニューの指定でもいろいろ悩んだなぁ・・・。 とりあえずわかったことは 引数として文字列(のポインタ)が要求されるのに resource.h でリソース名に定数振られてて そのせいでうまくいかないっぽいってことはわかった。 画像とかの ID とかを "" で囲んで resource.h から #define の定義を消すとうまくいってた。 正当なやり方はよくわかってない。
440 :
デフォルトの名無しさん :2007/10/21(日) 13:05:00
よくわかってない奴は黙ってろや あほが余計悩むだろ
441 :
デフォルトの名無しさん :2007/10/21(日) 13:10:39
>>437 ,438,439
" を外しても同じです。
エラーなどは出ません。
一応、使ってるのがVC5なんですよ。これって関係あるんかな?
GetLastErrorも調べてみます。
たまに、resource.hに使われなくなったIDが残ったりするから、それかもしれないな。 .rcファイルとresource.hを目視で確認してみ。
何か理由があってVC5なんて使ってるの? 新しいのに移行する時に余分に時間が掛かるだけだし情報も少ないよ
リソースビューでその画像が "IDB_NULL" ってなってるんじゃないの? "" とって IDB_NULL にしてみたら?
445 :
デフォルトの名無しさん :2007/10/21(日) 13:33:21
>>444 画像名はリソースビューで見ても IDB_NULL で
"" は付いていません。
本当に謎だ・・・
447 :
409 :2007/10/21(日) 13:57:16
>>438 オブジェクトファイルにコンパイラからのリンク指示が含まれているということなので、
dumpbinを使ってオブジェクトファイルの内容を調べてみたところ、libcmt.libのリンクを
指示するリンカオプションが含まれていました。
また同様に、libcmt.libをdumpbinで調べてみたところ、kernel32.libへのリンクが
指示されていました。
おかげで疑問が解決しました。ありがとうございました。
解決してんじゃん いろいろやってみろよ お前には無理だけど
450 :
434 :2007/10/21(日) 15:22:29
>>438 クリーンインストールです.
サブPCが2000のままだったのでVC++6.0を入れて
メインPC(XP)の.netの2005とモニタ並べて
まったく同じ処理をやってもメインPCの方だけアクセス違反が….
2005では文字コードをUnicode→マルチバイトへの変更が差分です.
同じじゃないじゃん
452 :
デフォルトの名無しさん :2007/10/21(日) 16:36:59
>>446 あります。
一応、LoadImage後に
if (hBitmap == NULL)
{
MessageBox(hWnd,"BitMap Load Error", "エラー",MB_OK);
return 0;
}
で調べてみると メッセージが出ます。
あるのに遅すぎんだよ
LoadImageで読み込めないフォーマットのビットマップの可能性もあるから、 まずは、FindResourceでリソースを見つけられているかどうか確認した方が良いな。 生成された実行ファイルをIDEで開けばリソースを覗けるはずだから、 IDが正しく対応しているかの確認も。
LoadImageで読み込めてるって書いてある
>>451 ①windowsXP (.NETの2005)で文字コードをマルチバイト,
②windows2000(.NETの2005)で文字コードをマルチバイト,
同じ条件で①では終了時エラー,②では正常終了です.
まったく同じ条件です.
XPのSP2で何か気をつけるべきことがあるのかと考えていますが,
まだ原因が特定できません.
今まで問題のあるコードがたまたま動いていただけなんじゃねぇの。
>>457 うーん,その可能性も否定できないんですが
実際に複数台のPCで1日中ずっと処理を走らせて,
3年間,エラーが起きることはなありませんでした.
エラーが起きる部分(ファイル読込)は少なく見積もって
数万回は走っているはずです.
終了時にエラー(アクセス違反)は一度も出ていません.
現在調べている時は余計な部分を削除していき,
ファイル読込部分しか書いていないです.
自分は絶対間違ってないという前提なら ここで質問されても答えようがないから マイクロソフトに直接聞け
短いならコード出すべし。
Unicodeなら問題ないの?
どうせバッファオーバーフローとかだろ
どうしてデバッガで追うとかしないの?
464 :
自作ブラウザ :2007/10/22(月) 17:48:37
VC++ 6.0 で htmlview を基本クラスにして、ブラウザを作成した時には マウスによるクリック処理をプログラマがコードを追加して実装しなくても、 左ボタン処理等が実装されていますが、これをカスタマイズしたい時には どうすればよいのでしょうか?
windows フォームアプリケーションを使ってるんですがC++と少し違いを感じました。 messagebox.showをmessagebox::showと書いたり messagebox以外にもいろんな機能を使いたいんですがなんと入力すればいいのかわかりません。 ファイルを特定フォルダに作成したり、特定なファイルを上書きしたり、別ウィンドウを開いたりしたいんですが 誰か教えてください
C++出来るんならMFCなりapiたたいたりapiクラス化するなりで良いじゃん
>>466 がやっているのは、C++/CLI だ。
というわけで .NET Framework のリファレンスを見れ。
もっとも、.NET 触るんであれば、俺は C# をお勧めする。
469 :
デフォルトの名無しさん :2007/10/24(水) 05:26:09
VS2003.NET→VS2005に環境を移行しました。 が、VS2003.NETでは警告、エラーともにでなかったソースでもVS2005だと警告が出ます。 調べたところ、文字コードがUNICODEではないため警告が出ているようです。 そこで、文字コードを一括(プロジェクト内のソースすべて)をUNICODEに変更するにはどうすればよいのでしょうか?
めんどくさいぞ それよりプロジェクトのプロパティで以前の文字コードに設定したらどや
>>471 ありがとうございます。
プロジェクトのプロパティはVS2005の設定項目のどこを変更すればよいのでしょうか?
質問ばかりですいません・・・・
左側のソリューションエクスプローラのプロジェクトファイルのアイコンを右クリック→プロパティ 全般のページが開いてると思うから真ん中当たりに文字セットがある 2005からデフォルトでUNICODEになった
VS2003.NETで作成したプロジェクトをVS2005で開き、
>>473 の部分を確認したのですが、
すでに「マルチバイト文字セットを利用する」となっていました。
warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。
データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
出てくる警告は上記のものです。これは気にしなくてもよいのでしょうか・・・
何やそれかw ファイル→保存オプションの詳細設定でUnicodeで保存し直したら消えるんちゃう?
これでいけそうですね。 ただ、ファイルが十数ファイルあるので一括変換できればうれしかったのですが・・・残念です。 早朝からありがとうございました。
>>476 せっかくVC++使ってるんだから
一括変換のプログラム書けばいいだろう
ツールバーのボタンを押す
最初メニューにコマンド追加して それをツールバーにも設定
482 :
479 :2007/10/25(木) 22:40:56
>>481 クリアしました。
啓蒙ありがとうございました。
オブジェクト指向プログラミングを大きく分けてみたんですが、 カプセル化、抽象化、階層化で合ってますか?
質問ですが、フォルダをウィンドウから開きたい場合はどうしたらよいのでしょうか? 例えばですが、 ウィンドウにマイコンピュータの画像を貼り付け、そこをクリックしたらマイコンのフォルダが開く。と と、したいのですが、色々調べていてやり方がさっぱり分かりません。 分かるかた是非教えて下さい。また、参考サイト等ありましたら合わせて教えて下さい。お願いします。
485 :
デフォルトの名無しさん :2007/10/26(金) 10:34:18
system("explorer.exe C:\\");
>>485 レスありがとうございます。
書いて頂いたのは、プロンプトが一回開いてしまうんですが、そのまま直にフォルダを開く事はできませんか?
私が今まで書いていたものは、
ShellExecute(hWnd, "oepn", "パス", NULL, NULL, SW_SHOWNORMAL);
なんですが、この方法ではうまくいきませんでした。無理なのであればsystem()でやろうかと思います。
また、マイコンピュータを開く場合、ファイルパスがうまく指定できないのですが、何故でしょうか・・
C:\Documents and Settings\ユーザ名\Favorites\My Computerではフォルダがないと言われるんですが、違うのでしょうか。
度々ですが、宜しくお願いします。
質問小出し野郎はスルーするのが吉
"oepn"ではフォルダはオープンしないと思う。せいぜいできるとしてもオエプンくらいかな。
489 :
デフォルトの名無しさん :2007/10/26(金) 11:14:04
ShellExecute(hWnd, "open", "explorer.exe", "パス", NULL, SW_SHOWNORMAL);
でいいのかな。
参考サイト:
http://www.google.co.jp つかいかた:テキストボックスに [ShellExecute explorer.exe] と入れて [google検索]ボタンを押す
ホームラン級の馬鹿ですね
491 :
デフォルトの名無しさん :2007/10/26(金) 11:26:08
492 :
デフォルトの名無しさん :2007/10/26(金) 11:30:25
>>489 は
ShellExecute(hWnd, "explore", "パス", NULL, NULL, SW_SHOWNORMAL);
だね
で、マイコンピュータのパスの調べた方も教えてやれよ
494 :
デフォルトの名無しさん :2007/10/26(金) 12:19:47
「教えてやれよ」 とは何だよ。 人にモノを尋ねるときは、「教えてください」 だろ
なんとなく教えてくれてるっぽい人どうも 全部自分でなんとかなりました。
マイコンピュータをユーザー名だけで決めうちはどうかと
気になるから便乗するけどマイコンピュータのパス(?)は環境変数 USERPROFILEでいいんですか?
調べたけど、マイコン他特殊フォルダはパスじゃない。 レジストリのIDみたいなの
499 :
デフォルトの名無しさん :2007/10/26(金) 17:52:11
おまいら降参か?ホレ ShellExecute(NULL, "explore", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", NULL , NULL, SW_SHOWNORMAL);
降参も何も、ほぼ答え出た時点で終ってるのに
501 :
デフォルトの名無しさん :2007/10/26(金) 18:43:59
「おまいら降参か?ホレ」 とは何だよ。 「ググりました。これで合っていますか?」 だろ
その長ったらしいのいちいち憶えてるわけにいかないから 特殊フォルダ id でぐぐったら出てくることだけ知ってれば十分
clsidの前の::もいるんですか?
504 :
デフォルトの名無しさん :2007/10/26(金) 19:06:35
「ググれ」で済むならこのスレいらんだろ。
ググれで済むよ。ググる能力もない奴はプログラムやる資格ない
答え丸写ししなきゃできないならプログラミングは無理だから土方でもやったほうがいい
「ググれ」で済む程度の問題でこのスレに来るな
ありがとうございます
510 :
デフォルトの名無しさん :2007/10/26(金) 19:20:59
>>500-502 おまいら、何も泣く事は無いだろ。
ここは初心者スレなんだから、知らなくても恥にはならないぞ。
>510は >498に答え書いてあるのに気がつかない初心者
>>510 ここは初心者スレだけど初心者のお前が威張れる場所じゃない。
514 :
デフォルトの名無しさん :2007/10/26(金) 19:43:06
とりあえずage厨の子供が一人いたということでFA?
なんでいつまでたってもSHGetSpecialFolderPathとか出てこないの
既に解決済みだから
>487
519 :
デフォルトの名無しさん :2007/10/26(金) 23:34:19
まだやってるのかよ、しつこいな。
>487
clsid直書きで解決ってどんだけー
馬鹿は心の隅で笑うのが鉄則 下手に指摘しても知恵を付けさすだけ
VS2005 Pro.を使用しています。 プロジェクトにクラスの追加を行う方法について困ったことがあります。 あるヘッダファイルに書かれているクラスをProjectに追加するにはどうすればいいでしょうか?普通はどのように追加するものでしょうか? 以下のようにするとコンパイルエラーになります。 1. ソリューションの作成 2. ソリューションにProject Aをクラスライブラリとして追加 3. Project Aにあるheader ”Common.hとします” を#includeで追加 4. ソリューションにProject Bをクラスライブラリとして追加し、同じようにCommon.hを#include 5. Main ProjectにProject AとProject Bを「プロジェクト」 -「参照の追加」で追加 ビルド →Common.hで定義された型が再定義されました。というエラー。
ソリューションエクスプローラを開いて 「ヘッダー ファイル」 フォルダ を右クリックして「追加」->「既存の項目」でヘッダーを入れて 「ソース ファイル」 フォルダ を右クリックして「追加」->「既存の項目」でソースを入れて クラスが必要なソースからヘッダーを include すればいい
525 :
デフォルトの名無しさん :2007/10/29(月) 02:36:03
アイタタタタタ・・・
526 :
523 :2007/10/30(火) 00:39:16
返事が遅くなってすいません。調べてみると、public, privateが決まってくる ような気がしました。 Main, ClassLibA, ClassLibBでヘッダファイルに書かれたClassZを includeしたいと思います。ClassLibA, ClassLibB, ClassZはPublic ref のクラスです。 ClassLibA, ClassLibBはクラスライブラリとして追加したものです。 Main Class・・・ClassLibA, ClassLibB ClassLibA・・・ClassZ(includeで追加) ClassLibB・・・ClassZ(includeで追加) Main Class, ClassLibA, ClassLibBそれぞれでClassZで定義された メンバを使いたいと思ってます。 ただし、上記でコンパイルすると、再定義警告となってしまいます。 ClassZをprivateにして、Main, ClassLibA, ClassLibBのClassで includeするしかないでしょうか? ClassZはClassLibA, ClassLibBを参照した場合にしか使わないので、 なるべくincludeという形で別includeにしたくないと思っております。 上記のように2つのdllから共通のクラスを使い、その2つのdllを使う クラスがある場合はどのようなクラス構成、設定にするべきでしょうか? 長々と書いてしまってすいません。
.net かよ...
>>526 C++/CLIはスレ違いだよね
ClassZもdllにしたら?
とりあえず.netについて分かってない気が
VS2005でファイル操作をするためにfstream.hをインクルードしたいのですが、 ファイルを開けないと出るのですが、fstream.h以外に何かありますでしょうか?
fstream
#include <iostream> #include <fstream> void main(){ char buf[512]; // ifstreamのインスタンスを作る // C言語のfopenと同じ ifstream ifs("input.txt") ; // ofstreamのインスタンスを作る // C言語のfopenと同じ ofstream ofs("output.txt") ; // ifstreamのインスタンス(ifs)から1行読み込みbufに入れる。 while( ifs.getline( buf, sizeof(buf) )) // ofstreamのインスタンス(ofs)を利用して読み込んだ内容を書き込む ofs << buf << endl; } コンパイルエラーになるんですが、なぜですか?
バカじゃねぇの using namespace std;
533 :
デフォルトの名無しさん :2007/10/30(火) 20:24:42
#include <iostream> #include <fstream> using namespace std; void main(){ char buf[512]; // ifstreamのインスタンスを作る // C言語のfopenと同じ fstream ifs("input.txt" ,ios::in) ; // ofstreamのインスタンスを作る // C言語のfopenと同じ fstream ofs("output.txt",ios::out) ; // ifstreamのインスタンス(ifs)から1行読み込みbufに入れる。 while( ifs.getline( buf, sizeof(buf) )) // ofstreamのインスタンス(ofs)を利用して読み込んだ内容を書き込む ofs << buf << endl; }
ありがとうございます。
ググれば分かるレベルだろ 答えもしてない分際で答えた者をバカにするな
( ´,_ゝ`)プッ たかが2chで簡単な答えを書いただけの癖に随分と偉そうですなあ
( ´,_ゝ`)プッ たかが2chで簡単な質問を書いただけの癖に随分と偉そうですなあ
>>536 先に答えが出たので答えなかっただけ。
たまたま自分が答えを知っていたというだけで質問者を愚弄する者こそ愚者と知るべし。
540 :
デフォルトの名無しさん :2007/10/30(火) 22:06:49
たまたまってレベルじゃねぇぞ お前どんだけレベル低いんだ
>>539 >答えもしてない分際で答えた者をバカにするな
日本語読める?
542 :
デフォルトの名無しさん :2007/10/30(火) 22:40:20
Q&A系スレッドを勝負に例えるなら 答えた者が勝ち。 答えられなかった者は負け。 答えられなかったのに捨てゼリフ吐くのはみっともない。 亀田3兄弟よりみっともない。
ここC++スレじゃないし
544 :
デフォルトの名無しさん :2007/10/30(火) 23:00:49
↑ 亀田3兄弟よりみっともない男
スレ違いは犯則負け
546 :
535 :2007/10/31(水) 00:10:22
>>540 >質問者を愚弄する者こそ愚者と知るべし
~~~~~~
勝ち負けの問題じゃない。君こそ日本語を読め。
しかも、俺じゃない奴(
>>543 )すら攻撃するし。
自分以外は全員敵かよw
レス番間違ってるし 同一人物だと思ってるし 自分以外は全員敵かよw
( ´,_ゝ`)プッ
なら口ださなきゃいいのに
>>547
549 :
デフォルトの名無しさん :2007/10/31(水) 02:53:50
picutureBox1とpicutureBox2があって、 picutureBox1 Clickの処理をpicutureBox2 Clickにも同じくさせたいんですが、 どうのようにすればいいでしょうか?
自分の使ってる物も分からんのか スレ違いだ馬鹿野郎
C++/CLIはOKだろ。
>>549 PictureBoxの派生クラスを書けばいい。
追加 - クラス - C++クラス で作成、
ビルドした時点でツールボックスに追加されるので、
後は普通のPictureBoxと同じように配置すればいい。
専用スレがあるのにもったいない
VisualC++6.0ではMSDN入れないと型情報自動表示機能は使えないのでしょうか?
MSDNなんか参照しないよ
555 :
デフォルトの名無しさん :2007/10/31(水) 11:58:43
LRESULT から intに正しく変換する方法を教えてください
intでキャスト
Windows XP sp2 Visual C++ 6.0 フォームの中のボタンを押すとWindowsキーを押したようにしたいと思っています。 フックして仮想キーコードを取得するところまででき,Windowsキーのコードは確認できたのですが, そこからWindowsキーを押したように見せる方法がわかりません。 どうすれば,Windowsキーを発行することができるんのでしょうか。
WM_LBUTTONDOWNでも送りつけてみたら?
>>558 さん
お返事ありがとうございます。
>WM_LBUTTONDOWNでも送りつけてみたら?
実際にはどのような関数を使えばいいのでしょうか。
うーん。PostMessage()で、WM_KEYDOWN(WM_SYSKEYDOWN?)を送るというアイデアぐらいしか 思いつかない。
>>559 >実際にはどのような関数を使えばいいのでしょうか。
PostMessage()
562 :
557 :2007/10/31(水) 17:29:05
>>560 さん,
>>561 さん
ありがとうございます。
WM_KEYDOWN(WM_SYSKEYDOWN?)とPostMessage()
の使い方がわからないので探してみます。
名前さえもわからない状態だったので,とてもうれしいです。
うまくできたら,ご報告させて頂きます。
文字コードがバラバラのファイルを 同じ文字コードに統一したいのですが、 どのように処理したらいいのでしょうか? ちなみに、VC2005です。
文字コード判別→変換
565 :
563 :2007/11/01(木) 08:53:17
>>564 すばやい回答ありがとうございます。
文字コード判別になにを使えばいいでしょうか?
Windows的にはMLang。 だけどnkf使った方が楽。
567 :
563 :2007/11/01(木) 09:05:27
.NET の方にはなにかないですか?
スレ違い
572 :
デフォルトの名無しさん :2007/11/01(木) 14:38:35
WM_CREATEの中でBeginPaintって出来ませんか? WM_PAINTじゃなく、CREATEの中でLineToとか一度だけの表示をしてしまいたいんですが・・
いちいち聞かなくても好きなところで書けばいいよ 自分でやってみればわかるから
ウィンドウを常に画面の右上に固定や左下に固定で表示させるのはどうしたらいいでしょうか? CreateWindow内で座標を指定するのではなく、どのPCで開いてもちゃんと画面左上などの位置にぴったり表示させたいんです。 分かる方お願いします。
座標を指定する
その座標を指定するというのはディスプレイサイズが分かる関数があるんでしょうか?
VC++って何?ってところから勉強したいんですけど、オススメの書籍ありますか? C#は1年くらいやったんですが、VC++は初めてで・・・
VC++って何?という状況だと勧められるものはない
>>578 GetMonitorInfoとかそこら辺を使う
GetWindowRect で十分な気がする
初心者スレでいきなり敷居の高い話をし始める
>>582
MonitorFromWindowで自分のいるモニタのハンドルとって、 GetMonitorInfoでそのモニタの作業領域を取得するだけ。 簡単だろ。
GetWindowRect一回呼ぶだけ
GetWindowRectのウィンドウハンドルには、何を指定すればいいのですか?
RECT rect; GetWindowRect(GetDesktopWindow(), &rect);
589 :
デフォルトの名無しさん :2007/11/04(日) 02:31:20
Visual C++6.0でSTL(mapやset)を使ったコードをデバッグ情報を生成する オプションを指定してコンパイルすると、鬼のように長くてたくさんの 警告が出ます。警告の内容は、"デバッグ情報で識別子が255 文字に切り 捨てられました(warning C4786)"というものです。 この問題を回避するには次の選択肢の中から選ぶしかないのでしょうか? (1) 警告を表示しないようにする → 他の便利な警告を受け取ることができない。 (2) デバッグ情報を生成しない。→ デバッガが使えない。 (3) 死ぬほどたくさんの警告メッセージを我慢。→ 非常につらい。 (4) STLを使わない。→ それは無理。
#pragma warning (disable: 4786) が常套手段
591 :
589 :2007/11/04(日) 03:54:29
592 :
デフォルトの名無しさん :2007/11/05(月) 16:44:09
594 :
592 :2007/11/05(月) 16:56:38
マルチしてすみません。 ただ「くだすれVisualC++(超初心者用)」のほうが1000レスいったので こちらでも質問ささしてもらいました。 すいませんが教えてください。
ツールバーにハンドラ追加する方法なら少し前に誰かに教えたから過去ログ見ればいい ウイザードから追加する方法は知らん
596 :
デフォルトの名無しさん :2007/11/05(月) 19:09:58
メモ帳で[F5]を押すと日付と時刻がペーストされますが、 Visual C++のエディタでも同じことができるでしょうか? できるなら方法を教えてください。
597 :
デフォルトの名無しさん :2007/11/05(月) 19:32:57
自分で[F5]を押せば分かるだろ?
Std以上のVCならマクロで簡単に出来るよ。もちろんキーボード割り当ても可能。
unicodeにすると char→CStringをどうやって渡すのかわからないです。 ヒントでいいから教えていただければ、、つД`)
CStringのコンストラクタ
CString は TCHAR データ型をもとにしています。 プログラムでシンボル _UNICODE が定義されたときは、 TCHAR 型は 16 ビット文字型の wchar_t 型として定義されます。 それ以外は、通常の 8 ビット文字型 char で定義されます。 Unicode 環境下では、CString オブジェクトは 16 ビットの文字で構成されます。 Unicode 環境以外では、CString オブジェクトは 8 ビットの文字で構成されます
602 :
599 :2007/11/05(月) 22:46:31
>600 >601 ありがとう。 ちょいとそれを頭に入れてググル先生に聞いてみます。
603 :
デフォルトの名無しさん :2007/11/05(月) 23:04:43
初心者は黙ってVC++でMFCでウィザードでサクサクやるのがいいですよね?
いい
というのは何を根拠として良いと判断するんですか?
>>603
VC++がどーだ、MFCはあーだこーだ言ってないで、 サクサク作れるんだから作った方が勉強になるという意味で、 いいと思いますが。
サクサク作れない
MFCウイザードでさくさく作れる香具師は、 MFCウイザードがなくたってサクサク作れる。
MFCキライなヤツが増えたな。
609 :
デフォルトの名無しさん :2007/11/06(火) 18:13:37
ダメ! MFCで人生を棒に振った悲しいプログラマが、いったい何人いることやら。 MFC犠牲者慰霊の塔の下に眠っている幾千幾万のプログラマたちが 成仏できずに毎晩、悲痛なうめき声をあげて助けを求めているというのに。 マイクロソフト社さえ見放した禁断の果実MFCを、なぜ今更? もうこれ以上、犠牲者が増えるのを善良な市民として見ていられない。 忘れなさい。MFCの事は忘れなさい。記憶の底から消し去るのです。 MFCなんて見なかった。聞かなかった。この世に存在しなかった。 いいですね?わかりましたね?
ダメ! .NET で人生を棒に振った悲しいプログラマが、いったい何人いることやら。 (ry
611 :
デフォルトの名無しさん :2007/11/06(火) 22:13:12
VC++でWin32アプリならいい?
VisualC++6 と VisualC++.NET の差がわかりません 差はないのでしょうか? 今から始めるならVC.netでいいんでしょうか? VCに興味を持っている理由は .NET Frameworkとかの ランタイムのインストールをしなくても動くEXEが作れるらしいから、と DirectXでゲーム作ろうとしてもC++の参考書しかないから、なのですが VC.NETで作ったEXEは .NET Frameworkがないと動かないものになるのですか?
Visual C++ .NET 2002はVisual C++ 7.0、.NET 2003は7.1相当。 .NET抜きにして、C++コンパイラとしても開発環境としても機能は上がっている。 .NET Framework使うプロジェクトを作らなければ、 Visual C++ .NET 2002/2003でも.NETなしのネイティブプログラムが作れる。 ちなみに、現在の最新版は2005 (8.0)。ただ、上に書いたような事情は変わらず。
>>613 ありなとうございまつ
早速VC++2005EEをインスコしますた
しかしネットだと.NET Framework使うプロジェクトか
HalloWorldみたいなウインドウすら出てこないのの解説ばかりでつなorz
猫でもわかるプログラミングでも観ることにするでつよ
>HalloWorld 早くもオリジナルな要素を取り入れてるのか
>>614 SDK入れなウィンドウの表示なんてできへんで~
すみませんが質問です。 大量のログをとれるようなDOSプロンプトというか、コンソールエミュレータと いうようなものを作る場合、リッチエディットコントロールを使うのがよいので しょうか? それともwin32アプリにしてしまって、入出力をリダイレクトするのが良いので しょうか?
619 :
デフォルトの名無しさん :2007/11/07(水) 01:08:09
>>617 特に見栄えを気にしなくてもいいのなら、「コンソールアプリ」 にするのがいちばん簡単だよ。
ログを取るだけで、画面にスクロール表示する必要がないのなら、ふつーにウインドウアプリ
でもいいし。ログだけファイルに落とせればじゅうぶんだろ?
>>619 レスサンクス
スクロールは使いたいですね。ログは軽く64kb以上になるので、リッチ
エディットコントロールしかないかな、と。
イベントのことはよく分かりませんけど、CLIを真似する以上はEnterキーを
見張らないとダメそうで、どうしたもんだかと悩みますね。
teratermのログ機能と、DOSプロンプトが合体したような感じが望ましいの
です。
ログ取るのにリッチエディットコントロールが出てくるのが意味不明だったけど それぐらいの容量なら普通のエディットコントロールでも余裕でいける
>>621 CREATEしたときにEM_SETTEXTLIMITを投げればいい、って言ってくれればいいのに。
AllocConsole
上のGetWindowRect(GetDesktopWindow(), &rect);について質問です。 この関数でrect.leftをはじめ、ディスプレイサイズの取得が出来るのは分かるのですが、 それによってウィンドウの表示位置を変えていくのであれば、WinMainの中のCreateWindowの水平、垂直位置の更新をしなければいけませんよね? その方法ってのはどうやるんですか?一応ウィンドウの雛形やCreateWindowの再描画などで調べたんですが、さっぱりでして。
起動時に位置を設定したいならCreateWindowに好きな位置を渡すだけだし 後で変えたいならMoveWindowとかSetWindowPlacement()など。
>>625 取り敢えずMoveWindowについて調べてぱっと記述してみたらできました。
SetWindowPlacementについてもまた調べてみたいと思います。
ありがとうございました。
627 :
デフォルトの名無しさん :2007/11/08(木) 00:43:31
うは、Win32プロジェクトがないw イラネw
Windows SDKでも入れて、 あとは適当なプロジェクトを作って、適当にオプションいじっておけ。
629 :
デフォルトの名無しさん :2007/11/08(木) 07:17:34
MUIに対応したものを作りたいのですが、 .rcconfigファイルの中身をどう書いたら良いかご存知の方はいませんか? サンプルアプリケーションを見てみたのですが、 <resourceType typeNameId="#4"/> の4が何を意味しているのかがわかりません。。
630 :
デフォルトの名無しさん :2007/11/08(木) 07:30:10
C#やっている人がC++やってもわからないよね?
スタンダード以上だと別途PSDK入れなくても Win32プロジェクトが最初から選べるのに気づいた ところでWin32プロジェクトってインテリセンスが 使えないんだが設定が悪いのか?それとも仕様?
633 :
デフォルトの名無しさん :2007/11/08(木) 23:06:47
LNK2001: 外部シンボル ""public: virtual void __thiscall CWnd::DoDataExchange(class CDataExchange *)" (?DoDataExchange@CWnd@@UAEXPAVCDataExchange@@@Z)" は未解決です。 Visual Studio 2005でMFCのアプリケーションをコンパイルすると 上のようなエラーがいっぱいでるのです。 これはどうやって回避すればいいのでしょうか?
634 :
デフォルトの名無しさん :2007/11/08(木) 23:12:48
ダメ! MFCで人生を棒に振った悲しいプログラマが、いったい何人いることやら。 MFC犠牲者慰霊の塔の下に眠っている幾千幾万のプログラマたちが 成仏できずに毎晩、悲痛なうめき声をあげて助けを求めているというのに。 マイクロソフト社さえ見放した禁断の果実MFCを、なぜ今更? もうこれ以上、犠牲者が増えるのを善良な市民として見ていられない。 忘れなさい。MFCの事は忘れなさい。記憶の底から消し去るのです。 MFCなんて見なかった。聞かなかった。この世に存在しなかった。 いいですね?わかりましたね?
635 :
デフォルトの名無しさん :2007/11/08(木) 23:18:21
マイクロソフトは、.NETの成功に関わらず C++の開発を進めています。 次に発売するVisual StudioのMFCには、Vista用のWindowsメッセージの追加。 XmlLiteなどなど、お楽しみがいっぱいです。
そんなことよりもATLのopen source化をだな
>>633 VS2005の修復で直らなければ再インスコ
マイドキュメントのVisual Studio 2005のフォルダをまるまるノートにコピーして プロジェクトを開いたところ,作成していたプログラムの中のラベルが全て 黒塗りに表示されてしまいました。 ビルドして実行しても黒塗りは変わりません。 直す方法はありますか?
639 :
デフォルトの名無しさん :2007/11/09(金) 00:45:40
PSRTとかLPSTRってString型みたいなもんですか?
全くの無知なんですが、C・C++を覚えたいと思います。 まず何をするべきでしょうか?
C/C++のコンパイラをインストール このスレに来たからにはVisualC++だな
643 :
デフォルトの名無しさん :2007/11/09(金) 06:31:52
>>642 把握㌧
とりあえずいろいろ調べながらいじってみます!
スレチに気付いたら黙って消えますw
644 :
デフォルトの名無しさん :2007/11/09(金) 14:10:53
VisualC++のwindowsフォームアプリケーションで スクリーンキーボードを作ってるんですが 初期のウィンドウを非アクティブ化することができません。 どうしたらいいでしょうか?
645 :
デフォルトの名無しさん :2007/11/09(金) 16:13:31
>>644 初期のウィンドウってなに? キーボード?
systemやgetchといった関数が「認識されません」というふうにエラーが出ます。 #include<windows.h>や#include<conio.h>のヘッダが登録できてないのでしょうか。 またそうであれば、やり方を教えてください。 よろしくお願いします。
windows.hとconio.hをインクルードしてもsystemやgetchは使えない。 systemを選択してF1押すべし。
>>647 選択とはドラッグでいいんでしょうか。
F1押すとヘルプが出るんですが、どの時点で押せばいいんでしょうか・・・
649 :
デフォルトの名無しさん :2007/11/09(金) 18:00:11
・まず、画面に出たエラーメッセージをよく読んでみてごらん。 読んでも分からないなら、省略せずにそっくりそのまま掲示板に貼り付けて質問しよう。 ・system関数を使うのに必要なヘッダファイルは何かな? (あえて正解は書かないよ。自分で調べる練習しなさい。宿題です) ・getchも同様。 Visual CコンパイラはIDE統合開発環境と、コマンドラインの2種類がある。 ・IDEはIDEの使い方を覚えなきゃいけないという障害は立ちふさがる。 ・コマンドラインのコンパイラは環境変数の設定とかなんとかメンドクサイ。 どちらも超初心者には敷居が高い。独学はかなりの覚悟が必要。 だれか先生になってもらってくれる人がいればいいんだけどね。
>>649 エラーメッセージは
'getch': 識別子が見つかりませんでした
'system': 識別子が見つかりませんでした
です。
ヘッダファイルは
<windows.h>
<conio.h>
だと思います。
違っていたら、調べ直すので指摘だけお願いします
違ってます。 選択の説明しようと思ったけど指摘だけとのことなので省略。 まーがんばれ
windowsがどっからくるのよ stdlib
::CreateProcessかなんかと勘違いしてるんだな 俺にはわかる
そんな糞サイトの後始末頼まれても迷惑 書いた本人に直接聞けよ
うは、声がきもい。 インデントが変態。 空白の明け方がへぼい。 思考の流れが行き当たりばったり。
657 :
デフォルトの名無しさん :2007/11/10(土) 01:27:18
面白そうなのでオレも見てみた。
インデントが変???ぜんぜん変じゃないんだけど・・・
っつう事で、
>>656 がどんな立派なコードを書いてるのか、期待age
http://www.wisdomsoft.jp/dev/api/windows/004 の
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
CHAR chStr[128];
wsprintf(chStr , "インスタンスハンドル : %d" , hInstance);
MessageBox(NULL , chStr , TEXT("Kitty on your lap") , MB_OK);
return 0;
}
が
エラー 1 error C2664: 'wsprintfW' : 1 番目の引数を 'CHAR [128]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照) c:\documents and settings\gald.pc-p4gald\デスクトップ\sdaf4e\sdaf4e\asdf.cpp 7
エラー 2 error C2664: 'MessageBoxW' : 2 番目の引数を 'CHAR [128]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) c:\documents and settings\gald.pc-p4gald\デスクトップ\sdaf4e\sdaf4e\asdf.cpp 8
というエラーで実行できないんだけど
なぜでございましょう?
つか、VBやらC#の型はわかりやすいのに
WCHARとかTCHERとかLPSTRとか理解しにくい型が多くて苦しい
>>658 エラー通りだな
CHAR chStr[128];
を
TCHAR chStr[128];
に変更すればいいんでない?
それでエラーが出るなら、<tchar.h>をインクルードすればOK
660 :
デフォルトの名無しさん :2007/11/10(土) 01:32:52
プロジェクトがユニコードになってるからだよ。 ANSIに変更しよう。 初心者がかならずつまづく超FAQだね。
何回も同じ質問を見てるな テンプレにでも入れた方がいい気がする
>>659 #include <windows.h>
#include <tchar.h>
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
TCHAR chStr[128];
wsprintf(chStr , "インスタンスハンドル : %d" , hInstance);
MessageBox(NULL , chStr , TEXT("Kitty on your lap") , MB_OK);
return 0;
}
エラー 1 error C2664: 'wsprintfW' : 2 番目の引数を 'const char [26]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
だそうでつ
>>660 プロジェクトのプロパティ-構成プロパティ-全般 の
文字セットを「Unicode文字セットを使用する」から「設定なし」にしたら
上記のコードが動いたわけですが、
これはソースコードそのものがUnicodeだったからダメだったってことでつか?
理由がよくわからんです
663 :
デフォルトの名無しさん :2007/11/10(土) 02:01:46
>>662 _T("インスタンスハンドル : %d")
とすれば、いいよ
TCHARってのは、コンパイル時に自動で、マルチバイト文字セットとUNICODE文字セットを切り替えてくれます
文字リテラル("文字列"とか'a'とか)については、_Tもしくは、TEXTマクロで、マルチバイト文字セットとUNICODE文字セットの変更を自動でしてくるようになります
ソースコードがUNICODEとか言うんじゃなく、現在扱っている文字が何なのかをコンパイラに教えてやる必要があるって事です
それを省略したら、勝手に、ANSIとかOEMとか言う文字セットとして扱われるって事です
665 :
デフォルトの名無しさん :2007/11/10(土) 03:09:35
非ユニコードアプリとユニコードアプリの差をまず理解しないとだめってことでつね
666 :
デフォルトの名無しさん :2007/11/10(土) 10:46:55
今、ゲーム作ってるんですけど教えてください。(ゲ製作で聞くべき?) ゲームの画面を(ウィンドウが隠れたりしても)表示させるために WM_PAINTで BitBlt(hDC2,0,0,200,200,GetDC(hWnd),0,0,SRCCOPY); てな感じでhDC2に退避させて、ウィンドウが隠れたりして再表示する時に hDC2から持ってくる・・・という風にしたいんですが、 1.WM_PAINTの部分で画面を退避させるという事は変でしょうか? 「普通はこうやる」っていうのがあれば教えて頂きたい。 2.退避させた画面はどの部分(ハンドラ)で戻すべきですか? 今のところ、WM_TIMERで一定時間ごとに戻してるのですが・・・
予めメモリDCを作っておいて、描画は全てそこへ行う。 WM_PAINTでは、そのメモリDCからウィンドウDCへのBitBltに限る。 ってのが普通。
でも666はありえないだろ。 話はそれるがReleaseDCしていないのも目に付くし。
夫失敬。
>>657 void main(){
while (1)
{
DrawMap();
}
}
--
変態かどうかは兎も角、不思議なコーディングスタイルだとは思う。
めんどくせー > VC++ Formねーじゃん どうやってGUIつくんだよ
珍しいVC++だね。ウチのにはForm付いてるよ。
うちのはintも付いてない
それVirtualConsoleだろ
676 :
デフォルトの名無しさん :2007/11/11(日) 01:40:15
VC6.0でプログラムしています。 MFCは使わず、APIのみ。 ダイアログボックスにコンボボックスを貼り付けて 内容(数字)をリストから選択するような動作をさせたいと思っています。 ワードでフォントを変更するときのコンボボックスのようなイメージです。 VC上でダイアログボックスにコンボボックスを貼り付け、 コンボボックスのプロパティのデータ にある”リストボックス項目の入力(N)”に 選択したい数字のリストを並べれば良いかと思ったのですが 実際に動かしてみると コンボボックスの▼を押してもキーボードの↓を押しても リストが現れません。 やり方が間違っているでしょうか? 関係ないかもしれませんが手元の参考書ではリストボックスを使用する場合の方法が書いてあり リストボックスを初期化するにはSendDlgItemMessage()関数を使用するとのことだったので 試しにやってみましたがリストボックスではリストに文字列を追加できましたがコンボボックスでは追加されませんでした。 内容に不足などありましたらご指摘をお願いします。
>コンボボックスの▼を押してもキーボードの↓を押しても >リストが現れません。 ああこれね
678 :
676 :2007/11/11(日) 07:36:53
>>677 おはようございます。
良くある質問でしょうか?
申し訳ないですが質問内容が間違ってました。
▼ボタンを押すとドロップダウンリストは出ます。
しかし、中が空っぽです。
リソースエディタで入力した内容を反映させたいのですが。
早まって答えなくてよかった >リストボックスではリストに文字列を追加できましたがコンボボックスでは追加されませんでした 問題はこれか
680 :
96 :2007/11/11(日) 09:14:14
リソースエディタのコンボボックスまわりの内容はこんな感じです // Dialog // IDD_CONFIG DIALOG DISCARDABLE 125, 110, 194, 95 STYLE DS_SYSMODAL | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "CONFIG" FONT 9, "MS Pゴシック" BEGIN LTEXT "コンボボックスで値を選択してください",IDC_STATIC,7,19,77,8 PUSHBUTTON "OK",IDC_CONFIG_OK,133,14,26,15 COMBOBOX IDC_COMBO2,86,16,46,71,CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | WS_TABSTOP END // Dialog Info // IDD_CONFIG DLGINIT BEGIN ←コンボボックスのリストに表示したい値(1~20の数字) IDC_COMBO2, 0x403, 2, 0 0x0031, IDC_COMBO2, 0x403, 2, 0 ~~~~省略~~~~~~~~ IDC_COMBO2, 0x403, 3, 0 0x3931, "\000" IDC_COMBO2, 0x403, 3, 0 0x3032, "\000" 0 END
名前欄ミスしました。
リソースレベルでコンボボックスのデータを定義できるのはMFCの独自機能。 リソースビューの*.rcを選んでプロパティを見てもらえば分かるが、 'Mfc Mode'という項目が用意されている。 これをFalseにすると、コンボボックスのプロパティでData部分が無効になる。
683 :
676 :2007/11/11(日) 13:38:36
>>682 なるほどそういうことでしたか。
ありがとうございます。
リストの値をSendDlgItemMessage()関数で追加できないと書きましたが
参考書で引数に LB_ADDSTRING を指定しているところで
CB_ADDSTRING を指定するようにしたところリストに追加できました。
ありがとうございました。
684 :
デフォルトの名無しさん :2007/11/11(日) 15:40:55
質問させてください。 Visual C++ .net 2005で開発を行っています。 フォーム(Form1)やピクチャボックス(pictureBox1)に簡単なグラフを表示させたいのですが、 button1_Click等で描画すると、一度非表示になった部分の線が消えてしまいます。 Form1_Paintイベント内で描画すれば解決するのですが、毎回データを読み込んだり計算するのが 無駄に感じます。 Form1で非表示になった部分を消さないための方法はあるのでしょうか? または、なんらかのバッファに描画して、それをForm1_Paint内で毎回読み出すという方法のほうがいいのでしょうか? そのための方法等があれば教えてください。 よろしくお願いします。
685 :
684 :2007/11/11(日) 15:44:04
補足 線は、 Graphics^ gr = pictureBox1->CreateGraphics(); Pen^ pen1 = gcnew Pen(Color::Black,2); gr->DrawLine(pen1,10,10,200,200); こんな感じで書いています。
>>684 Imageに描いて、Paintイベントでgr->DrawImage
687 :
648 :2007/11/12(月) 00:13:47
>686 なるほど、ありがとうございます。 Bitmapをバッファとして使い、Graphics::FromImageで取り込んだイメージに対して、 描画を行いました。おかげでうまくいきました。 ↓みたいな感じでよろしいでしょうか? 何か改善点があればご指摘お願いします。 Bitmap^ bmap1; private: System::Void mnDraw_Click(System::Object^ sender, System::EventArgs^ e) { Pen^ pen1 = gcnew Pen(Color::Black,2); Graphics^ gr1 = Graphics::FromImage(bmap1); gr1->DrawLine(pen1,10,10,100,100); // gr1->Dispose(); //なぜかエラーになる Form1::Refresh(); } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { bmap1 = gcnew Bitmap(200,200); } private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { e->Graphics->DrawImage(bmap1,100,100,200,200); }
688 :
デフォルトの名無しさん :2007/11/12(月) 00:15:57
>>687 Bitmap^ の 「^ 」 ってどういう意味?
Win32アプリ開発で VSの出力の部分にウインドウメッセージを表示したいのですが .netでいうSystem.Diagnostics.Debug.Printに相当する機能はないですか?
690 :
デフォルトの名無しさん :2007/11/12(月) 00:18:17
>>689 ドットネットの質問は他所でやれ馬鹿者!
692 :
684 :2007/11/12(月) 01:09:01
>688 自動でガーベージコレクションをやってくれるようです。ようは、使い終わったら勝手にメモリを開放してくれるらしい。
694 :
デフォルトの名無しさん :2007/11/12(月) 08:44:30
win32APIで虫眼鏡のプログラムを作ってます。 メモリデバイスコンテキストでマウスカーソル周辺を拡大したものを ディスプレイのデバイスコンテキストに転送してるんですが、 マウスを移動させたときに先ほど拡大した部分を元に戻して 移動先のマウスカーソル周辺をまた拡大という風にしたいんです。 ですが、毎回GetDC(0)をしたとしても拡大した後のディスプレイでは初期化できないし、 hdc2という二つ目のデバイスコンテキストに拡大前の状態を退避させて hdc1に復活させようと思ったのですがうまくいきません。 さらに、メニューを開いたり新たにソフトを起動させたりと、 刻々と変化するディスプレイの状態を追いかけつつ拡大できるようにしたいのです。 探し方が悪いのかもしれませんが、 いろいろ検索しましたが良い解決法が見つかりませんでした。 それに虫眼鏡のプログラミングを解説してるサイトもなさげだし・・・。 このような場合、どのような方法を用いればいいのでしょうか? よろしくお願いします。
MSDNのサンプルじゃダメなの? /****************************** Module Header ******************************* * Module Name: zoomin.c * * Microsoft ZoomIn utility. This tool magnifies a portion of the screen, * allowing you to see things at a pixel level. * * History: * 01/01/88 Created. * 01/01/92 Ported to NT. * 03/06/92 Cleanup. * ****************************************************************************/
一応 .netを使ったC++/CLI は、普通のC++とは全く別物 .net使いたいならC#がいいと思う
argcとargvについて教えてください。
698 :
694 :2007/11/12(月) 13:27:05
>>695 そのページってどこを探したらありますかね?
MSDNのサイト調べても見あたらなかったんですが…。
教えて君で申し訳ありません。
>>698 Platform SDKはインストールしてる?
Visual Studio 2005を使って、DirectXプログラムを作ろうとしてます。 ちなみにOSはWindowsXP Home Editionです。 ネット上の解説サイトで、Visual C++ Express Editionを使って Windowsアプリケーションを作成する場合にはPlatform SDKが必要と書いてあるんですが、 Visual Studio 2005を使う際にもPlatform SDKをインストールしておいたほうが良いでしょうか?
今ならPlatform SDKよりWindows SDKお勧め。 DirectXには、DirectX SDKが必要。 ただし、DirectShowには上2つの内どちらかが必要。
>>701 ありがとうございます。
DirectShowが何かよくわかりませんが、
解説本がPlatform SDKで進めているので、
これとDirectX SDKでやってみます。
VisualC++ Expressでプログラム製作をしています。 プログラム実行中にコードを書き換えてAlt+F9を押すと、動的にプログラム の内容を変えてくれますが、ボタンを押しても出来ない時があります。 これは何が原因なのでしょうか?
704 :
700 :2007/11/12(月) 20:24:35
度々すみません。 DirectXのテストをしようと、 D:\Program Files\Microsoft DirectX SDK (November 2007)\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice\CreateDevice.cpp を自分のプロジェクトフォルダにコピー、既存の項目を追加して、 ソリューションのビルドをしてみると以下のエラーが出ました。 CreateDevice.obj : error LNK2019: 未解決の外部シンボル _Direct3DCreate9@4 が関数 "long __cdecl InitD3D(struct HWND__ *)" (?InitD3D@@YAJPAUHWND__@@@Z) で参照されました。 C:\Documents and Settings\(ユーザ名)\My Documents\Visual Studio 2005\Projects\d3dtest01\Debug\d3dtest01.exe : fatal error LNK1120: 外部参照 1 が未解決です。 そこで、Direct3DCreate9を含む「d3d9.lib」をプロジェクト名→プロパティ→リンカ→入力の「既存の依存ファイル」に追加したのですが、 まだ同じエラーが起こります。 D:\Program Files\Microsoft Platform SDK\Bin/Lib/Includeのパスは追加したのですが、 他に何が原因なんでしょうか?
> DirectXには、DirectX SDKが必要。
706 :
700 :2007/11/13(火) 09:42:22
色々と試行錯誤してるうちに上手くいったようです。
ご迷惑かけました。
>>705 もうインストールしてます。
D:\Program Files\Microsoft DirectX SDK (November 2007)\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice\CreateDevice.cpp
があるんですから。
色々と書いて、具体的に何が効いたのか書けないようでは また同じことやるな。
708 :
デフォルトの名無しさん :2007/11/13(火) 12:40:32
break文がきかないことがたまにあるんですが どういった場合があげられるのでしょうか 例だとこんな感じです tesはワーカースレッド等でTRUEにします tes=FALSE while(1){ while(1){ if(tes!=FALSE){ break; } } tes=FALSE; break; }
別のスレッドがこのループ内tesをFALSEに書き換えた時
710 :
708 :2007/11/13(火) 12:44:07
リアルタイムでログを吐き出してみたのですが tesはTRUEでした
くだらないこと気にするとハゲる
tesの読み込みが最適化で消えている可能性は?
文盲か? たまにあるんですがと書いてるだろうが
気のせい
volatile付けとけ
716 :
デフォルトの名無しさん :2007/11/13(火) 21:14:07
リソースビューでツリーに表示されるリソースのIDを " で囲っておかないとコンパイル時に読み込めない(?)みたいなのですが どういう理由でしょうか?回避方法はあるでしょうか?
囲んでも囲まなくてもどっちでも可能
718 :
716 :2007/11/13(火) 21:56:32
>>717 そのはずだと思うのですが
” で囲まない場合、ビルド時にエラーは出ませんが実行しても
そのリソースが表示されません。
ビルド時に読み込めていないのではないかと思っているのですがどうでしょうか?
リソースビューのツリーには表示されないリソース、例えばダイアログの中のエディットボックスなどは " で囲まなくても
ちゃんとビルドされています。
>>717 の説明は間違ってはいないが、
ソース側もそれに合わせて直さないと動かないぞ。
// 囲まずに宣言(リソースはresource.hで宣言されたIDで識別される)
IDB_BITMAP
LoadBitmap(hinst, MAKEINTRESOURCE(IDB_BITMAP));
// 囲んで宣言(リソースは文字列で識別される)
"IDB_BITMAP"
LoadBitmap(hinst, _T("IDB_BITMAP"));
こんな感じで。
>>719 うまくいきました。
ありがとうございました。
721 :
694 :2007/11/14(水) 01:37:06
>>695 さんのサンプル探して見てみたんですが
複雑で何がなんだかさっぱりって感じで・・・。
どなたか
>>694 の質問なんですが
アドバイスいただけないでしょうか?
ヒントだけでもいいので・・・。
722 :
デフォルトの名無しさん :2007/11/14(水) 11:25:14
マイクロソフトの公式から iso版 Visual C++ 2005 ExpressをCDに焼いてから インターネットつないでいないパソコンにインストールして その後 インターネットにつながっているパソコンから登録して ライセンスキーもらってそのコードでライセンス登録いけるのかな
>>722 ライセンスキーはない。ネットでの登録は任意。
プロジェクトを1つ作ってセーブすると登録うんぬんのメッセージは出なくなる。
724 :
デフォルトの名無しさん :2007/11/14(水) 14:20:38
30日とかうんぬんかいてたけど30日後使えるのかな
>>721 どの辺がうまくいかないの?
技術的にはそんなに難しいところは無いと思うけど。
726 :
デフォルトの名無しさん :2007/11/14(水) 18:26:33
CDialogを派生したダイアログにて エディットボックスをダイアログ表示時の フォーカス初期位置にしたいのですが どうすればいいのでしょうか?
VisualStudio6.0上でC++を使って組んでいるのですが、 デバッガで変数の中身を覗く際std::vectorの中身が覗けなくて困っています First。つまり最初の要素だけは見えるのですが… 固定長配列の時のように、vectorの中身を気軽に覗く方法はないでしょうか?
2005なら普通に見れるよ^^
自分で作ったコンテナクラスをデバッガで、中身を気軽に覗く方法はないでしょうか?
autoexp.datで調べてみるといいよ^^
731 :
デフォルトの名無しさん :2007/11/14(水) 20:50:08
質問させてください。 Visual C++ 9.0(日本語版)使ってるのですが、 コンパイル時のエラーメッセージが英語で出ます。 日本語で表示するようにしたいのですが、 可能であれば、やり方教えてください。。 例)'a' : undeclared identifier
β使っててそんなこと聞くなよ
733 :
721 :2007/11/14(水) 23:53:33
>>725 カーソルを移動させたときに以前の座標で拡大していた部分を元に戻したいんです。
元に戻すために、拡大していない画面をどのように保存したらいいのかわからないんです。
それとももっとほかに良い方法あるんでしょうか?
275じゃないけど、元に戻したら駄目なんじゃないの?古い情報になるし。
>>694 の仕様を見る限り、拡大された領域にある個々のアプリを無効化して
再描画して貰うしかないんじゃないかな。相手が自分で再描画を繰り返す
場合は綺麗に動かないと思うけど。
仕様に無理がある気がする。
>>726 タブオーダーの設定じゃ、行かないんだっけ?
姑息な方法だと、WM_PAINTのハンドラで
最初の一回だけCDialog::GotoDlgCtrl(xxx)
WM_INITDIALOG で設定して0を返せばいいんじゃなかったっけ。
ってCDialogってことはMFCか OnInitDialog()ね
XPでVC++2005使っています どうすれば彼女ができますか?
XPもVCも窓から投げ捨てろ パソコンから一切手を引け 2chにも来るな
COMオブジェクトのDLLを#importすればtlhが作られて関数のシグネチャとかがわかりますが、 一々#importするのは面倒なのでDLLにどんな関数やクラスが含まれているかを閲覧するソフトを知りたいんですが どなたかご存知ありませんかね?
OLE-COM Object Viewerはどう? VC++に付いてきた気もするが、 なければPlatform SDKやWindows SDKを入れれば付いてくる。 あとは.NET 2002以上なら参照設定してみるとか、 オートメーションならExcelほかVBAのオブジェクトビューアなんて手もある。
>>741 どうもありがとうございます
一応目的は達成できました。この手のdllはType Libraryというのですね…
参照は.NET専用だからnative C++では使えないっぽいですね
743 :
デフォルトの名無しさん :2007/11/16(金) 05:18:20
バーチャルC++2005エクスプレッソをインストロールしたら レジスターが書き換えられてディスクトップがぐちゃぐちゃになって、 エキスプローラでホルダーをクィックしても動かなく なってしまいました。どうすればレジスターを修復で きますか? ソフトはWindous95で機種はBMWの アクティバです。接続環境はフレッシュISBNです。 ヤッホーやゴーグルなどの検索で調べても解らないので ツーチャンネルの皆様、ご指導よろしくお願いします
744 :
デフォルトの名無しさん :2007/11/16(金) 09:21:47
>>739 #include <stdio.h>
void main(){
while(1){
printf ("大好き! \n");
}
}
sage
746 :
デフォルトの名無しさん :2007/11/16(金) 09:22:21
752 :
デフォルトの名無しさん :2007/11/16(金) 17:35:14
753 :
デフォルトの名無しさん :2007/11/16(金) 18:09:23
えろすぎるぞ
XP,VC++2005でSDKでのウィンドウ作りで グループボックスを作りそれにボタンやリストを貼り付けたのだが メニューやボタンなどのアクションをしても 普通の動きをせず、ウィンドウが再描写?されません。 どうしたら回避できるでしょうか?
意味不明。ソースupしる。
自重しろ
デバッグで変数の最大値をウォッチすることはできるのでしょうか? とりあえず値を出力に出しているのですが 何千ループもするので大量の数字が出てきます. 最大値だけチェックしたいのでたくさん数字が出てもあまり必要ないのです. ソース内にmax関数を入れてそれで最大値をとればいいのですが あまりソースには書きたくないのでデバッガで何とかウォッチする方法が知りたいです.
759 :
755 :2007/11/17(土) 18:06:58
初心者なので何が因果してるかわからないのですが 作成部とアクション部を載せると swich(message) { case WM_CREATE : // 要素作成 Create(); break; ・ ・ void Create() { HWND hButton, HWND hGroup; // ウィンドウに貼り付ける hGroup = CreateWindow("BUTTON", TEXT("testgroup"), WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 20, 20, 170, 170, hWnd, (HMENU)ID_BUTTON, hInst ,NULL); // グループボックスに貼り付ける hButton = CreateWindow("BUTTON", "test", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 90, 80, 40, 30, hGroup, (HMENU)ID_BUTTON, hInst ,NULL); CreateList(hGroup); } 続く・・・
760 :
755 :2007/11/17(土) 18:10:30
void CreateList(HWND hGroup) { LV_COLUMN lvcol; LV_ITEM item; // グループボックスに貼り付ける g_hList = CreateWindowEx(0, WC_LISTVIEW, TEXT(""), WS_CHILD | WS_VISIBLE | LVS_REPORT, 20, 20, 100, 50, hGroup, (HMENU)ID_LISTVIEW, hInst, NULL); // リストヘッダ1に名前挿入 lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvcol.fmt = LVCFMT_LEFT; lvcol.cx = 50; lvcol.pszText = TEXT("名前"); lvcol.iSubItem = 0; ListView_InsertColumn(g_hList, 0, &lvcol); // リストヘッダ2に名前挿入 lvcol.cx = 50; lvcol.pszText = TEXT("住所"); lvcol.iSubItem = 1; ListView_InsertColumn(g_hList, 1, &lvcol); } 続く・・・
761 :
755 :2007/11/17(土) 18:12:16
ウィンドウ作成後、アクションを受ける case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_status: // リソーススクリプトで作成したメニューID ・ ・ break; case ID_BUTTON: SetList(); // リストにアイテムを追加する関数 break; } break; メニューアイテムやボタン等でアクションを起こすと 結果が適応されずメニューアイテムが消えずに残ったり ボタンのアクションをしてくれません。 その後、ウィンドウを移動させると ウィンドウが再描写され?結果が表示されます。 (メニューアイテムからリストにアイテムを追加するというのを 作ったので、それは再描写後表示されます。 ボタンの結果は表示しれくれませんが) グループボックスは後からつけたもので、 これをつける前、リスト等は直接ウィンドウに貼り付け 期待した動作をしてくれていました。 グループボックスをつけても上の動作をするためには どうしたらいいでしょうか。 長くなってしまいましたがよろしくお願いします
グループボックスはコンテナでは無い。 ラベルと同じようなものだと考えればいい。 グループボックスは必要な部分しか描画しないので、 中に他のコントロールがあっても問題無く描画される。 何故ボタンの一スタイルなのかは永遠の謎だけどな。
763 :
755 :2007/11/17(土) 20:14:41
返信ありがとうございます。 つまり全てウィンドウに直接貼り付ければいいと いうことですね。 なにぶん自宅に環境がないため確認できないですが。。。 確かにボタンというのは謎ですね。 グループボックスを作る際、調べるときに ボタンはさすがに思いつきませんでしたよ・・・
764 :
デフォルトの名無しさん :2007/11/18(日) 20:07:55
Win32のほうを教えてくれるのでしょうか? それともMFCでつか?
765 :
デフォルトの名無しさん :2007/11/18(日) 20:57:01
766 :
OPENCV :2007/11/19(月) 00:07:56
はじめまして。 IplImage *img = cvLoadImage("hello.jpg"); int wid = (*img).width; int hei = (*img).height; int sirokuro[wid][hei]; というコードが通りません。 「error C2057: 定数式が必要です。 サイズが 0 の配列を割り当てまたは宣言しようとしました。 'sirokuro' : 添字がありません。」 と言われてしまいます。 IplImageとは typedef struct _IplImage { 途中省略 int width; /* image width in pixels */ int height; /* image height in pixels */ } IplImage; と宣言されているものです。 一番上のコードの3行目の後でcoutによりwidやheiの値を確認すると、 思い通りに画像のwidth,heightが出力されます。 しかし4行目の配列宣言が通りません。 分かる方、教えてください。よろしくお願いします。
767 :
デフォルトの名無しさん :2007/11/19(月) 00:50:03
new したら?
768 :
デフォルトの名無しさん :2007/11/19(月) 01:01:53
int *sirokuro = new int[wid*hei]; sirokuro[x+y*wid] = なんとか
769 :
OPENCV :2007/11/19(月) 01:50:47
>>767 >>768 ありがとうございます。newで解決できそうです。
newはC言語でいうmallocだと思っています。
動的にメモリを確保するためのものだと。
しかし今回、sirokuroというint型二次元配列はずっと使うため、
解放しなくてもいいと考えています。
なぜnewが必要になるのか、分かる方がいらっしゃいましたら
教えてください。よろしくお願いします。
コンパイル時には配列の要素数が分からないから。
771 :
OPENCV :2007/11/19(月) 02:17:31
>>770 わかりやすく簡潔な回答、ありがとうございます。
すべて疑問が解決しました。みなさまありがとうございました。
どうでもいいけど、 (*img).width; は img->width; じゃいかんのか?
ポインタ経由でoperator()を呼び出すときに、短くなるように(*hoge)()みたいにすることはあるが それ以外は単に冗長になるだけだと思うなぁ
演算子のオーバーロードとかいらなくない? 話がややこしくなるだけだろ、これ。
775 :
デフォルトの名無しさん :2007/11/19(月) 14:07:05
演算子のオーバーロードはいる 簡単になるからな 複素数や行列や文字列をオーバーロードで同じ書き方が出来る
演算子のオーバーロードって何ですか?
777 :
デフォルトの名無しさん :2007/11/19(月) 15:53:38
>>776 A、Bを行列のデータ(class)とするとき 行列の積を A*Bで出来るようにするやつ
いい加減スレ違い
VC++でWin32apiのプログラムを書くのですが 通常のwin32プロジェクトとダイアログベースでは プロシージャなどの書き方等、色々と変わるようですが ダイアログベースでは出来ないこと、不都合な点というのはあるのでしょうか?
両方まぜて使えるからどうでもいい
>>771 あと、スタックに画像みたいなでかいものを確保したら、
スタックオーバーフローする場合があるから。
C99だとint sirokuro[wid][hei];ができるし、
固定値で多めにとっておくとかした場合にね。
VC++2005で作成したプログラムが、他のVC++2005をインストールしていないPCで起動しません。 「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした」 というエラーメッセージが返ってきてしまいます。 ググってみたところ、プロパティ→C/C++→コード生成→ランタイムライブラリを、「マルチスレッド(/MT)」 にすればいいと書いてあったので、変更してビルドしてみたところ、今度は 「MSVCR80.dll」が見つからなかったため、このアプリケーションを開始できませんでした」 というエラーメッセージが返ってきてしまいました。 ググってみても、やはりマルチスレッド(/MT)にしろといった解決法しか見つかりませんでした。 MSVCR80.dllに依存しない.exeを作成するにはどうすればよいでしょうか。
783 :
782 :2007/11/20(火) 00:00:35
追記です。 msvcr80.dllを C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd からコピーして C:\WINDOWS\system32 にコピーしてみたところ 「アプリケーションを正しく初期化できませんでした(0x80000003)。」 というエラーメッセージが出てしまいました。 msvcr80.dllを参照できるようにしても起動出来ないということでしょうか…。
さすがに
>>782 なら超初心者の俺でも分かるぜ
それはデバックビルドをしてるからだ。2005ならメニューバーのとこにdebugって書いてあるのを、
releaseに直して、ちゃんと文字セットも直してビルドして、releaseフォルダに出来た*.exeを配布すればおkだぜ
教えてください。 VC6で単精度な浮動小数点の 正規化数・非正規化数を区別したいんですけど 専用の関数ってあるんでしょうか? やっぱり自前でビットをマスクした方が早いんでしょうか?
787 :
デフォルトの名無しさん :2007/11/20(火) 11:11:02
質問があります。環境はVS2003.NETです。 ずっとC#漬けの毎日だったんですがC++もやる必要があり、久しぶりに新規ソリューション作って テストプログラムを作りました。 内容は、環境変数の内容をリストボックスに表示するというものです。 private: System::Void button1_Click(System::Object * sender, System::EventArgs * e) { string s = getenv(textBox1->Text); listBox1->Items->Add(textBox1->Text + " = " + s); } これをコンパイルすると error C2065: 's' : 定義されていない識別子です。 error C2065: 'string' : 定義されていない識別子です。 って出ます。 こんな初歩的なところでつまづくとは思わんかった…。 何がいけないんでしょうか?
stringが何なのかわからないと言っている。 C#ではstringはSystem.Stringのエイリアスのようだが C++/CLIではそうなってない。
789 :
デフォルトの名無しさん :2007/11/20(火) 11:24:43
#include <iostream> using namespace std; class Rocket { int f; // 燃料 int v; // 速度 int h; // 高度 public: Rocket() { f=100; v= 0; h= 0; }
790 :
デフォルトの名無しさん :2007/11/20(火) 11:25:33
void Accel(int b) { f = f - b ; //fのあたいを十減らす v = v + b ; //vの値を十増やす h = h + v ; //hの値をvだけ増やす } int GetF() const { return f; } }; int main() { Rocket x; x.Report (); int a; // 燃料がなくなるまで以下の4行を繰り返す。 while (x.GetF() > 0) { cout << "どれだけ加速する"; cin >> a; x.Accel (a) ; x.Report (); } }
791 :
787 :2007/11/20(火) 11:28:02
>>788-790 ありがとうございます。
#include <iostream>
using namespace std;
この定義が必要なんですね。
なんとめんどくさい…。
>>790 何がしたいの?
# どうでもいいけど、燃料を消費した分丸々速度を増やせるって無茶苦茶過ぎると思うぞ。
>>787 つ[include]
# 790は関係ないぞw
ダブルバッファリングがうまくいかないんですが何故でしょうか。 case WM_CREATE: hDC = GetDC(hWnd); hBackDC = CreateCompatibleDC(hDC); hBitmap1 = CreateCompatibleBitmap(hDC, 450,396); SelectObject(hBackDC, hBitmap1); SetTimer(hWnd, 1, 1000, NULL); return TRUE; case WM_TIMER: InvalidateRect(hWnd,NULL,FALSE); return TRUE; WM_PAINT hDC = BeginPaint(hWnd,&ps); BitBlt(hDC,0,0,450,396,hBackDC,0,0,SRCCOPY); EndPaint(hWnd,&ps); return 0;
ソースはおおまかにこんな感じです。 SetTimerで1秒毎に画面の再描画をしているので、画面がちらついてしまいそれを抑えようと思ってダブルバッファリングを加えようと思ったんですが、 WM_PAINT内に hDC = GetDC(hWnd); hBackDC = CreateCompatibleDC(hDC); hBitmap1 = CreateCompatibleBitmap(hDC, 450,396); SelectObject(hBackDC, hBitmap1); を記述すれば普通に画面が表示されるんですが、それでは時間経過と共にページファイルが凄い事になってしまいます・・ 調べていくと元々ダブルバッファリングはWM_CREATEでやるようで、 WM_PAINTではBitBltをするだけのようですが、それがうまくいきません。 Run-Time Check Failure #3 - The Variable 'hBackDC' is being used without being defined.とエラーダイアログが出ます。 WM_PAINT内を消すと空ウィンドウですがエラーはでなくなります。 長くなりましたが、是非お願いします。
795 :
超初心者 :2007/11/20(火) 13:21:43
アプリケーションの外観をダイアログではなく画像などを使ってデザインしたいのですがどうやれば良いのでしょうか? 的外れな質問かもしれませんがヒントだけでもください
ヒント:スレ違い
>>794 WinAPI知らんからよく判らんが、
・CreateDCしたオブジェクトはどっかで解放するべきではないの?
・hBackDCが有効かどうかテストしてからBitBltすればいいんでないの?
とは思った。
799 :
超初心者 :2007/11/20(火) 13:35:43
スレ違いなんですか?ということは他の言語でも共通してやる方法があるってことですか?
>>799 まずは日本語から勉強したほうがいいみたいだな
それに回答者はエスパーじゃない
「具体的に」どうしたいのか?が無いと答えられない
>>799 >1を見れば判るように、ここはプログラミング以前の質問をする場所ではありません。
>>793 hBackDCはどこでどんなふうに宣言してる?
803 :
超初心者 :2007/11/20(火) 14:13:07
普通出来上がったアプリケーションはダイアログベースのものだと思うのですが スキンでデザインをカスタマイズしたようにしたいんです
>>798 開放ってのはreleaseDCですか?
>>802 LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
HDC hDC,hMemDC,hBackDC,memDC;
PAINTSTRUCT ps;
上記の位置でまとめて宣言してます。
>>804 そりゃ無理でしょ。
CREATE時のDCとPAINT時のDCは別物じゃん。
そのプロシージャ使うウィンドウが1つしかないなら、とりあえずstaticつけて試してみ。
>>803 グラフィカルな画面を作りたいってことなら、DotNetMagicなどのライブラリを使えばいいんじゃないか。
もしくはコンポーネントごとにオーナードロー使って自分で描画するとか。
>>805 できました!
WndProcの中で使うのでstaticはいらないのかと思ってたんですが、必要だったんですね^^;
それと、ついでの質問になってしまうんですが、今ダブルバッファが出来たんですが、時計の表示が動かなくなってしまいました。
case WM_TIMER:で InvalidateRect(hWnd,NULL,FALSE);を書いてるんですが、WM_PAINTに時間表示がないからですよね?
ウィンドウの塗りつぶしをしているんですが、WM_PAINTでBitBlt以降に表示を追加すると、塗りつぶしが消えてしまうんです;
これはどう回避したらいいでしょうか?
塗りつぶしが消えるというのがよくわからん。 SetTextModeで TRANSPARENT 指定するとか?
あと
>>798 の言うように、WM_PAINT内でCreateしたなら、そこでDeleteもやっとけば
ページファイルがどうのってのはなくなると思うよ。
GetしたらRelease、CreateしたらDelete。
WM_CREATEで作ったのならWM_DESTROYあたりで
塗りつぶしじゃなく、WM_PAINT内に時計描画がないので、時計が動かなくなります。 Rectangle()などを使って、背景に色を塗ってから文字表示などしているんですが、BitBlt以降に文字表示をしてしまうと、 文字の周りが白くなってしまうんです。
812 :
808 :2007/11/20(火) 15:31:45
ああごめん、SetBkMode()だな。 SetBkMode(hDC, TRANSPARENT);
>>811 そのSetTextModeですが、識別子が見つからないといわれるのは何故でしょう?
SetTextColorとSetBkModeが混ざっただけだ。 TRANSPARENTで探せば見つかったと思うが・・・
レスずれちゃいましたね。 SetBkならできました。教えて頂いてかなり進歩できました。 ありがとうございました。
816 :
デフォルトの名無しさん :2007/11/20(火) 17:20:43
質問させてください。 環境は VS2003 C++ です。 環境変数を取得してリストボックスに表示する処理を作っています。 listBox1->Items->Add( getenv(textBox1->Text) ); としたい所なのですが、キャストがらみのエラーが出るので CString cs(textBox1->Text); std::string s = cs + " = " + getenv(cs); System::String* s2 = s1.c_str(); listBox1->Items->Add(s); としました。 一応、動くからいいのですが、C#であれば1行ですむような処理です。 なんでC++だと4行もかかってしまうのか…。 もっと良い方法あるでしょうか?
817 :
816 :2007/11/20(火) 17:23:58
すいません、ソースのところ記入ミスしてました。訂正します。 CString cs(textBox1->Text); string s1 = cs + " = " + getenv(cs); System::String* s2 = s1.c_str(); listBox1->Items->Add(s2);
getenvなんてCRT関数を混ぜるから面倒なことになる。.NETクラスライブラリで揃えろ。 using System::Environment; using System::String; String* cs = textBox1->Text; listBox1->Items->Add(cs + " = " + Environment::GetEnvironmentVariable(cs));
>>817 なんでわざわざstd::stringやSystem::Stringに入れ直しているの?
それやめるだけで2行で済むと思うけど。
つーか、C#だとどう1行で済むのよ。普通に書けば2行でしょうが。
820 :
教えてください :2007/11/20(火) 18:15:15
すいません、分かる方がいれば教えてください。 C言語初心者です。 環境windwos98でvisualスタジオ6.0を使ってます。 ファイルの保存先を別のフォルダに保存する時にどのようにすればよろしい でしょうか? 例えば、subというフォルダはあるのですが、その中に保存したいです。
>>820 ファイルに保存するロジックは既にあると言う前堤で、
ファイル名をフルパス名か相対パス名にするだけ。
822 :
816 :2007/11/20(火) 18:24:31
>>818 ありがとうございます。
ただ、
listBox1->Items->Add(cs + " = " + Environment::GetEnvironmentVariable(cs));
ですと、
error C2845: '+' : __gc ポインタ 'System::String __gc *' に対してポインタ演算ができません。
というエラーがでます。
listBox1->Items->Add(Environment::GetEnvironmentVariable(cs));
ですとエラーはでませんでした。
System::String* 型には + 演算子はサポートされていないようですね。
>>819 回答ありがとうございます。
>なんでわざわざstd::stringやSystem::Stringに入れ直しているの?
>それやめるだけで2行で済むと思うけど。
error C2845: '+' : __gc ポインタ 'System::String __gc *' に対してポインタ演算ができません。
などのエラーが出るからです。
>つーか、C#だとどう1行で済むのよ。普通に書けば2行でしょうが。
C#の場合、文字列と言えばSystem.String型だけなので、試してはいませんが、
listBox1.Items.Add(cs + " = " + GetEnvironmentVariable(textBox1->Text));
このように1行にできると思いまして…。
>>822 馬鹿?
>listBox1.Items.Add(cs + " = " + GetEnvironmentVariable(textBox1->Text));
それじゃ、csを作るのに結局もう1行消費するじゃん。
System::Stringが足し算できないなら使わなければいい。
CString cs(textBox1->Text);
listBox1->Items->Add(cs + " = " + getenv(cs));
でダメかね。
824 :
教えてください :2007/11/20(火) 18:34:46
>>821 すんません
sprintf(OPENNAME,"..\sub\%s.txt",GRP);
だとまずいですか?
>>824 私には、OPENNAMEが何物かもそのロジックの後に何が行なわれているのかも判じ得ませんので、
まずいかどうかなど答ようも御座いませんが。
826 :
816 :2007/11/20(火) 18:40:24
>>823 回答ありがとうございます。
やってみたところ、
error C2664: 'System::Windows::Forms::ListBox::ObjectCollection::Add' : 1 番目の引数を 'ATL::CStringT<BaseType,StringTraits>' から 'System::Object __gc *' に変換できません。
with[BaseType=char, StringTraits=ATL::StrTraitATL<char,ATL::ChTraitsCRT<char>>]
というエラーが出てしまいます。
てか、馬鹿って…・゚・(´Д⊂)。・゚・
827 :
教えてください :2007/11/20(火) 18:41:30
>>825 たびたびすいません。
ファイル名を"..\sub\sample.txt"にするとエラーが出るんです
828 :
816 :2007/11/20(火) 18:47:41
>>827 "..\\sub\\sample.txt"
こうでなくて?
829 :
816 :2007/11/20(火) 18:49:19
ちなみに"."はカレントフォルダで、".."は1つ前のフォルダだから、 ".\\sub\\sample.txt" だったり
830 :
教えてください :2007/11/20(火) 18:52:21
>>829 本当にありがとうございました。
解決しました
>>826 「馬鹿」は>822が結局1行になってないことに対してだからね。
でだ。
>823でもダメなら結局System::Stringに入れ直す必要はあるということだけど、
std::stringが要らないことが判ったわけだから3行でいいということだね。
結論:
System::StringはC++では使い難い。
832 :
818 :2007/11/20(火) 19:11:27
>>822 マネージドC++だとSystem::Stringの+演算子での連結ができないことをすっかり忘れていた。
#VC++ 2005からのC++/CLIだとできる。
これでどうだ。
listBox1->Items->Add(String::Concat(cs, S" = ", Environment::GetEnvironmentVariable(cs)));
どうしてもCString使いたいなら、たぶんこんな感じ。
System.Stringがワイド文字使うから、CStringW/_wgetenvのほうがいいと思うけど。
CString newItem = static_cast<CString>(textBox1->Text) + TEXT(" = ") + _tgetenv(cs));
listBox1->Items->Add(new String(newItem, 0, newItem.GetLength());
833 :
816 :2007/11/20(火) 19:13:08
はふぅ…。 皆さんの回答のお陰で自分なりにまとめられたので報告しておきます。 VS2003 C++ で環境変数を取得してリストボックスに表示する方法。 ↓ [C++] String* s(textBox1->Text); listBox1->Items->Add(String::Format("{0} = {1}", s, Environment::GetEnvironmentVariable(s))); [C#] string s = textBox1.Text; istBox1.Items.Add(s + " = " + GetEnvironmentVariable(s)); 回答くれたみなさんありがとうございます。
834 :
816 :2007/11/20(火) 19:16:18
>>832 あぁぁぁすれ違い。
すいません。そしてありがとうございます。
そちらも参考にさせてもらおうと思います。
835 :
デフォルトの名無しさん :2007/11/21(水) 00:24:04
DirectX SDK のサンプル DXUT.cpp で僕には全く理解できない箇所があるので教えてください。 1: #ifndef ARRAYSIZE 2: extern "C++" // templates cannot be declared to have 'C' linkage 3: template <typename T, size_t N> 4: char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N]; 5: 6: #define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A))) 7: #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A) 8: #endif ARRAYSIZEを使っている箇所を見ると配列の要素数を求めているようなんですけど…それなら #define ARRAYSIZE(A) ( sizeof(A)/sizeof(A[0]) ) でもいいですよね? 違うのかな・・・ ああ考えれば考えるほどこんがらがってわからなくなってしまいます。 4~6行目で何をしているのか全くわからなくて・・・ サンプルなのであまり困っているわけではないんですけど気持ち悪いです。 よろしくお願いします。
836 :
デフォルトの名無しさん :2007/11/21(水) 00:38:18
深く考えるな。 人それぞれ、己のプログラミングスタイルを貫き通せばいいではないか。
まあ確かにマクロでいいんだけどね。こういう使い方では、C++のお遊びに過ぎない。 RtlpNumberOfは、要素数NのT型の配列への参照を引数に取り、 要素数Nのchar型の配列へのポインタを返す関数として宣言されている。 つまり、*RtlpNumberOf(A)という式は、Aから、 要素の型をcharへ差し替えた配列型(要素数同じ)という型を生み出している。 sizeof (char) ==1だから、それをsizeofすれば要素数になるというわけ。
838 :
デフォルトの名無しさん :2007/11/21(水) 00:55:20
Visual C++まじかっこいい
うっかりポインタを渡してしまう愚を避けられるんじゃね。
externされたような配列は ( sizeof(A)/sizeof(A[0]) )できない
841 :
デフォルトの名無しさん :2007/11/21(水) 02:17:17
アレコレ重箱の隅をつついて、やれ欠陥だ、やれセキュリティホールだと もう、鬼の首を取ったように嬉々として騒ぐバカどもが世界中にいるからな。 一分の隙も見せないように巧妙なコーディングしなきゃなんない。 その結果が、一見して意味不明な複雑なコードになってしまう。 人に読んでもらって勉強してもらうためのコードなんかじゃ無いんだよ。 キチガイどもを黙らせるためのコードなんだよ。
VC++2005で、タブ文字や空白文字だけの背景色変更したいんですけど、できますか?
意味がわからん、プログラムの話か開発環境でも話か。 編集メニューの詳細-スペースの表示、とは違う?
>>842 テキストボックスやリストボックスでの話なら、オーナードローしかないと思う
845 :
835 :2007/11/21(水) 21:52:58
みなさんレスありがとうございます
完全に理解できないまでも
>>837 さんの解説で何をしているのかを掴むことができました。
サンプルとか見てて意味のわからない箇所があると、もしかしてそこには理解しておかなければならない
秘密が隠されていて、理解しないまま先を追っても後々困るんじゃないか・・・
という不安でなんとなく先に進むのが怖くなってくるんです。性格的にプログラムに向いてないのかな(汗
こんな方法があるなんて驚きでした。
>>845 そういった細かいテクニックだとかノウハウはいつか役に立つ日が来るかもしれない。
壁にぶち当たった時に、その壁の大きさに驚きそこから動けなくなるより、
とりあえず回避して自分が大きくなった時にまた壁を壊しに来ればいい。
別にプログラムに限った話じゃないと思うから悲観することはないと思うよ。
がんばれ。
847 :
デフォルトの名無しさん :2007/11/21(水) 23:02:28
String^ text; String^ text2; text=""; text2=text->Substring(0,1); この書き方をやると、text->Substring(0,1)がインデックスの境界外と出るのですが、これを回避する術はありませんか?
848 :
デフォルトの名無しさん :2007/11/21(水) 23:34:37
ifstreamを使ってファイルからデータを読み込む場合に ifstream ifs; int a; ifs.open("a.txt"); ifs >> a; ifs.close(); という感じで読み込むと、2バイト以上で表示されるの文字(12や123など)を数値へと変換できない場合があるようなのですが どういった理由があるのでしょうか 実際にはもっとたくさんのデータを読み込んでいるのですが、1や2などの1バイトだと問題ないようなのですが・・・ 宜しければご回答宜しくお願い致します
>>847 予めifか何かで引数が範囲外でないかどうか調べればいいだろ。
>>848 理由はifstreamのoperator >> を見ればわかる。
851 :
848 :2007/11/22(木) 12:28:41
>
>>850 ご回答ありがとうございます。
いろいろ調べてみたのですが、なるほど!と思うような答えに行き着くことができませんでした・・・。
お手数ですが、簡単にでもいいので解説していただけませんでしょうか。
よろしければお願い致します。
>>851 そのa.txtのファイルエンコーディングは?
特になにも指定せず、同じようにファイルストリームをつかって保存しているので Shift-JISで保存されているみたいです。
ダイアログボックスでエディットボックスに入力されたものを読み込んだ後、 エディットボックスを空にするにはどうしたらいいのでしょうか? 前に入力したものがずっと残ったままになってしまって・・ それから入力読み込みをした後、ダイアログボックスの再描画をしたいんですがそれも分かりません; 是非お願いします
>>854 EDITから読むときどうやってる?
まあ最終的にはSetWindowTextで空文字列入れてやればいいんだけど、
FormとかMFC使ってるならそれなりのやりかたあるし。
MFCのCEditだったら CEdit edit(GetDlgItem(IDC_EDIT1)); edit.SetFocus(); edit.SetFont(_font, TRUE); int cnt = edit.GetLineCount(); int n = edit.GetLine(0, _buffer, _buffer.size()); とかがある。 テキストの変更は CString cs("abc"); edit.SetWindowText(cs); とか。
>>855-856 遅くなりましたが、教えて頂いた記述で出来ました。ありがとうございました。
ダイアログ繋がりで質問します。 エディットボックスにデフォルトで常にカーソルが合わさっている状態にするにはどうしたらいいのでしょうか?
質問です。例えばchar str[10][100];と宣言して、 このstrに何も入力されなかった場合に操作したい時はifでどう条件を指定したらよいのでしょうか? 動作の背景としては、何も入力されずにスキップされたら、配列に特定の文字を入れるという操作をしたいんですが。 if(str == NULL)や\0としてもうまく動かないですし。
>>859 char str[10][100] = {{0}};
// 適当な入力処理
if (str[0][0] == 0) {
// 未入力
}
>> 858 WM_INITDIALOG をよく調べろ
VS2005の使い方で質問なんだけど、DLLにスタティックリンクさせるlibファイルを参照させるにはどうすればいいの? MSDN分かり辛いよ。
これは MSDN 見るよりか プロジェクトのプロパティを見回した方が早いだろう。 「リンカ」 以下に存在する項目をチェックしていってごらん。
エクセルみたいな表を作りたいんですけど、VC++で簡単に出来るもんなんでしょうか?
>>864 エクセルみたいな表ではありませんが、(OCXに頑張って貰ってですが)エクセルの表を作ることはそう難しくはありません。
すいません。 配列に全角スペースと改行だけを挿入したい場合はどうすればいいんでしょう? str[i][j] = ' \n'; wsprintf(str[i][j]," \n",4); sprintf(str[i][j," \n"); 上記では出来なかったんですが・・・
GetDlgItemTextでエディットボックスに何も入力せずにGetDlgItemTextが実行された時って変数の中には何が入るんでしょうか? 何も入力せずにGetDlgItemTextされた時、ifで分岐したいんです。
>GetDlgItemTextが実行された時って変数の中には何が入るんでしょうか その段階では、あなたの管理下にある変数には特に何も入ってはいないと思います。
870 :
862 :2007/11/23(金) 14:59:03
>>683 分かった見回してみる。
普段はjava使いでC/C++のコンパイルが必要なときは
bccをコマンドラインから使ってた俺にはVSはごちゃごちゃしてて分かり辛い。
とくにMSDNが・・・。
thx!
>>865 そのOCXさんはどこをどうやったら出てくるのでしょうか?
CoCreateInstance
むしろExcelさんを直接呼び出して、Excelみたいな、ではなくExcelそのもので表を使ってしまえ。
876 :
デフォルトの名無しさん :2007/11/23(金) 19:52:20
>>875 他社のグリッド系OCXを指しているようにも見える
878 :
デフォルトの名無しさん :2007/11/23(金) 20:52:39
すみません超初心者ですが質問です。 VisualC++2005EEを使って以下の初歩的なソースをコンパイルしました。 #include<iostream.h> void main() { cout<<"Hello World!";} とcppファイルを作ってビルドしました。 すると、includeファイルを開けません、iostream.hが無いとかなんとか出てきます。 いろいろ調べて、SDKとかインストールしたのですが、直りません。 どうすれば、上のコンソールベースのアプリをコンパイルできるようになるんでしょうか?
879 :
デフォルトの名無しさん :2007/11/23(金) 20:59:03
#include<iostream> void main() { cout<<"Hello World!";}
880 :
デフォルトの名無しさん :2007/11/23(金) 21:01:46
>>879 そうすると、coutが定義されてない識別子とでます。
>>880 std::cout
C/C++スレで聞け。
>>880 ネームスペースを宣言
std::cout<<"Hello World!"
883 :
デフォルトの名無しさん :2007/11/23(金) 21:07:15
#include<iostream> using namespace std; void main() { cout<<"Hello World!";}
884 :
878 :2007/11/23(金) 21:09:02
VC++2005EEでネームスペースを使わずに、上の初歩のソースコードを実行できませんか? 久しぶりにC++を最初から勉強しなおそうとしてるのですが、 いきなりネームスペースが出てきても意味がわからんです。 VC++2005EEって勉強するのには向いてないのでしょうか?
885 :
878 :2007/11/23(金) 21:13:18
>>883 初心者に戻ったのでネームスペースは忘れてしまいました。
VC++2005ではそういう構文でないと、coutは実行できないのでしょうか?
ネームスペースなしでやる方法があればご伝授ください。
それとも、namespaceは決まりごととしてあまり考えずにコードに入れておいて、
そのまま勉強を進めた方がいいのでしょうか?
しばらくは決まり事として進めて問題ない。
887 :
デフォルトの名無しさん :2007/11/23(金) 21:16:12
主要なヘッダファイルに using namespace std; を書き込んでおけば次からは入らなくなる
888 :
878 :2007/11/23(金) 21:18:06
>>886 そうですか。最初のころはあまり考えずに決まりごととして入れておけば
エラーにならんのですね。
ありがとうございました。
>>878 >VC++2005EEでネームスペースを使わずに、上の初歩のソースコードを実行できませんか?
そもそもnamespace使わずに実行できるのは古い規格。
最初から勉強しなおそうとするのであればそれくらいは知っておくといい。
890 :
889 :2007/11/23(金) 21:19:48
言葉足らずを修正w ×そもそもnamespace使わずに実行できるのは古い規格。 ○そもそもiostreamのincludeでstdのnamespaceを使わずに実行できるのは古い規格。
>>887 ヘッダファイルに using を書くのはオススメできない
VisualC++2005ExpressEditionで PlatformSDK+ DirectXSDK使用のプログラムを プログラム雑誌のサイトからソースを使用してビルドをかけたところ、 1>Main.obj : error LNK2019: 未解決の外部シンボル __imp__PostQuitMessage@4 が関数 "long __stdcall WndFunc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndFunc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 1>Main.obj : error LNK2019: 未解決の外部シンボル __imp__DefWindowProcA@16 が関数 "long __stdcall WndFunc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndFunc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 1>Main.obj : error LNK2019: 未解決の外部シンボル __imp__GetAsyncKeyState@4 が関数 "void __cdecl UpdateProc(void)" (?UpdateProc@@YAXXZ) で参照されました。 他同じエラーが十数個でました。 リンクエラーと思われますが、設定はしているつもりです Platform SDKとDirectX SDK includeパスおよびライブラリパスは設定しています 他にどういった原因が考えられるでしょうか。よろしくお願いいたします。
893 :
878 :2007/11/23(金) 21:39:29
>>890 もしかしたら、今持ってるC++のテキストは古すぎるんですかね?
1996年初版発行の本なんですが。
解説がすばらしいのでこの本で勉強してから、新しい本で勉強しなおした方が
いいのでしょうか?
もうひとつお聞きしたいのですが、どんなC++を勉強するのにどんな本がお勧めですか?
最近新しいのが出たな。
>>892 ライブラリパスの指定を Debug か Release かのどちらかしかしてなくて、
指定してない方でリンクしようとしているとか
今からはじめるならVisualStudio2008を待ったほうがいいですか? いつでますか?
今月中
って英語版は出てた
日本語版は今年中の予定らしい
900 :
700 :2007/11/23(金) 22:38:03
>>892 プロジェクトのプロパティの
構成プロパティ→C/C++→コード生成で、
ランタイムライブラリをMTかMTdにしたほうがいいんじゃない?
>>901 確かに、書き換えたつもりだったのですが
書き換わっていませんでした
再度書き換えましたら動作いたしました。
ありがとうございます。
ダイアログが閉じた時に、ウィンドウを再描画するのってどうすればいいんでしょう?
904 :
デフォルトの名無しさん :2007/11/24(土) 12:50:52
>903 勉強しろよ・・・・・!! //------------------------- //ダイアログの呼び出し CDlgMoj IPDlg; IPDlg.DoModal(); //再描画------------------- CMainFrame* pMainFrame = static_cast< CMainFrame* > (AfxGetApp()->m_pMainWnd); //MDIのVIEWの取得 CWnd *pwnd= static_cast<CFrameWnd*>(pMainFrame)->GetActiveFrame()->GetActiveView(); if(pwnd!=NULL){ViEWが有れば pwnd->Invalidate(TRUE); } //フレームの更新 pMainFrame->Invalidate(TRUE); //---------------------------
905 :
デフォルトの名無しさん :2007/11/24(土) 14:23:37
Visual Studio 2005 Express Edition 日本語版が入っている環境に Visual Studio 2008 Express Edition 英語版をインストールすることは可能ですか?
インストールすることは可能
質問です ダブルバッファリングをしていて、DrawText使っていて、InvalidateRectを使ってDrawTextの箇所を再描画したいんですが、出来ません。 WM_CREATEで一度DrawTextを使っていて、再描画でWM_PAINT内でBeginPaintの間でDrawTextを書いてるんですが、出来ないんです。 理由としてはどんな事が考えられるでしょうか? ちなみに、WM_PAINT内のDrawText前後にMassageBoxを挟むとそれはちゃんと出てきます。 WM_CREATEはhmDC、WM_PAINTはhDCでちゃんとあってるはずなんですが・・
>>907 お前の考えているダブルバッファリングとはどういうものなのか、簡単に説明せよ。
あと、hmDCとかいきなり書かれても通じないから。hDCは分からなくもないが。
909 :
デフォルトの名無しさん :2007/11/25(日) 02:06:25
C++を覚えようと思って「Microsoft Visual C++ 2005 Express Edition」を入れたんだが
さて何を学べばいいのやら。
>>3 のリンク先を一通り覗いてからカキコすべき?
C++初心者のスレはないんだっけ?
>909 Microsoft Visual C++ 2005 Express Editionは.netの開発ツール 一応C/C++のコンパイラとしても使えないこともないけど、 使い方知らない人が持っててもどうしようないと思う。
何か本でも1つ買って勉強すれば?
913 :
デフォルトの名無しさん :2007/11/25(日) 09:54:48
その前にPSDKインストールしないとC++でフォームアプリ作れないじゃん。
そもそもリソースエディタがないし・・・
コンソールなネイティブアプリはつくれるから C++の学習ってだけなら十分なんじゃないかな。
PSDKインストールしないとフォームアプリ作れないというのは初耳 俺の持ってるのとは違うんだろうか?
PSDKはフォームじゃなくてWin32用じゃないか?
フォームデザイナついてなかったか?
ごめん、PSDKはwin32用だわ。
子供に紙と鉛筆渡しても落書きして終りだろ 紙と鉛筆だけで勉強できるか?
921 :
907 :2007/11/25(日) 12:56:22
>>908 こんな感じです
case WM_CREATE:
GetClientRect(hWnd, &rt);
hDC = GetDC(hWnd);
hmemDC = CreateCompatibleDC(hDC);
hBitmap = CreateCompatibleBitmap(hDC, x,y);
SetTimer(hWnd, 1, 1000, NULL);
DrawText()
省略
case WM_TIMER:
省略
InvalidateRect(hWnd,NULL,FALSE);
case WM_LBUTTONDOWN:
省略
InvalidateRect(hWnd,NULL,FALSE);
case WM_PAINT:
hDC = BeginPaint(hWnd,&ps);
BitBlt(hDC,0,0,450,396,hmemDC,0,0,SRCCOPY);
SetBkMode(hDC,TRANSPARENT);
TextOut(時計の表示)
DrawText()
EndPaint(hWnd,&ps);
>>921 hmemDCにhBitmapを選択し忘れている、かな?
その下のDrawTextはhmemDCに対してだろうし。
>>922 それは必要なんですか?
DrawText(hDC・・だけ、再描画されないんです。
TextOutの時計表示の方はTextOut(hDC・・の方は普通に1秒ごとに再描画されていました。
書かなくても分かるかも知れないですけど、ちょっと情報が少なかったです。
最初のDrawTextは(hmemDC・・・で
後のDrawTextは(hDC・・・です。
TextOutの次行にあるDrawTextが描画されない、と。
>>907 の説明だけでそう解釈できる奴は上級エスパーだな。
だが、引数を省略して表記されては判断のしようが無いと思うのだが?
フラグ指定が間違っていても判らないし。
現時点では、lpString,nCount,lpRectの中身をデバッグ出力して確認しろ、位しか書けん。
TextOut(hDC,270,370,clock,lstrlen(clock)); for(int j=0;j<5;j++){ for(int k=0;k<5;k++){ fscanf(fp1,"%s",classes[j][k]); rt.top = pos1+(31+60*k); rt.bottom = pos2-(66+60*(4-k)); rt.right = pos3-(45+(75*(4-j))); rt.left = pos4+(31+(75*j)); DrawText(hcDC,str[j][k], -1, &rt, DT_WORDBREAK); } } こんな感じで場所をずらしながら配列の表示 で、さっきまでは表示されなかったのが、今は再描画されるようになりました。 が。 最初の表示が消える事なく元の表示にかぶって新しく表示されます。。 再描画すればするだけ、文字が重なってグチャグチャにorz
変なのがはさまった。 fscanf(fp1,"%s",classes[j][k]); はなかった事にしてください
VC++2005でプログラムを書いているんですが、 RFIDをUSBでPCにつないでタグのIDを読み込ませたい のですがRFIDを使えるようにするにはどんなプログラムが必要なのか ちょっとわからず困っています。誰か分かる方がいましたらよろしくお願いします。
>>925 背景ブラシによる消去が行われないのは、
InvalidateRectのbEraseをFALSEにしているから。
>>927 産業用機材は一般的な取り決めがないので、メーカーに聞くしかない。
ドライバーがどうなってるかはウチらは全くわからんわけだし。
雑談ラウンジ タイトル, : belution.comの話. 投稿日, : 2007/09/27(Thu) 09:22. 投稿者, : PATIO ... ここ数日、 belution.comに全く繋がらなくなってます。 あのコミュニティにはかなりの情報蓄積があるのでアク セスできないとかなり困ったりするんですが、 ... キャッシュ - 関連ページ
UTF-8をShift-JISに変換って簡単にできます?
935 :
デフォルトの名無しさん :2007/11/27(火) 14:40:11
警告が出ずに'POSITION' から 'int' へ切り詰める方法を教えてください
reinterpret_cast
937 :
デフォルトの名無しさん :2007/11/27(火) 16:46:55
警告レベル0にすればいいんじゃね
そうだな。
940 :
デフォルトの名無しさん :2007/11/28(水) 01:22:36
VC 2005 express editionで作ったプログラムがDebugフォルダに入ってるんだけど このアイコンの絵がなんの変哲もないExeファイルのアイコン絵 このアイコンの絵を他の絵に変えれますか?
かえれる
942 :
デフォルトの名無しさん :2007/11/28(水) 14:42:21
関数内ででかい配列を確保しようとすると、実行時エラーが出るんですけど、 エラーが出る/出ないの境界ってどれくらいなんでしょうか? また、mallocでは確保出来るのに、自動変数の配列だと確保出来ないというのが なんとも腑に落ちません。なにか理由がるのでしょうか?
自動変数はスタック上 malloc はヒープ上
なるほど、確保される場所が、そもそも違うのですね。
mallocの上限は環境依存だから、戻り値を調べるしかない
Linuxみたいに、戻り値はそれっぽいのに実際に使おうとすると填まる環境も在る。 従って、戻り値だけでは判断できない。
と思ったけどこのスレ的には関係ないか。
>>942 デフォルトのスタックサイズは1MBになってる。
リンカのオプションで変更できる。
奥が深すぎておっぱお
951 :
デフォルトの名無しさん :2007/11/28(水) 21:41:22
VC++2005で質問です。 engine.cpp +device.cpp +buffer.cpp main.cpp のような構成で コンパイルすると main.cpp、engine.cpp、device.cpp、buffer.cppと順番にコンパイルします。 しかし、 希望は device、buffer、engine、mainの順でコンパイルしたいです。 このコンパイル順序は変えられないのでしょうか? 現在は xxx.vcproj ファイルを毎回編集してコンパイルしています。
>>951 +が何を意味してるのかわからんけど、コンパイルの順番で何か問題起きる?
すみません、Visual C++ 6(または.net 2002 、2003)でしかできないことをやりたいと思ってまして、 ネットオークションで落札しようと考えているのですが(もはやそれしか入手方法がありません)、 この場合、ライセンス認証とかは大丈夫なんでしょうか? アカデミック版か否かで注意すべき点が違う等、注意事項をご教示ください。
ゲームエンジンみたいなの作ってて main.cpp で必要な機能が engine.cppに書いてるので バラバラなコンパイルだと機能が呼べない問題がおきちゃってます。 それとも、こゆー設計がいけないのかな・・・ +は上のファイルとの親子関係みたいなものです。 main.cpp +engine.cpp +device.cpp +buffer.cpp
955 :
デフォルトの名無しさん :2007/11/28(水) 21:54:27
VS2005EEじゃ無理なのか?
>>954 おそらく分割コンパイルを勘違いしている。
>main.cpp で必要な機能が engine.cppに書いてるので
engine.cppに書かれている機能の中身はmain.cppのコンパイルには必要ない。
その機能の使用方法(プロトタイプ宣言等)さえ分かればいい。
>>957 わかりますた 調べて試してみます。
プロトタイプ宣言ですね。
959 :
953 :2007/11/28(水) 22:15:26
>>956 VS2005は持ってるんですが、DirectX9のアプリケーションウィザードが扱えないようなんです。
>>953 で挙げたバージョンだと扱ってる事例があったので。
TCHAR で書いてるんですが、 GetProcAddress() とか IPersistFile::ParseDisplayName() とかは ANSI/UNICODE 版がないんで WideCharToMultiByte() とか MultiByteToWideChar() が必要になるんですが、 ここの周辺は自分で UNICODE かどうかで条件分岐させたコードを書かなきゃならないんでしょうか?
MSDN Subscription買えばnet2003は落とせるでそ?
ATL・MFCあたりにA2WとかT2Aとかその辺りのマクロがあったとおもたけど。
963 :
953 :2007/11/29(木) 07:50:53
>>961 すみません、さすがに十何万円も出せません・・・。
ネットオークションで中古品を入手した場合のライセンス可否の可能性についてご教示ください。
ライセンスなんか気にしたことないな 会社ぐるみ学校ぐるみで不正やってたら誰かが密告するかもしれないけど、 ひとりで使ってる場合は自分が黙ってたらばれるわけがないし
スタートページって必ず表示されちゃうんでしょうか? 起動が遅くていらつくんですけど、消せるのであれば教えてください。
>>965 ツール-オプション-環境-スタートアップ
気にしたこと無かったけど、たぶんこの辺だろうと見に行ったらその設定あった。
968 :
953 :2007/11/29(木) 14:09:05
963は俺だが。 誤爆乙
?
971 :
デフォルトの名無しさん :2007/11/29(木) 14:40:02
ストアドプロシージャからの戻り値を取りたくて CString strSQL = "{CALL abc}"; CRecordset rs(DBポインタ); rs.Open(CDatabase::snapshot, strSQL); をすると カーソルの状態が正しくありません というエラーがきます 解決方法を教えてください
972 :
デフォルトの名無しさん :2007/11/29(木) 15:38:04
↑は rs.Open(CRecordset::snapshot, strSQL); の書き間違いです まだ解決できません データベースをみるとストアドプロシージャは動いているようです
Visual C++ 2005 Express EditionとDirectXで普通にゲームは作れるのでしょうか?
>>973 何が普通かわかりませんが、gccでだってゲームは作れます。
975 :
デフォルトの名無しさん :2007/11/29(木) 20:02:18
そんな事を言うんだったら、バッチファイルでもゲームは作れるよ。
そんなことを言うんだったら、紙と鉛筆でもゲームは作れるよ。
>>973 974-976みたいな冷たいやつは置いておて
プラットフォームSDKも別途入手しないとだめかもしれんとだけ答える
他人の事冷たいとか言っておきながら中途半端に答えるなよ
979 :
デフォルトの名無しさん :2007/11/29(木) 21:21:35
マジレスすると、ググれば親切に分かりやすい図入りで解説したサイトが たくさんたくさん見つかる。
>>978 冷たいから生ぬるいになったんだから
いくらかましだとおもわんかね?
>>979 は一見暖かくみえるが
中身はググレカスとかわらないと思う
とりあえず973は
15歳からはじめるDirextX9というのを立ち読みするといいと思われ
タダ環境のセットアップのしかたが一通り書いてある
しかし、最後の最後で肝心な設定について書いてないことろがあるので買ってはいけない
最新の環境でDirectX9が使えないことはないと思うけど DirectX9のアプリケーションウィザードが扱えないと言ってるからな
ああ、>959のあとに>973が登場したのか
>>974-982 レスありがとうございます
>>977 プラットフォームSDK入れてみます
>>980 あいにくプログラム本を豊富に扱ってる書店が近場にないので購入するしかありません・・・
情報ありがとうございました
>>983 無駄本は買わなくてもネットで探せばいい。
どうせ買うならお勧めされてるものにしときな
Visual C++ Express Edition 2005のヘッダファイルのパスって、何ですか? どうやったら分かるんでしょうか・・ 初心者すぎてすいません
たぶんインクルードのパスのこと
その疑問がどの状況で出てきたのか説明してくれれば わかりやすい答えが出るかもしれん
988 :
デフォルトの名無しさん :2007/11/30(金) 12:12:36
MFCです ODBCでストアドプロシージャの戻り値を取得する方法を教えてください
なんかどっかで見かけた質問だな
VC++ 2005でコンソールアプリケーション(数値計算) のプログラムを作っています. 質問なんですが,コンソールアプリケーションで扱えるメモリの量は 決まっていますか? int main(){ hogehoge(*p,x,t); return 0; } 例えばhogehogeの中で巨大な構造体を宣言してるのですが, デバッグしていると,この構造体の宣言でstack over flowが 出ているようなのです.この関数hogehogeはmain関数の中で roopはさせません.
スタックにそんな巨大なものを構築しないで下さい malloc使って
コンソールだろうとGUIだろうと、違いは無い。 スタックサイズはリンク時に決まる。(デフォルト1MB) 自動変数はスタックに配置される。
>>990 malloc()なんか使わないでstd::vectorでも使ってください。
ところで、roopってなんですか?
>malloc()なんか使わないでstd::vectorでも使ってください。
995 :
988 :2007/11/30(金) 14:50:52
無視すんなよ
短気なやつだな どこが原因で値が取れないのか 自分がやったことを書けよ。
997 :
988 :2007/11/30(金) 15:06:28
終了
999 :
988 :2007/11/30(金) 15:08:46
無視してよ
あ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。