, -、, −- 〜‐ 、、 ,r-'":::::::::::::::::::::::::::::::::`'ー-,、 ,ィ'"::::::::::r-y−、::::::::::::::::::::::::::::丶、 j::::::::::::r'" _,,..,,、゙'´ ̄``'ーへ::::::::::ヽ /:::::::::::{ '' ゙'ー、ヽ、 ヽ. 久_::::::l ,ゝ-、::::::)ι_,,...,,_、ヾ'、 ` r'´ l::::::〉 /rァヽヾノ :'ィテヘ9ンミヽ`゙リ, i ィr'ニ二ヽi::::ノ ,.、,、,..,、,i、.,/{,.ィ'i `''==ヲ' ノィ=く/r_,,...,,_'ソ/ /i ;'`;、、:、. .:、:,L( ', ι , { ,l :'ィテヘ9ンミ:`゙:.:゙:`''':,'.´ -‐i '、;: ...: ,:. :.、.:'ノ ) / / 、 '、``''==ヲ': ;;..; :..‐'゙  ̄  ̄ `トィ ι '´ヽrュ、 ,, ) ,ノ| |! , : ',r'" ,/ _,,...,_,,..,ヽ /,/ _}、: {( ( ィニ ,ィiTTTTTト,丶 /レ′ / , }ヽ、: , , `‐,/⌒'ー'‐'‐'‐',リ} ,! / / / l丶、' : ,{,ゝ、‐r‐'ン-i/ , イ , イ 〈 / | `ヽ ':ヾ<Zェェェシ' ノ' , ィ‐ ' / V! l, 丶、' : : . , , : ノ´ 、. - '" , r 7l ヽ'、 ', `` ニ='"ハ, 丶 ,. - '" _, ィ"´ ,/ | ト、 '、 / ,/ } l ,, -'" ,. - '"/ ,} ',ヽ、 ヽ ,ノ ,ノ 〉,ノ ト、 ┼ヽ -|r‐、. レ | ,, - '" ,, -'" / / ', `ヽ. ',j rァ' / {/! `ヽ d⌒) ./| _ノ __ノ
3 :
デフォルトの名無しさん :2007/06/09(土) 07:28:01
SSE3には対応していますか?
4 :
デフォルトの名無しさん :2007/06/13(水) 01:55:17
MoveWindow()を使うとウィンドウの大きさや位置を変えることができますが、 大きさを変えるときにはウィンドウの左上が始点になっていますよね? つまり、MoveWindow()だと左半分や上半分の表示はできても 右半分や下半分の表示はできないですよね? この、右や下の半分だけを表示させるいい方法はないものでしょうか?
何したいのか分からんけど、オーナードローしたら? 裏画面とか使って画像ロードして、一部切り出して描画。
あー、ダイアログか。 ボタンとかその辺の話? 空のダイアログに今のダイアログ貼り付けて、 子ダイアログの位置をマイナスにしてみたら?
c:\program files\microsoft visual studio 8\vc\include\string.h(136) : warning C4002: マクロ '__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX' に指定された実引数の数が多すぎます。 のようなエラーが100個くらいでるのですが、どうしたら直りますか? お願いします
再インストールしたらなおりました 原因を一応言っておくと、ライブラリーファイルを書き換えたのが原因ですか? この間違えを防ぐために間違って書き換えないように書込み禁止にするほう方があれば教えてください
10 :
デフォルトの名無しさん :2007/06/13(水) 13:16:06
Visual C++2005 を使い始めました。 プロジェクトの種類はCLR テンプレートはWindowsフォームアプリケーション を使っています。 フォームにピクチャーボックス1つとボタンを2つ配置しました。 1つ目のボタン(開始)をクリックすると、 ピクチャーボックスにグラフのようなものを書くようなプログラム をつくりました。 ここまでは上手く動作しています。 次に、2つめのボタン(停止)で、 グラフの描写(For文で繰り返しているため時間がかかります) を途中で一時停止させたいのですが、 グラフをすべて書き終えるまで、ボタンが押せる状態になりません。 どのような方法を使えばいいのか教えてください。 よろしくお願いします。 分かりにくくてすみません。
>>10 どっかでスッドレとか言われてなかったっけ?
>>9 エクスプローラからファイルシステムの読み取り専用属性でも付けておけば?
Visual C++2005 express editionを使ってます。 質問何ですがコントロールの配列化ってどうやるのでしょうか? 例えばボタンが2つあるとして button1 と button2 を button[0]とbutton[1]としたいのですが よろしくお願いします。
今までBCCを使っててVC++2005に乗り換えたのですが コマンドラインでのWindowsアプリケーションの作り方がわかりません。 cl app.c とすると LNK1561 のエラーが出てEXEが生成されません。 #include <windows.h> int WINAPI WinMain() { return 0; } コードはこんな感じです。 後、brc32の様にアイコンをEXEに埋め込みたいのですが、 どの様な手順でやってけば良いのか全く分かりません。 検索ワードがダメなのか全く情報が出てこず…宜しくお願いします
WinMainの引数が間違っている 俺が試したらレベル1でも警告出たんだが リソースは、rc.exeでrcファイルをresへコンパイルした後、 (後からexeファイルに埋め込むBCCと違って)objをリンクするときに渡す
18 :
16 :2007/06/14(木) 19:26:33
>>17 ありがとうございます。
色々自分でやってみたのですが、こんなんになりました
cl app.c user32.lib
rc app.rc
link app.obj app.res user32.lib
MessageBox関数を使う為user32.libを入れたのですが
このコマンドをもっと綺麗な順番や、不必要な所をカットして頂きたいのです…
>>18 コマンドラインにこだわるならMakefile作って
nmake実行するのがいいけど、
とりあえずcl.exeにファイル全部指定してみ
それでできないやつだけ別に実行すればいいかな
>>18 あ、あとコマンドは、、、帰宅してからまた書くわ
cl app.c user32.lib →たぶんexeができる rc app.rc → res ができる link app.obj app.res user32.lib →exeができる cl はリンクもできるから rc app.rc cl app.c app.res user32.lib でもいいな
23 :
10 :2007/06/14(木) 21:36:23
>>11 、12
お返事が遅くなってしまい申し訳ございません。
スレッドを使う方法も検討したのですが、
初心者には敷居が高すぎて、挫折してしまいました。
でも、DoEventを使う方法で、希望通りの動作を得ることができました。
どうも、ありがとうございました。
24 :
デフォルトの名無しさん :2007/06/14(木) 21:44:50
VisualStudio2005を手に入れました。 for文をやってるんですが、 空のコンソールプロジェクトでやってるんですが、 Studio.hがありません。>< どうすればいいですか。あ、自分で創れという破天荒な答えは間違いではないが却下しますよ。
>Studio.hがありません。 無いのはどうやって確かめたの? 無いはず無いんだけどな
26 :
24 :2007/06/14(木) 22:03:34
>>25 ソリューションエクスプローラーでは、
+ソースファイル
+ヘッダーファイル
+リソースファイル
の3つのフォルダがあります。
ヘッダーファイルのフォルダには、Studio.h が無かったからです。
Studio.hだけでなく、何もないからです。
Studio.hを下の内容で作れ #include <stdio.h>
C:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h たぶんここにあるだろうけど ソリューションエクスプローラーのヘッダは 自分が作ったファイルを置くとこだから、stdio.hはここには出ないよ
29 :
24 :2007/06/15(金) 08:35:55
え、あ。そうなんですか。 ユーザーが作ったものだけが ソリューションエクスプローラーのヘッダファイルフォルダに 表示されるのですね。
30 :
16 :2007/06/15(金) 09:09:51
>>19-22 ありがとうございます!
「Visual Studio 2005 コマンド プロンプト」
からやってるのに %LINK% に何も入ってないのは仕様なのでしょうか…
どこのコマンドプロンプトからも利用出来る様にしたいのですが、
どの環境変数を設定すれば良いみたいなのを解説したサイトはないんでしょうか…
>>30 必ず user32.lib をリンクするのであればいいけど
そうじゃないから入ってないんだろ。
自分でそうしたいなら、newvars32.bat を書き換えるか自分でbatを作るか
マイコンピュータのプロパティの詳細設定の環境変数にでも設定したら。
必要なければリンカは無視するだけだから 常にuser32.libやその他インポートライブラリを入れておいても、 性能の低いPCだと処理時間が長くなるのが実感できるであろうこと以外実害はない
無視するのは同名の関数がないときだ 同じ名前の関数が複数個所にあると 面倒なので、ふだんは入れない方がいい すこししかコーディングしないなら不便はないかもな
まあ必要なLIBを片っ端から環境変数に載せるなら その環境変数設定バッチを作って切り替えるのがいいかもな 複数台PC使ってたり、人とやり取りするとき困るけど。 makefileをキチっと書くかIDE使うのがいいのでは
すいません教えてください。 CBitmapクラスのメンバ変数にLoadBitmapしてリソースからビットマップを読み込んでいます。 この読み込んだビットマップのピクセルサイズを変更したいのですが なにかいい方法はありますか? よろしくお願いします。
ピクセルサイズの変更って具体的に何をどうしたいの?
C# では(言語仕様ではなくて Visual Studio の機能なのでしょうけど) <summary> や <remarks> タグによってドキュメントをコードの中に 明示的に埋め込むことができます。 このような規格(?)は Visual C++ では定められていないのでしょうか?
38 :
デフォルトの名無しさん :2007/06/24(日) 13:51:02
スタティックライブラリ(abc.libとします)をビルドしています。 abc.lib がデバッグ版のランタイムとリリース版のランタイムの いずれともリンク可能にするような方法はあるのでしょうか? それとも abc-debug.lib と abc-release.lib のように別々に 用意する必要があるのでしょうか? たとえば abc.lib をリリース版としてビルドしてしまうと、 他のプログラム P から利用するに当たって、P を デバッグ版としてビルドできません。abc.lib 内の いくつかのシンボルは libcmt.lib を要求し、 P 内のいくつかのシンボルは libcmtd.lib を要求します。
39 :
デフォルトの名無しさん :2007/06/24(日) 15:43:54
結局 libcmt.lib を無視させリンクしました。
>>38 /Zl
msdn2.microsoft.com/ja-jp/library/f1tbxcxh(VS.80).aspx
VC++6から移ろうと、VC2005Expressを落として入れたんですが これって、新規作成したプロジェクトのみしかビルド出来ないのでしょうか? VC++6では、組んだプログラム単体をD&Dで、F7ビルドという使い方をしてたため これが出来なくなったとなるとかなり痛いorz
42 :
デフォルトの名無しさん :2007/06/24(日) 17:00:07
>>41 いみがわかんねぇ〜
F7 はソリューション全体のビルドだよね。
関係ないと思うけど、 F5 でビルド&実行されるのは
スタートアッププロジェクトに指定されているプロジェクト。
>>42 すみません、分かりづらいですねorz
VC++6ではCやC++のファイルを放り込めば、すぐにビルドの処理に持っていけます
VC++6ではF7がビルドへのショートカットキーです
VC2005Expressでは、VC++6見たいに、C++のファイルを放り込んでもメニューバーにビルド自体がないため、
ビルドの処理を実行できません。
新規プロジェクトを作成するとメニューバーにビルドが表示され、ビルドが実行できます
ですので、VC2005では一々プロジェクトを作成しないとビルドが出来ないのかと思い、質問させて頂きました。
メモリーリーク検出についての質問なんですが、 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); とプログラム開始場所に書いて、 int *p = new int[100]; delete p;//delete[] p;が正しい。 こんなコードを書いたのですが、メモリーリークしてるはずなのに 検出されませんでした。 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); ↑これって、万能じゃないんでしょうか? よろしくお願いします。 環境は visual c++.net 2003
>>44 それでちゃんと開放はされている。
メモリリークはしていない。
ただ、delete[] を使ってない以上バグと言っていいだろう。
delete と delete[] の違いは、デストラクタを1つしか呼ばないか、全要素に対して呼ぶか、だ。
そして、全ての環境でそうだと保証されているわけではないけど、
デストラクタのある型を new した際には、実際に確保したメモリ領域の先頭に要素数を保存しておいて、
その次のメモリ領域を返してくるような場合がある。
もちろん、これはデストラクタを呼ぶ際のループで使われるわけだ。
この場合は開放すべきメモリの位置が new の返す値からズレてるので、
delete[] でなく delete を使ってしまうと、無効なアドレスが渡されたとしてエラーになる。
今回はデストラクタのない型だったから たまたまエラーが出なかっただけであって、 適当なデストラクタのあるクラスを使ってみたら エラーになるはず(メモリリークじゃなくて、開放に失敗するというエラーだけど)。 その時、デストラクタで何かを出力するようにしてみ。 delete[] だと要素数分出力されて正常終了して、 delete だと1要素分しか出力されないでエラー終了すると思う。 全部違う値を出力するようにしておけば、 delete だと先頭の要素しかデストラクタが呼ばれてないことが確認できるはず。
ついでに、前にある要素数を表示させてみたり、 アドレスをずらして delete してみたり、 色々やってみると面白いかと。
48 :
デフォルトの名無しさん :2007/06/25(月) 11:47:58
.NET言語を来月から授業で使うんですが、.NEt言語というのは、 マネージ拡張C++を使う言語のことですか? それともC++/CLIを利用した言語のことでしょうか? Windows SDKやMFCってのは.NET言語と関係ありますか?
49 :
デフォルトの名無しさん :2007/06/25(月) 12:31:59
VisualC++ってWindowsだけでしか動かせないんですか? Macで簡単にフォーム作成したいんですけど、無理かなあ
XCode と Interface Builder 使えば簡単にフォームは作れる。
51 :
デフォルトの名無しさん :2007/06/25(月) 13:49:52
>>48 CLR で実行されるものならなんでも .NET 言語って呼べるんだろうけど、
Managed C++ はさすがにもう死滅しているんじゃないかな?
授業でやるというなら C++/CLI もしくは C# じゃないかなぁ。
>>45-47 さん、レスありがとうございます。
c++って、奥が深いんですね。
おっしゃるように実際にデストラクタの存在するクラスの配列をnewして、
deleteしたら、ちゃんとエラーが出ました。
疑問が解決し、スッキリしました。
本当にありがとうございました。
VisualC++.NETって無料ですか?
むりよう
どっちやねんw
56 :
デフォルトの名無しさん :2007/07/05(木) 13:37:10
Visual C++でスロットゲームを作成しようと思っているのですが、 リール表示の制御(上から下へ流れる感じ。)部分が思いつきません。 どなたか教えていただけませんでしょうか?
流れてる絵も作って切り替えたら
みためだけでよかったらIEのロゴみたいにアニメーションで 目を合わせるんなら落ち物ゲームみたいに実際に動かす
y = 0〜399で回す ◇ <-- y = 0 ★ <-- y = 100 ☆ <-- y = 200 ■ <-- y = 300 ◇
60 :
56 :2007/07/05(木) 14:40:01
ロジックがまったく思い付きません・・・orz
アニメーション カウンターみたいなもんだろ
62 :
56 :2007/07/05(木) 15:06:40
PictureBoxコントロールにビットマップを読み込んで スクロールさせるにはどうしたら良いでしょうか? サンプルコードがあると助かるのですが・・・。
はあ? お前人の言ってること聞いてないのか?
いくつか出てるのにそれが理解できないなら 自分がどこまで出来るのか書いたほうがいいぞ
65 :
デフォルトの名無しさん :2007/07/12(木) 23:17:57
アク禁解けたので質問させて下さい。 VC++を使ってExcelのVBAから利用できるDLLを作りたいと考えています。 通常の関数についてはVC側でExportして、Excel側でdeclareしてやればOKだったのですが オブジェクト(ってかクラス)についてはどうやればいいのでしょうか? 自分で少し調べたところ、COMコンポーネントという形にしてやればExcelから参照設定して set object で使えそうなのですが 肝心のCOMの作り方がさっぱりです。 どんなやり方でもかまいませんので、御存知でしたら教えてください。 環境は Win XP Pro VC++ 2005 Express Excell 2000 です。 よろしくお願いします。
製品版買ってATLかMFCを使ってください。
67 :
デフォルトの名無しさん :2007/07/21(土) 14:11:44
char *ptr = char[10]; で、10バイト(以上)確保されている事をプログラム内で確認できるAPIってありますか? WinXP pro VC++ Express Edition です。
そもそも10バイト以上確保されることは保障されてないか? 確保されている領域知りたいならstd::vector<char>でも使えば?
>char *ptr = char[10]; >char *ptr = char[10]; >char *ptr = char[10]; ???
new が抜けたんだろう
>>67 それってプログラム的にわかるっけ?
わかったら不便だからわかりやすいように隠蔽されるんじゃね?
マジで確保される領域は4バイトごととかあるんだっけ?
つまり10なら12確保される?とか?w
よくわからないのにテキトウなこと言う俺マジ外道w
サイズを保存しておかなくても 後からサイズを取得できるか、という質問なのか? non-POD 型なら配列の直前に配列の要素数を保存する処理系も多いが、 POD 型の char でもそうする処理系は知らないし、 そもそもそういう手段なら vector<char> 使え。
HeapWalker
これにスレッド安全性と自動解放機構をつけてアロケーターとデリーターを指定できるようにすれば 十分使い物になるとおもうけどそんなことするなら結局ただのスマートポインタベクターになるだけか…
>>67 これでは駄目?
if(ptr != NULL)
{
// 10byte確保されている
}
ptr = new char[10]だったら、 メモリ確保できるか、さもなくば例外を投げるのだから意味がない。 もちろんVC6なんかは別だけど。
78 :
デフォルトの名無しさん :2007/07/22(日) 18:50:05
IEで使用するActiveXを作成しようと思っています。 開発機では問題ないのですが、それ以外のPCだと エラーとなってしまいます。 開発環境 Win XP Pro .NET 2002 VC++(Microsoft Development Environment 2002) ocx, dllのどちらでやっても同じエラーとなってしまいます。 とりあえず、ocxでやった場合の手順です。 1.新規プロジェクトの作成 → Visual C++ プロジェクト → MFC ActiveXコントロール (名前:test) 2.デフォルトでウィザードを終了 3.クラスビュー → testLib → _Dtestにメソッドを追加 (名前:add) 4.testCtrl.cppに処理を記述 例 LONG CtestCtrl::add(LONG a, LONG b) { Afx_MANAGE_STATE(AfxGetStaticModuleState()); return a + b; } 5.ビルドを実行 6.test.ocxをWebサーバに配置 7.HTMLでOBJECTタグを使ってインストール → JavaScriptでメソッドを呼び出し (ClassIdはtest.idlの最下部のuuidを使用) 現象としては開発機でビルドした後にはJavaScriptでメソッドを呼び出せますが 別のPCや開発機でもビルド−消去を実行するとエラーとなってしまいます。 根本的にやり方が違っているのでしょうか? ちなみにOBJECTタグでDownloaded Program Filesには正常にインストールされています。 よろしくお願いします。
さあ
80 :
デフォルトの名無しさん :2007/07/23(月) 00:12:51
質問させてください。 VC++2005でコールバック関数を実現しようと思っています。 それで関数ポインタを実装しようとまずは思ったのですが、 コンパイルエラーになります。 void main(){ int (*myf)(int, int); myf = func; // この行でエラー。関数呼び出しには引数がありません、という // エラーになる } int func(int x, int y) { return x * y; } どのように修正すればよいでしょうか?
static int func(int x, int y) { return x * y; } int main(){ int (*myf)(int, int); myf = func; // この行でエラー。関数呼び出しには引数がありません、という // エラーになる return 0; }
プロトタイプが必要なのは一緒だぜ
>>82 >81はプロトタイプ宣言を(定義そのものによって)省略できるケース。
84 :
81 :2007/07/23(月) 09:17:03
>>83 いや、、、
>>79 へのレスなんだ、すまん
呼び出し時もポインタへの入力の時も
必要なのは一緒ってこと
85 :
84 :2007/07/23(月) 09:18:14
うわ、、レス番ずれた。察してくれ
LSI-Cが使われなくなった理由を教えてください。LSI-Cを使う参考書を 買おうか迷っています。
まず16bitということ。 試用版の制限が大きすぎること。 他にもっといいものが無料で手に入るようになったこと。
補足しておこうか。 ・intが16bit そのお蔭で例えば一日の秒数をカウントするだけでオーバフローしてしまう。 だからと言って、longを使うと割り算も16ビット演算で実装されているからのんびりしているし。 ・DOSアプリ ロングファイル名を適切に扱うI/Fを持っていないので、長いパスを与えると 誤動作しかねない(確かした)。 ・スモールコード、スモールデータモデル限定 64KiBを超えるデータを扱う標準関数がない。メモリ確保もできなきゃコピーもできない。 例えば、2chのスレッド一本処理できない。 ・関数サイズ制限 関数を(恐らく)32KiBの作業空間でコンパイルしようとする。このため、ちょっと関数が大きくなると音を上げる。 #まぁ、初級者には関数分割を勉強するいい機会にはなるが。 ・バグがある 配布されている試食版には、少なくともコンパイラのバグとライブラリのバグがあることが判っている。 #勿論それは、製品版では直っている筈だが……
よく分かりました。昨日本屋で参考書を買おうとページをめくってコンパイラは なにか調べたら、LSI-Cだったので買わずに帰ってきました。 もっともその本が出版されたのは2004年でしたが。
LSI-Cの話題はスレ違いだと気づいてくれ。
>90 でも、C++の前は大分お世話になった筈でしょう。 供養の意味でも思い出してやってはくれませんか。
DOS 時代は Turbo C++ しか使ったことない。
>88 それにしては大分お詳しいじゃありませんか、お客さん。
94 :
88 :2007/07/24(火) 13:25:30
そりゃぁあんた、kmoriさんやpnoriさんにバグ報告のメールを何度も出したからねぇ。 ってことで、私ゃ>92じゃないよ。 尤も、TurboCも使ってたけど。 #そっちはそっちで、やっぱりバグ報告してたけど。
TurboCはコンパイル激速だったっけ でも、CodeView使ったらやめられんかった その流れでVC++に至る
>>78 必要なDLLが足らないんじゃないの?regsvr32で登録できた?
Turbo Cは何度か使わせてもらったけど、 アレは初心者にとっつきやすくて勉強にもなった。
98 :
デフォルトの名無しさん :2007/08/04(土) 18:04:45
質問です。 VC++って、一つのファイルをコンパイルするごとに、 いちいちプロジェクトつくらないといけないんですか? 例えば、Cygwinだと、cファイルが一つのフォルダにいくつあっても、 個別にコンパイルできるけど、 VC++の場合は、一つだけcファイルをコンパイルするのに、 一つのフォルダをプロジェクトで用意する必要があるんですか? C言語の学習中なので、そんなに長いプログラムは書かないかつ沢山ファイルをつくるんですが……。
>>98 cygwinでもmakeコマンドだけで済まそうと思ったら個別にmakefileが要る。
VSでもプロジェクトを省略したいのなら、同じようにコマンドラインから直接コンパイラを起動すればいい。
プロジェクトをたくさん作って メニュー→ビルド→バッチビルド からも一気にできる 前の御馬鹿な担当者がモジュールを全部別プロジェクトにしてやがったときに重宝した
それは便利だけど、98は一気にビルドしたいわけではないように見えるよ。
必要なソースだけをプロジェクトに加えてビルド、 要らないソースはプロジェクトから外す、 って感じでやればいいんじゃね? ソース単位でコンパイルしない設定もあるけど面倒だし。
103 :
98 :2007/08/04(土) 21:11:21
質問に答えてくれた方々どうもありがとうございました。
>>102 の方法でやってみたいと思います。
もうひとつだけ質問を……。
エディタのように、TABや空白したことを表示させるのは、どうすればいいんでしょうか?
設定をいじろうとしましたが、みつかりませんでしたorz
メニュー > ヘルプ
ヒント : スペースの表示 この機能、MSDNだとメモでしか説明されていないように見える。 まあ、メニュー色々弄ってれば、すぐに見つかるのだろうけど。
メニュー > ヘルプ は MSDNじゃないんだけどね
>>105 ありがとうございました。
編集メニューにあったとは……。
行番号はVC6だと無理で.NET以降だと表示できた希ガス と俺メモw
VS.NET 2002をインストールして以降、 Windowsのシャットダウンに数分かかるようになりました。 いまは2002はアンインストールして2003をインストールしていますが、 症状は変らずです。 以前に、 デバッグのための機能が云々で設定がどうこう というような話を聞いたような気がするのですが、思い出せません。 VS.NETの設定の問題なのでしょうか。
110 :
デフォルトの名無しさん :2007/08/05(日) 14:48:17
VS.NETの設定の問題
112 :
109 :2007/08/05(日) 19:45:25
>>110 設定のどこが問題なのですか。
>>111 ありがとうございます。
イベントログにUserenvのID:1000 (レジストリファイルをアンロードできません。)が出ていて、
自力で調べるヒントがあったのに、放置してました。
さっそく、UPHCleanを入れてみたところ、
> The following handles opened in user profile hive ATHLONMP\Administrator (S-1-5-21-484763869-1757981266-682003330-500) are preventing the profile from unloading:
>
> mdm.exe (664)
> HKCU (0x19c)
> cannot get call stack data
と出ました。
VS.NETのデバッガを使わないでシャットダウンすると遅くならなかったし、
Machine Debug Managerサービスを停止してからシャットダウンすると遅くなりませんでした。
ログオフ時にサービスを止めるスクリプトを走らせるように仕込んで対処することにしました。
113 :
デフォルトの名無しさん :2007/08/07(火) 23:46:38
Win32コンソールでデバックするときに、ウィンドウがでないときがあるのは何で……? 特にエラーも警告もでてないのに……。
他のウィンドウの下に隠れているというオチだったら許さんぞ。
115 :
デフォルトの名無しさん :2007/08/07(火) 23:54:33
>>114 いえ、違います。
全くでない時と、一瞬だけパッとでて、消えるときもある。
ブレークポイント設定しても、なぜかでないorz
でるときは、普通に出る。
ブレイクしている時点でDOS窓でていない状態なんてありえたっけ?
mainのはじめの方で何かまずい処理してんじゃないの?
118 :
デフォルトの名無しさん :2007/08/08(水) 00:09:50
ステップ実行してみたけど、ちゃんと問題なく動いてるようだ……。 試しに、ちゃんとウィンドウがでて、問題のなかったプログラムをデバッグしてみたら、 でなくなってしまってた。 設定なにもいじってないのに何故だorz Escキー押してるとかそういうオチじゃないんだぜ……。
119 :
デフォルトの名無しさん :2007/08/08(水) 00:14:06
誰か知ってたら教えてください。 VC6++ で新規プロジェクトを複数作成したいのですが、 msdev.comのコマンドやVSのマクロなどで以下を自動化は可能でしょうか? プロジェクトの新規作成 → ビルド設定 お願いします。。。
120 :
デフォルトの名無しさん :2007/08/08(水) 00:19:29
あ、でた。 そしてまたでなくなった。 なんか出たり、出なくなったりする……PC自体は安定してるんだが。 このファジーな不具合……MEを使ってたときを思いだす。
122 :
デフォルトの名無しさん :2007/08/08(水) 00:37:26
123 :
デフォルトの名無しさん :2007/08/08(水) 00:40:54
124 :
デフォルトの名無しさん :2007/08/08(水) 01:01:11
別に、コマンドプロント開いたら、何故か治った。 そして、コマンドプロント消しても大丈夫だった。 d。
125 :
デフォルトの名無しさん :2007/08/09(木) 00:49:32
119です。 自己解決しました。スレ汚し失礼しましたー(^^;;
126 :
デフォルトの名無しさん :2007/08/10(金) 01:36:28
VC++2005(MFCアプリ)でアクティブ画面(自画面) のプリントスクリーンボタンを作りたいのですが 何かいい方法ってありますか?やさしく教えてください。
VC6++でMFCアプリを作ろうとしていて、 ボタンをクリックした際にボタンのキャプションを書き換えたいのですが、 その際に&を含む文字列を表示させたい場合は渡す文字列を &&と表記するしかないのでしょうか? SS_NOPREFIXのような指定はできないのでしょうか?
>>126 何が問題なのか明確に書いてほしい。
特定のウィンドウの見た目のビットマップを取得したいということであれば、
そのウィンドウのデバイス・コンテキストからBitBltなどでコピーすればいいと思う。
_beginthreadで作ったスレッドがreturntかなにかで終わる前にPostQuitMessageでプログラム自体を終了させると スレッドも動かなくなるけど、こういうスレッドの非正規終了(?)が直接の原因でメモリリーク起こしたりとかしない?
>>130 プロセス終了時にはすべてのハンドルは自動的に解放されるので、
メモリリークを起こしたとしてもたいした問題になることはないと思う。
もちろん、スレッド内でファイルを書き込みオープンのままフラッシュしてなかったり、
通信してたりすれば話は別なので、基本は後処理をしっかりやるべき。
OSが何とかしてくれるとは言っても、 そこにバグがある可能性もあるので、 リソースの後片づけは頑張ってすべし。 プロセスのメインスレッドが終了する前に、 他のスレッドに終了しろと指示を出して、 他のスレッドが終わるのを待つとかしてさ。 COMのアウトプロセスサーバを使っていて、 循環参照になっている場合には、 どうもヤバそうな気がするよ。
まぁ、メインスレッドが死んだ後もサブスレッドが生きていればどってことはないけどな。 #それはそれで別の問題が発生するわけだが。
質問に答えてくれてありがとう。
コンパイラのオプションの/EHsと/EHaの違いについて教えてください。 非同期よりも同期のほうが処理が軽いがメモリリークを伴う という解釈でいいのでしょうか。
単に構造化例外を処理するかどうかってことじゃないの 余分に例外を処理をしている方がその分遅くなる。 逆に例外を処理しないほうは例外が処理されないわけなので、たぶん落ちる。 リークってのは単なる副作用の1つでは。 Microsoftが何故あえて同期/非同期って言い方をしてるかよく分からないけど、 少なくともマルチスレッドとかそういうのとは全然関係ないので、 この言葉に変にとらわれないほうがいいと思う。
同期例外は、throw句もしくは関数呼び出し先で発生すると決まっているが、 非同期例外はそれ以外でも発生しうる例外、ってことらしい。 アクセス違反とかは、もろにこの部類だな。
なるほどそういう意味か。 だとすると構造化例外は確かにすべて非同期ってことで納得。
139 :
135 :2007/08/16(木) 23:02:19
というか、それ、解説に/GXって書いてある時点で古い・・・
141 :
135 :2007/08/17(金) 00:01:50
>>140 すみませんVC7.1を使っていることを書くべきでした。
/EHsの場合
最適化を切っている場合には例外のためのコードが生成されるのでcatchできる。
最適化している場合には例外のためのコードが生成されないのでcatchできない。
む〜。
>>142 素晴らしい。
> According to the C++ standard, both programs produce undefined behaviour.
C++標準化委員会の連中のセンスって、よくわからんなぁ。
ハードウェアの仕様には口出ししないという綺麗事なのか、
議論がまとまらないので先送りしているのか、
わからないけどさ。
マイクロソフトのセンスも、よくわからない。 IDEの設定の選択肢には/EHscの有無しかない。 /EHaを手で設定してやればいいというが、 選択肢に/EHaも用意してほしかった。
清く美しく正しくコーディングすれば、ポインタ変数に不正なポインタがセットされた状態になることは、ありえない。 よって、メモリアクセス違反が発生するのは明らかにバグであり、バグのあるプログラムを騙し騙し動かすべきではない。 ということなんだろうなぁ・・・
パフォーマンスよりも安全性をとって/EHaをデフォルトにすべきなのに、 どういうわけだか、/EHscをデフォルトにするマイクロソフトってステキ。
全く想定していない例外を下手にハンドリングするくらいなら、 さっさと自爆しろとか思うのは俺だけ?
不正なポインタにアクセスする状況ってのは、すでに一貫性がズタズタだものな。
ところでコンパイラオプションなんて触るとろくなことにならなくね? Libとかプロジェクト同士でコンパイラオプションが一致してないとエラーでるっしょ?w これ知らんでLibだけひょいって渡されるとすげー困るよね 外観でデバッグ情報の有無とかごちゃごちゃしたの一致させるのすげームズイしね
スコープの :: ってなんて読むの?
コロンコロン
スコープ決定演算子
今はVC6.0しかできません。 守備範囲を広げるため使える言語を増やしたいです。 Java C# C++/CLI VB 次にやるとしたらどれがいいですかね?
とりあえず、 >C++/CLI でなければどれでもいいよ。
スコープ解決演算子じゃなかった?
scope resolution operator
157 :
デフォルトの名無しさん :2007/08/18(土) 17:09:38
CreateSolidBrushで色を指定してhBrushを作れるみたいだけど、色を変更する時はどうするの? アニメーション作ってるんだけど、各フレームで色を変えるときに一々DeleteしてからまたCreateするの? あとageておく。
>>157 単色ブラシなら、GetStockObject(DC_BRUSH) と
SetDCBrushColor の組み合わせでできる
MFCとかATLってこれからマスターする価値ありますか? ちなみに今はMFCは多少はできます。 自分的には肌が合わない気がします。 WIN32APIそのままの方がずっとわかりやすいです。 ATLはまったくやったことないです。
ウィンドウアプリケーションとか作るなら生のC++よりはMFC/ATLが断然便利。 MFCとATLの比較なら、ATLがまし。 今からやる価値があるかどうかは人による。 ネイティブC++の世界でもう少し頑張るつもりならATL覚えてみても 損はしないと思う。
161 :
デフォルトの名無しさん :2007/08/19(日) 09:29:36
VC++6.0で、一度作ったプロジェクトを次回起動後、どうやったら開けるんでしょうか?
拡張子 dsw を開く
何気にVCはコツがいるなw WordやExelみたいにブツが1つじゃない上に 初回閉じたらどこに保存したかわからなくなるからなw ちゃんとプロジェクト作成時にフォルダのパスを確認しておいて フォルダまるごとセットで扱う必要があるぜ
164 :
デフォルトの名無しさん :2007/08/19(日) 11:24:21
>>162 >>163 ありがとうございます。一度覚えれば簡単ですが、なんとも初心者にはとっつきにくいですね・・・
ATLってCOMのためのもので、GUIまわりは未完成もいいところで話にならない かつてそう聞いたのですが、使えるところまで進化したのですか。 WTLはどーなったんですか? wxWidgetsはどーですか。
168 :
デフォルトの名無しさん :2007/08/19(日) 21:01:02
とりあえず、ATL/WTLは超初心者が手を出すライブラリじゃないと思うが・・・・
MFCしか使えない人間が生まれるよりはマシ。
ATL/WTLは超初心者が手を出すライブラリだが? 理解できない脳味噌の奴を除いて
C++とwin32でプログラミング初めて一ヶ月の方にも お勧めのWTL、WTLでございます。
>>170 まぁ使える奴が増えることはWTL使ってる俺としてはうれしいけどね
MFCのソースを全部読むよりは簡単だし
テンプレートの使い方も覚えるし
でも、ATLを使って製品になるようなActiveXコントロールを作ってるかと
問われるともう3年くらい作ってないのも事実
俺自身は、今でも簡単なツール作るときにお世話になってるが
173 :
デフォルトの名無しさん :2007/08/20(月) 08:50:56
ExpressEditionでウィンドウつくると、WinMainが_tWinMainとかになってるんだけど、何が違うの?
>>173 WinMainはマルチバイト(ANSI)専用、wWinMainはUNICODE専用。
_tWinMainにしておけばコンパイル時のオプションに従って、いずれかを適切に選択してくれる。
>>174 なるほど。でも新しい仕様っぽいから、古いVC++だと認識しなさそうですね。
VS6にはなかった気がする
VC6付属のPlatformSDKになかったら、PlatformSDKだけ新しくすればいい。 それでもなければ、自分で#defineすればいい。 でもさ、古いVCなんて相手にするだけ無駄だと思うけどなぁ。 既存のVC6で作られたソフトの保守なら仕方ないけれども、 新規に作るものをVC6で作るのは、どうかと。 VC6付属のSTLはバグが多数見つかっているし、 コンパイラの標準への準拠度は低いし。
.NETにも頼らず、OSもしばらくはXPでというなら VC++6.0(IDE) + VC++Toolkit2003 のコンビネーションは 結構イケてる組み合わせと思う。
VC6のIDEから、VC7.1のコンパイラ&リンカを使ってみたら、デバッグ情報に互換性なくてダメだったよ? どーせVC7.1のコンパイラは遅いので、VC6のIDEを使う意味は薄いのだが。
VC6・MFC無しで、他人が書いた既存のプログラムを改修しようとしています。 そのプログラムはいくつかのモジュールからなり、それぞれEXEだったり DLLだったりサービスだったりISAPIだったりします。 で、各モジュールまたがって処理を追いたいと思い、標準出力に出すコードとか ファイルに出すコードとかを挟んで、そこを通ったことを確認しようとしても、 出力されていませんでした。 出力されてないのが、実行ファイルのパスか何か間違ってて通っていないだけなのか、 サービスとかISAPIとかいう特殊な実装が原因なのかがわからない状態です。 そこでお聞きしたいのですが、どんな実装だろうとこれを呼べばダイアログか何か出て、 通ったか通ってないかが間違いなくわかるものって無いでしょうか? assert.hのassertかなぁと思って書いてもみたのですが、走らせてみてもうんともすんとも言わず よくわからない状態です。 ラインデバッグもISAPIとかの場合どうすればいいのかよくわからず、とりあえず上記のような ことをして、そこを通っているかどうかが知りたいです。 よろしくお願いします。
>>180 口ぶりからして、お前さん、プロだね?
手に負えない仕事を請けた時点でアウト。
正直に自分のスキルでは無理だと言って断れ。
さもなくば辞表出して逃げ出すか。
その程度のスキルで、そういったものに手を出すと、大変なことになる。
>>180 181に賛成
派遣だったら即逃げ、正社だったら上司に相談
個人だったらPG辞めるべき
一つ教えておいてやるが、ソースを引き継いでメンテできる奴は
長い経験と、広い知識と、才能が必要
前任者に聞けばいいじゃんか。 どーやってデバッグしてたの? と。 聞けない状況にあるなら、 他にも多数の問題が発生すると思われ。
本質的なことは
>>181 や
>>182 のとおりとして・・・
とりあえず、ごちゃごちゃになってるプロジェクトの整理からはじめるかな?
EXEやDLLがごっちゃになってるのも変な感じだし、そいつらも一緒に
デバッグトレースしなきゃいけないなら同じワークスペースに入れちゃえばいいし・・・
そういったことが出来ない、難しい環境であれば外部モジュールの呼び出し箇所を
限定、まとめるような作業をしたりすればいいのかな?
>>184 十分に理解していない人間が、
コードをいじくり回すことが、
いかに危険なのか、
わかっていないな。
あんた、プロはプロでも、詐欺のプロか?
>>180 標準出力に出そうとするからわかんねーんだ。
Win32APIの
MessageBox()
とか
CreateFile()でファイル出力してみる。
俺だったら、勤め人だろうが個人経営だろうが
仕事が来た時点で「それいくら(で請け負ったの)?」
と、聞き返すけどな。
改修だったら、最低でも解析料込みで月150万、実費もらうけど。
一から作り直すなら月100万(設計+PGをMIX)。何ヶ月かかるかわからんけど。
>>186 無責任なことするなよ。
中途半端に教えるのは罪だよ。
>>184 理解していない人間から見て、ごちゃごちゃになってるだけで、
それなりに理由のある構成だという可能性も残っているぞ。
なぜ、その案件を断らない。
まったくやったことのないことをやるのは、やたらと時間がかかるから儲からないぞ。
>>180 サービスとかISAPI(これもサービスだけど)の場合、コンソールやデスクトップは有効でない
場合が普通なので、コンソール出力やメッセージボックスは不可。
有効なのはファイルやイベントログで、安直なのはファイル。
しかし、ファイルに出すコードを挟んで試してダメというのはいただけない。
本当に想定のルートが通っているかを確認するのが先決。
まず、そもそもプロセスが正しく起動していること、次にプロセス毎の処理の
先頭でファイル出力を行ってファイルが書き出せること、の2点を確かめることを
お勧めする。あとはそれからの話。
前提としてどのファイルがどのプロセスに関連付けられて、どのように起動されるかってのは
理解できてるんだよね。
>>189 やめろって。
最後まで責任持って教えるのか? 尻ぬぐいもしてやるのか?
所詮くだすれなので、責任なんて必要ないんじゃね?気楽にいこーぜ
中途半端に教えて、引き返せる限界のポイントを越えさせて、越えた途端に突き放すのも一興か。
うーん、危険なのはいつまでも理解しようとしないまま行き当たりばったりで 開発を続けることであって、現状で十分な知識がない作業が上から降ってくるのは 珍しくもないと思うけどなあ。 もっとも調査の時間が十分にとれないのも珍しくなくて、だから厳しいわけだけど。 てか、仕事を受けるとき、自分に断る権限があるなんて、みんなすごい恵まれた 環境にいるんじゃないの?
>>193 > いつまでも理解しようとしないまま
これが間違い。
理解しようとする
のではなく、
理解する
ことが必要。
> 現状で十分な知識がない作業が上から降ってくるのは珍しくもないと思うけどなあ。
2chに助けを求めている時点で、不十分っていうレベルではないと思う。
> てか、仕事を受けるとき、自分に断る権限があるなんて、みんなすごい恵まれた
> 環境にいるんじゃないの?
上の責任だって言うのなら、まぁ、いいんじゃない?
受けるかどうか判断する人が、判断の責任を負うのだから。
でも、正直、無理だと思うね dllとかexeとか変なスレッドの使い方(並列動作?)狙って dll化exe化してる場合はもうどうしようもないと思う 組んだ奴は悦に言ってるかもしれないけど これ以上保守不能なもんはねぇと思う これ、組んだ奴がみつからないときは素直に逃げたほうがいいと思う 前にやったときはデバッガで追うなんてこともできなかったし 何がどう絡んでるのかさえ不明だった ブレークポイントも全く止まらないし誰からどう呼び出されてるかもわからないし 複数VCを起動するわけにもいかず死んだw データ(インスタンス)はどういう風に動くのか? そもそもどういう構造で動いてるのか? とか前の担当者から聞いたって理解するの難しそう・・・ (大抵、前の担当者なんていないんだよなw・・・orz) 結局、どういう動作してるのかもわからず派遣先契約切れってのが 俺がやったときの話w(ちなみに富○通・・・w)
こういう問題って難しいんだよね 経験したことある奴なら、絶対に逃げるパターンだよ 一番怖いのが、大した管理が行われていない会社で ソフトやり始めて2~3年くらいの人間が作ったソース プログラムがわかって来て、自分主導で組み始めて、新しいことにチャレンジして 出来てみたら、本人しか理解できないようなものが出来上がる そして、製作者は仕様書、設計書を残さずドロン 客に納めてた日にはもう目も当てられない 何も知らない若者を勉強のためとか言って丸め込んで解析させようとする・・・ あああ、怖ぇえええ
なんでみんなそこまで意見がそろってるんだよw 前任の担当者がいないなんて普通だし(いれば作業なんて回ってこない)、 サービスIなんかだと普通のデバッグとは異なるので、最初やり方が 分からないのもしょうがない。 だいたい、構造が致命的に分かりにくいとかバグがあるってのと、 デバッガで追えないとかブレークポイントで止められないってのは別問題だろ。 くだすれなんだから、質問者のレベルが低いのは当たり前だし、 デバッガで追いかける方法が分からないからって質問するくらいいいじゃないか。
>>195 > ブレークポイントも全く止まらないし誰からどう呼び出されてるかもわからないし
そりゃぁ195が知らない世界に無理に足を突っ込んだからだろう。
EXEとDLLとISAPIとサービスに分割するのは、ありがちな形態。
>>196 2・3年目くらいに詳細なドキュメントなしでデバッグを担当したものを、
協力会社の人に引き継いだが、彼らは目を白黒させていたなぁ。
あるインプロセスのCOMコンポーネントについて、
main関数どこですか?
誰から呼ばれるんですか?
なんて聞かれて、びくーりしたよ。
クラスとか無視して強引にC風にフローチャート書いてきて、確認を求められた時には、
そんな無駄なことをする前に了解を取ってくれ、そのフローチャートに金は払わないぞ!と
ブチ切れそうになりましたよ。
>>197 多分、みんな同様の経験をしてきてるからじゃない?そして地獄を味わった
でも、乗り越えられれば確かに糧にはなるけどな
適切に前提知識を揃えれば普通に済むのに、 自分で地獄にしてしまい、大変だとか愚痴る 人間をみるとムカつく。 サービスやISAPIフィルタを作ったことがないのに、 いきなり人様が作ったものを改修しようという のは大きな間違い。 そういう場合、細かいことを1つずつ教えてはダメ。 サービスやISAPIフィルタの作り方を解説した本 を読ませて、実際に何か作ってみさせるべき。
サービスアプリケーションを作成するとき、一定規模以上のものを複数人で開発するなら、
どうしても作業を分担する。
そのとき、サービス制御部とビジネスロジック、DBアクセス、コマンドインタフェースなどの各コンポは
それぞれ別の人が担当し、他の部分は理解しないことが普通(いいか悪いかは別にして時間もスキルもない)。
改修/保守ではそれが1〜2人の担当者に振ってくるので、全体を理解するのは
あるべき姿かも知れないけど、現実的な工数ではさらに難しい。
もちろん、サービスの概要が分かってないと、デバッグもできないけど、
逆に機能追加のためにビジネスロジックとDBアクセスの一部をエンハンスする場合に
サービス制御部の詳細動作が分かってなければいけないってものでもない。
だから、サービスの勉強を1からやるっていってもさせてもらえない。
まあ、改修部分以外の箇所が安定して動作してるってのが前提になるけど。
これがよくある開発の現状。
>>200 は比較的少数精鋭の部署にいるんじゃないの?
>>180 は横断的にトレースする必要に迫られているんでしょ?
>>200 そんな時間がある会社なら前の担当者がいないなんて話にはならないだろw
>>198 俺もCOMとか全く駄目だわ
何がどう動いてんのか理解不能w
これはCOM入門かなんかやらんと駄目だねw
なんも知らないで「VCではできないような・・・?」みたいなこと報告しちゃった嫌な思い出w
みんなもあるだろ?w
理解不能なWindowsプログラムってよw
俺ができないっていっちゃったのはなんかドラッグ&ドロップでワードとかエクセルとか起動する奴w
MFCのサンプルにそれっぽいの付いてるけどみても何やってるのかさっぱりわからんかった
書籍も資料も落ちてないし
テキストウィンドウと変なIEが混ざってるようなのも駄目だった・・・
Win32APIでプログラムが組めますって言って仕事もらったのになにもできなくて申しわけないwって感じw
前提知識が抜けたまま闇雲にトレースして、 そこから前提知識を推理するよりかは、 よっぽど短時間で済むと思うが。
>>204 知らないのに、できます! と言うのに比べれば、
知らなくて、できません! と言うのは悪くない。
207 :
デフォルトの名無しさん :2007/08/21(火) 22:41:02
>>207 おお、すげーな
COMとOLEについて書いてあるページなんてはじめて見たw(実は結構ある?)
1年前ぐらいに調べたときはホント1ページもなかった(俺が探した限りでは)
ってか、検索するワードすらよくわからなかったし
>>205 スキルのある人はみんなそういう。
でも、スキルのない人にはまた別の意見がある。
>>210 スキルを身につける気がないなら、プログラマやめたら?
>>207 しかし、あいかわらず意味不明だなw
サンプルソース読んでもなにをやってるのかさっぱりわからんw
こりゃCOM入門やらなきゃ手がでないね
っつってもその情報がどこにあるか全く知らんけどw
1年前に探したときは、自分なりに必死に調べてみたけど
手がかりすらつかめなかったなw
>>211 やりたいのはやまやまだけどCOMとOLEって情報がないじゃん
なんか順にステップアップする道ってないの?
>>213 inside ole
atl com
とりあえずこの2冊読んだだけだが、COM使うレベルだったら十分だったよ
果たして、まだ売ってるのかどうかもわからんが
しかも、今から勉強しても役に立つかどうかはわからない
>>213 訂正、その2冊を読んで、あとはネットなどで調べればって事ね
216 :
207 :2007/08/21(火) 23:09:27
>>209 "operator->" で検索したところ、おぼろげに分かりました。
メンバ変数として持っているオブジェクトのポインタを返して、
あたかも自分自身のメンバ関数のように見せる手法といったところでしょうか。
この路線で少し調べてみます。
どうもありがとう。
>>212 必死に調べないと手がかりすら掴めないなら、プログラマに向いてない。
ましてや、必死に調べてもダメっていうのなら・・・。
>>213 いったいどこを探したのか、と。
>>218 マジか
今のところ
>>207 のリンクと
ATLCOMプログラミングの本しか情報ないんだけど(俺が探すとw)
とりあえず英語読め無いから海外は勘弁してくれw
しかも、
>>207 のリンクのサンプルソースって俺の環境で実行すると
警告ダイアログが出て強制終了するんだけど?w
ああ、もう、いつもどおり手係りねぇよw
221 :
207 :2007/08/21(火) 23:26:35
>>216 なんか心配だなぁ。
_ApplicationPtrが何者なのかわかっていれば、そういう質問は出て来ないと思う。
よく見てないけど、たぶん_com_ptr_tでしょう。COMのイロハを先に勉強しよう。
>>219 > とりあえず英語読め無いから海外は勘弁してくれw
英語読めないなんて論外だろう。
前提として必要なものが欠落していると、いかにダメかっていう好例になっちゃうぞ。
なぜ日本語で書かれた資料が少ないか。 大半のプログラマが、 英語で書かれた資料を読んで、 それで事足りているから。
>用語にサーバーとかでてくるけど通信がやりたいわけでもないのに なまじ日本語だと勘違いする罠。 Websterで調べるとやっとそれっぽい意味が出てくるのは4番目で、 ネットワーク云々が出てくるのは最後の6番目だ。 # 1番目は勿論、日本でもケーキサーバと言えば通じるあれのことだ。
英語読めないってのは致命的だよ しかも技術英語なんて、文法簡単だし 単語は技術英語辞典あればいい
>>217 OLE ServerとOLE Container。
むっちゃくちゃ基本的な話なのに。
229 :
207 :2007/08/21(火) 23:41:48
>>222 私の場合、学習の順序がむちゃくちゃですね。
Excelのファイルを作りたくて色々調べて、とりあえず近々やりたいことは出来るようになりました。
でも、基本が無いからちょっと詰まるとカットアンドトライで切り抜けている状況です。
COMというものを勉強すれば、その辺の基礎中の基礎が分かるようになると今知りました。
今後、その辺含めて勉強していきます。お手数おかけしました。
>>228 一番上懐かしいなw
10年位前に読んだ気がする
>>221 一応、設定してみたけど
beext1.tlhの中でCommandBarsがどうたらこうたらってエラーが18個ぐらいでるw
まあ、いいです、色々ありがとう
これが動かせたからどうって問題でも多分ないと思うし
根本的に基本的なところの理解が足りて無い状況なわけでw
>>231 _com_ptr_tならMSDNライブラリで日本語訳されてるぞ?
でも、すげーなみんなよくリンク知ってるね 俺が1年前探したときにはなんも見つからなかったのに・・・
>>229 正直、excel動かしたいだけだったらVB使えばいい
もしくはMFCでタイプライブラリからクラス作ればわずらわしい部分はほとんど無くなる
COMの勉強というが、もし仕事でやってるなら今後、どうなるかわからない技術だから
必要に迫られて無い限り深く知る必要は無いとも思う
ただ、俺個人としてはどんなことでも勉強する人間は嫌いじゃないけどね
仮に、自分の部下だったらCOMを勉強すると言うなら、アセンブラと電気勉強させるがw
COMって勉強するってほどのものか? Windowsプログラマには当たり前のことだと思うが。 DirectXでゲーム作ってる厨房だってCOM使ってるぞ。(DirectXローカルに変更されたものだが)
>>236 COMを使うだけだったら、勉強なんてほとんどイラン
COMサーバを作るんだったら、それなりに勉強しないと出来ない
勉強するといのは=COMサーバを作るってことだと思っているが違ったかな
>>236 一口にCOMといってもいろいろあるし、
自分でもアパートとかスレッドなんてキーワードがでてくるとかなりあやしい。
>>236 俺、ゲーPGだったからDirectXはバリバリ使えるけどCOMはさっぱりだぞ
エクセルダイアログ作って上げたかったよ・・・orz
>>239 ゲーPGだったのか
俺もゲーPGだったよ10年以上前は
ExcelならVB(A)でオブジェクトモデルを把握して、 必要ならVC++では、MFCか#importでちょいちょいだろ。
ぶっちゃけ、VBでいいじゃん。 なぜVC++を使うん?
VB知らないからですね。
>>242 やっぱり客の要望的にVCのが小回りが効く
COM/OLEの部分はどっちかっていうとプラスアルファ的要素
基本はVCのスッキリした動作と細かいサポートが必要
って状況だからVCで使えないとあんまり意味がない
超初心者スレなのにプロの巣窟。
246 :
デフォルトの名無しさん :2007/08/24(金) 10:17:39
エキスプレスエディチョンで、複数のソースファイルで、呼び出し元とか、宣言、定義に移動できるのはいいが、そっから巻き戻して元の文に戻る方法はないのか?
ある
エキスプレスエディチョンなんてない
249 :
デフォルトの名無しさん :2007/08/24(金) 10:33:46
エキスプレスエディチョン
250 :
デフォルトの名無しさん :2007/08/24(金) 10:34:55
エ キ ス プ レ ス エ デ ィ チ ョ ン
「チョン」は朝鮮人の事を指す言葉ではなく、一般的に頭の悪い人を指す言葉なので差別用語ではない。
252 :
エキスプレスエディチョン :2007/08/24(金) 10:36:50
>>251 鮮人のことを指したからといって、差別語ではない。親しみを込めていっているだけだ。
254 :
デフォルトの名無しさん :2007/08/24(金) 11:49:20
EEで.net用のソースは問題なく使えますか?
意味がよくわからんが使える
無理
なぜ自分で試さない?
PCを持っていないから
いい加減にしておけよ性犯罪者予備軍
>>259 俺にも分かった。腕の細いところときめ細かい肌の日焼けが特徴だ
262 :
デフォルトの名無しさん :2007/08/25(土) 01:25:36
Visual Studio 2005 MFCでCFormViewを基本クラスとするアプリを作成しています。 OnInitialUpdate()で別ダイアログを表示させ、そのダイアログの戻り値によって アプリを起動させずに終了させたいと思っています。 OnInitialUpdate()でどのような命令を実行させればよいですか? そもそもOnInitialUpdate()で設定する内容ではないのでしょうか??
今時MFCなんか使ってるからだよバ〜カm9(^Д^)プギャー
>>262 CFormViewでなく、アプリのInitInstanceにしとけば?
InitInstance( )内で直接ダイアログを表示して判定、
起動しない場合はそのまま復帰値FALSEでInitInstanceを抜ける。
265 :
デフォルトの名無しさん :2007/08/25(土) 16:51:58
vs2005を使ってます。 デバッグするときに止めたい場所にブレークポイントを設定しますが、 プログラムをある程度進めた段階で(例えばブレークポイントを1000回通過した時点で) 止めるということは出来るのでしょうか? 方法があれば教えてください。
>>265 i++
if(i > 4000){
int a = 0;
}
>>265 1)ブレークポイントを作成
2)ブレークポイント行を右クリック
「ブレークポイント」-「ヒットカウント
>>266 って恥ずかしいね。無知なのに人様に教えようだなんて。
いいんじゃね。 ヒントでも欲しいって場合もあるし、 他に明確な回答があるなら他の人が答えるだけでしょ。
272 :
267 :2007/08/25(土) 18:00:11
ヒットカウントは知っているけど
>>266 なコードを使うことが殆どだな。
一定回数毎とか言い出すと、ソースに組み込んだ方が早い。
/\___/\ / ⌒ ⌒ ::: \ | (●), 、(●)、 | | ,,ノ(、_, )ヽ、,, | < VS2005 コマンドラインでコンパイルすると | ト‐=‐ァ' .::::| "public列挙子(クラス***)にアクセスできません"とか \ `ニニ´ .:::/ "純粋仮想関数の宣言は'=0'でなければなりません"とか /`ー‐--‐‐―´´\ /\___/\ / ::\ | ─ ─ | | (●), 、 (●)、 | | ,,ノ(、_, )ヽ、,, .::::| < IDEでは問題なくビルドできるのに・・・・ \ r‐=‐、 .:::/ /`ー `ニニ´一''´ \ /\___/\ / ::\ | :| | ノ ヽ、 :| | (●), 、 (●)、.:::| < なんでコマンドラインからだと \ ,,ノ(、_, )ヽ、,, ::/ どうしようもないエラーが沢山出るの・・・? /`ー `ニニ´一''´ \
C++/CLIなら/clrオプションでも付けておけ。
>>273 IDE上で、コンパイラに与えるコマンドラインスイッチ見れるだろ?
それと同じものを与えてみ。
>>272 色々条件指定できるみたいだけど面倒臭くて使えないよな
俺もソースに書き込むことのが多い
ソースに書き込んでもいいが、リリース版に残ったりしないように、適切にマクロ使えよ。
>>277 そんときその場だけの情報がほしいことが多いから
すぐに消しちゃうよ
int a=0;
とかありえないコード書いておけば後で検索も効くし
280 :
デフォルトの名無しさん :2007/08/25(土) 22:04:30
>>279 は?int aとかa=0;で検索掛けるだけだってのに頭思いっきり悪いなお前
それにそのまま出荷しても if(i > 4000){ int a=0; } このソースはプログラムに影響なんて与えないんだよ
意味不明なコードは保守性に悪影響です。
この程度のコードなら並みのPGは一瞬で動作も意図も理解できるんですよ
>>283 ブレイクポイント用にこんなコードを書くPGなんて君だけだから、普通のPGには意図が汲めません。
>>285 え?こんなのわかんないの?w
さすがに反論する気にもなれない
281のコードならどうせ警告が出るはずだから、 出荷時まで残るなんてことはないと思う。
ShortCodingとかいう本読んだら発狂するだろうなw
>>285 俺も281みたいなことをやるが、他人に見せる前には消すぞ。
281の会社は警告OFFとかしてそう。 残ってても問題ないらしいし。
そういう香具師に限って残してることに気付かないんだ。
>>281 ならどんな会社にいても、同じことを言って
周囲に迷惑かけまくっているに1票。
でも、きっと本人はそれに気づいていない。
動作に問題ないからって
>>281 みたいなコードが残ってる製品ってダメだろ。常識で。
なんで、マクロを使わないの? マクロを使って自動的にリリース版から除去するのが、許されない何か理由でもあるの?
>>293-295 ぷw
明らかに孤立してるからって自演すんなよw
>>296 マクロは定義をみないと動作がわからない上に
VSのインテリジェンス機能が使えなくなるときがある
さらにマクロを定義したヘッダをソース中にインクルードする必要があるところも嫌だな
このやり方が便利だと思うってことはお前のソースには
総合ヘッダみたいなグローバルに影響を与える仕組みが存在するってことなんかな?
いや、ふつーにデバッガの機能使えば済む話だろ。
>>297 >>296 は、たぶんこういうマクロを指しているものとおもわれ。
#if !NDEBUG
//デバッグ用コード
#endif
>>297 > マクロは定義をみないと動作がわからない
動作がわかる名前を付ければいいだけのこと
> VSのインテリジェンス機能が使えなくなるときがある
当該のマクロに対して使えなくたって構わないだろう。
> お前のソースには総合ヘッダみたいなグローバルに影響を与える仕組みが存在するってことなんかな?
Yes。
stdafx.hがそうだよ。
>>297 マクロはインクルードファイルに書かなければいけないわけではないことはご存知?
どうも今日は、インクルードファイルを特別視している意見をあちらこちらのスレで見かける気がするが。
>>302 それでなにが変わるの?
だってその機能を汎用で使うってことは定義したファイルを
全ソースにインクルードしなきゃ使えないことには変わりないじゃん
なくていいバグをソース中にばらまいてるだけだな
非常にコーディングレベルが低い
元々の意図が、デバッグ用コードを埋め残すって話でしょ。 で、そんなことするくらいならマクロを使えって流れなんだから インクルードファイルは関係ないわけだけど。 で、リリースモードでデバッグする馬鹿は論外だと思う。
>>299 ふつーに使う分には問題ないんじゃないの?
>>305 >で、リリースモードでデバッグする馬鹿は論外だと思う
デバッグモードでは起きないけどリリースモードでは起きるって初期値バグって結構あるから
考慮に入れてもいいと思うけどな
>>307 ログ出力処理にレベルを付加して、リリース時のデフォルトは低くしておくけど、
設定変更すればたくさんのログが取れるように仕込むというなら、よくあること。
でも、
if(i > 4000){
int a=0;
}
こんなレベルのコードをリリース時のソースに残すってのはありえない。
リリースビルドとは別に、デバッグ用にリリースビルドと同じ設定のビルドを用意すりゃいいじゃん。
そもそも
>>281 のコードは一時的にブレイクポイントを仕掛けるためにやるんだろ。
該当箇所のデバッグが済んだら、すぐにさよならで、
そんな恒久的に残すわけないだろ。
結論:リリース時まで残す281はあほ。
>>308 ,309
は?誰もリリースのときまで残すなんて発言してないけど
どこを見てそんな発言でてくるのか教えてくれよ
ちょっと電波入ってね?
残すつもりがなくても、 残ってしまうという事故は、 人間がやるかぎりある。 だからこそ、 自動的に削除されるようにすべき。 たとえそれが、すぐ消すものであっても。
>>311 「そのまま出荷しても」と書いているのだから、
281はそのまま出荷することがあるかのように思われても仕方がない。
そりゃうまい具合にミスすれば残ったまま出荷する事は有るだろうな
久しぶりに勢いづいていると思ってきてみたら なんか荒れてるなぁ 281みたいなコードは普通に使うけどね 自分の場合もppで、ON/OFFさせて 配布時にスクリプトで一掃させるかな
>>314 万に一つに備えるのがプロのプログラマだと思いますが。
317 :
315 :2007/08/26(日) 00:14:07
あ、pp->cppの間違いだった
備えた結果がこの影響が無いコード
>>313 曲解してまで自分が正しいことにしたいの?w
>>319 おまえが思いつきで屁理屈言ってるようにしか見えないよ。
>>319 え?曲解なんかではなく、俺は
>>281 がそのまま出荷するんだと感じたんだけども。
でもそう言われてみれば、281は誤って残した場合でも影響を与えないと言いたかったとも取れるな。
そうだとしたら、俺みたいな読解力ない人間のためにもきちんとそう書けという話になるが。
リリースビルドでしか発症しないバグを云々って言うけどさ、
>>281 のようなコードはリリースビルドでは最適化されて、
ブレークポイントを張れないと思うんだけど、どうよ。
屁理屈とレッテル貼るだけじゃなくもっとましな反論したら
>>321 ハイハイw
>>322 もちろん値はprintfやoutputDebugStringでひっかけるよ
int aは検索用にのこして置くけどね
それでもうっかり出荷しても問題は起こらないけどねw
Xもちろん値はprintfやoutputDebugStringでひっかけるよ ○もちろん値はprintfやoutputDebugStringで出力してifはひっかけるだけだよ
>>323 もとが「曲解してる」とか言いがかりだし。
とりあえず if(i>4000){ int a=0; } は俺も使うし、出荷時にうっかり残っても問題にならないしで いいデバッグコードということでFA?
>>324 なんでマクロ使わないの
DEBUG_BREAK_EACH_X_TIMES(4000)
これでいいじゃない。
>>326 だよね
読解力が無いだけなのにひどいよね
>>328 VSのインテリ効かなくなる・・・って既出か
>>329 レッテル貼りしないでまともに反論しろって言う割には、自分はそれか。
>>327 こんなコードが残ってる製品っていやだよね。
>>333 やってみやってみ(っていっても会社のVC6だからってのもあるかもw)
てか、インテリはマクロの類は全部駄目だなぁ・・・w
>>335 さっきやってみたら.Netでもインテリ消えるな
2003とか2005とかどうだろ?
インテリ消えるなら{}で括ればいんじゃね? ダメだった?
>>337 どういう法則で消えてるのかわからない
なんかマクロはさまるだけで駄目って気もするし
そうで無い気もするし
質問です。 ビルドした静的ライブラリ(.lib)のシンボルの一覧を確認したいのですが、 何か方法はありませんでしょうか。 Dependency Walkerで試してみたのですが、.dllでないとダメなようです・・・。
>>339 dumpbin /symbols *.lib
341 :
デフォルトの名無しさん :2007/08/27(月) 15:16:42
ちょっと質問。 起動されたときに、自分自身をデバッガにアタッチするプロセスの作り方を教えて。 VC7.1、CRT使用、ほかのプロセスから起動されるプログラムを作ってます。
最近C++勉強はじめた(ゲーム作成のために) プログラムの経験は、はるか昔にN88日本語BASICとCOBOLをやったくらいしかない 適当なテキスト見ながらやってみた なるほど、こういう便利なライブラリがあるのか 一通り簡単な事なら出来るようになった でも、なんかスッキリしない ライブラリを拝借して使ってるだけで、ちっともゲームを自分で作ってる気がしないw これは違うんじゃないか俺? ちょっと心配になってきたこの頃です ここの住人とかはライブラリを自作したり出来るんでしょ? すけーな・・・道は険しそうだ・・・
ライブラリなんてゲームに関係ないと思うが。 どんなライブラリつかってオセロを作ろうがオセロはオセロだろ? そんなにライブラリから作りたいなら、 Cのライブラリから自作するよなもちろん?
いやいや、Cのライブラリを実装するのにOSを呼び出すんだから、 そのOSから自作だろ。
ライブラリを作りたいならライブラリを作ればいいし、 ゲームを作りたいならゲームを作ればいい。 ゲーム用のライブラリが作りたいのならそうすればいい。 自分の目的にあわせて手段をどう取るべきかよく考えろ。 フルスクラッチで作成しなければ達成感が得られないのなら仕方ないが、 ゲームを作るという目的のために既存のライブラリを使ってもズルでも何でもない。 何でも最初から、とか言い始めたら、ゲームのための筐体作りから始めなきゃならんぞ。
むしろ自分で組む量をできるだけ減らすように努力した上で スニペットとかの入力補完とかフルに使った上でもrubyの数倍のタイプ量がC++には必要だから安心していいよ^^
Ruby厨乙
349 :
デフォルトの名無しさん :2007/08/27(月) 17:02:59
>>345 ほかのプロセスから起動されるプログラムを作っているので、
このプログラムがプロセスとして生成された時点で自動的に
デバッガヘアタッチしたい。
>>342 便利なライブラリってのが何のこと言ってるのかわからなが
例えばゲームという事でDirectXだと仮定する
このスレッドの回答者側と言えども作れる人間はほとんど居ないと思うよ
かく言う自分も、まだDirectXがそれほど浸透していない、DOOM系FPSがもてはやされていたころ
DIBSectionを使った、擬似3D描画エンジンとか簡易な3Dレンダラーは作った事あるけど
DirectXが持っているような複雑な3D演算や、HALライブラリは作れない
あと、N88Basicを知っているなら、IO直叩き可能なOS(CP/MとかMSDOS)とかを経験した
世代かもしれないけどwindowsというOSは、自分でIOに直接命令するようなライブラリは、
SDKレベルでは作れないから、結局はwin32APIというOS提供ライブラリの上で踊っているだけだ
ライブラリってのが何のこと言ってるのわからないけど、これほど複雑になったOSの上で
すべて自分で作ってるような人間は居ないから安心していいよ
もちろん、そういうものを作っている人間がいるのは間違い無いわけだから、そういうのに興味を持っていくことを
否定しないし、そういうのを作りたいというなら賞賛するよ
>>349 プロセスとして生成された時点というのは、
EXEのエントリポイントが呼ばれるよりも前? それとも後?
>>341 任意の時点でint 3を発行すれば、その時点でそれを
OSが捕まえて、デバッガにアタッチしてくれる。
いまは確認できないけど、VCだとint 3をラップする
DbgBreak(?)とかのマクロが用意されてたはずなので
それを呼べばよい。
353 :
デフォルトの名無しさん :2007/08/27(月) 17:11:32
>>351 エントリポイントに入った後というか、main()が呼ばれた後くらいで
止まっててくれると非常に助かる。
>>353 int main()
{
DbgBreak();
...
とするだけ。
>>353 それだったら、DebugBreak というAPIを使えばOK
>>353 それなら、プロセスが生成された時点でもなければ、起動された時点でもないな。
メイン関数に入った後でよければ、それは、任意の時点だ。
Win32APIだと
DebugBreak()
がある。
ただし構造化例外をキャッチしているとダメよん。
やはり記憶違いだったか... orz
358 :
デフォルトの名無しさん :2007/08/27(月) 17:28:27
>>352 >>354 >>355 >>356 ありがとう!
#include <windows.h>
...main()...
::DebugBreak();
で無事にできた。
ヘッダー:winbase.h 内で宣言...ということになってるが、エラー
windows.hでできた。
win32コンソールプロジェクトでビルド。
重ねてさんくす!
>>358 > ヘッダー:winbase.h 内で宣言
MSDNライブラリならそのすぐ下にwindows.hをインクルードと書いてあるだろうに。
361 :
354 :2007/08/27(月) 19:09:25
>>360 残念ながら違う。
だいたいMSDNを確認できる環境になかったので、マクロ名を間違えているくらいだ。
>>361 2chに書き込みできるのに、MSDNオンラインを参照できないなんて。
ヒント ぽけギコ
364 :
デフォルトの名無しさん :2007/08/27(月) 23:11:30
VC#で作成したアプリがあまりの遅さにクレームがつき VC++MFCで書き直すことになりました。 VC#ではDataGridViewなんて便利なものがあったのですが VC++では見つかりません。 yahooで調べてみたらMSFlexGridを使うらしいのですがいまいち柔軟性がない おそらく一から作っていくと思いますが、いいサイトしりませんか?
お前みたいなのがC#の評判を悪くして普及を妨げてるんだな。
codeguruとかcodeprojectとかにいくらでもあるじゃん つーか、ドトネトのDataGridViewが遅いのは有名な話で、 ひょっとしてそこだけ有料コンポーネントで置き換える手が あるんじゃねーの
極端に速度が遅い場合、言語のオーバーヘッドよりも、アルゴリズムの悪さのほうが支配的。 (アルゴリズムと言うのも、はばかられるような、ただただ酷すぎる代物だったりもするが・・・)
370 :
デフォルトの名無しさん :2007/08/28(火) 01:51:38
↑ アフォ発見
↑ 馬鹿発見
ぬるぽ発見
ム板でぬるぽに反応する奴なんていねーよ ガッ!
あいかわらずキモい流れ
375 :
デフォルトの名無しさん :2007/08/28(火) 16:44:15
神様教えて。 templeteを用いた関数を、宣言と実態とで別ファイルに書くと コンパイルエラーが出ます。 ↓↓↓↓↓↓動く↓↓↓↓↓↓ (test.h) template <typename T> void swap(T& a, T& b) { T tmp = a; a = b; b = tmp; } (main.cpp) #include "test.h" void main(){ int a =1, b =1; swap<int>(a,b); } ↓↓↓↓↓↓コンパイルエラー↓↓↓↓↓↓ (test.h) template <typename T> void swap(T& a, T& b); (test.cpp) #include "test.h" template <typename T> void swap(T& a, T& b) { T tmp = a; a = b; b = tmp; } (main.cpp) #include "test.h" void main(){ int a =1, b =1; swap<int>(a,b); }
376 :
デフォルトの名無しさん :2007/08/28(火) 16:45:13
エラーとしてはswap<int>が未解決になります。 ちなみにVC++ 6.0です。
377 :
デフォルトの名無しさん :2007/08/28(火) 17:10:50
あるダイアログ内にある全コントロールのID(IDC_xxx)を取得するには どうすればいいでしょうか?
どうしてもcppファイルに定義を書きたければ、 明示的実体化(あるいは明示的インスタンス化とも)を行えばよい。
あらかじめ想定した型でしか使えないなら、テンプレートの威力半減だと思う。
FindWindowExでHWNDをとって、 GetDlgCtrlIDでIDに変換。 そこからさらに"ID_XXXX"という文字列が 欲しいなら逆変換テーブルの御用意を
Visual C++を購入したいのですが表示言語設定などは設定できるでしょうか それとも日本語しか表示できないのでしょうか
>>381 EnumChildWindowsは要らないの?
スレッドを作った側が、そのタイミングでスレッドを停止させるには?
>>384 「そのタイミング」って何かな。
最近、自分のやりたいことを正確に書けない質問者が多いよ。
スレッドを停止状態で作るということであれば、CREATE_SUSPENDED。
>>385 すみません。うんこ我慢しつつ脂汗かきながら書いていたので変になってました。
_beginthreadした側が、スレッドを作った側の好きなタイミングで停止させられるかどうか、という事です。
ハンドルで何とかなるかなと思って調べているんですが、中々答えまでたどり着けません。
ちなみにまだうんこ我慢してます。
389 :
378 :2007/08/28(火) 20:39:55
>>381 >>383 EnumChildWindowsとGetDlgCtrlIDでできました。
ありがとうございます。
VC++6.0で int *kaisu; kaisu = (int *) calloc(10, sizeof(int)); とすると error C2440: '=' : 'bool' から 'int *' に変換することはできません。(新しい動作 ; ヘルプを参照) と言われてしまいます。ヘルプの例でもこうなってるのですがなんででしょうか
まずは<stdlib.h>をインクルードしているか確認だ。
>>390 malloc.hを#includeしてる?
393 :
390 :2007/08/28(火) 23:12:06
ご指摘の通りでした。失礼しました。
394 :
デフォルトの名無しさん :2007/08/29(水) 01:00:22
ウィザードがCViewから派生してCXXXViewを作ってくれますが このCXXXViewにどうやってコントロールを置くのですか? 例えば、Excelみたいなスプレッドシートを作る際 ここから自前でグリッド、カーソルを描画するのですか?
GridViewを使うかFormViewにGridコントロールを張れ。
ウソこいた。CListViewかCListCtrlのレポートビュー
397 :
デフォルトの名無しさん :2007/08/29(水) 01:35:45
CListViewって項目の変更ができないからダメds
・セルに重ねてCEdit出す ・.NETワークフレーム使う ・他の言語でコンポーネント作る などなど。 好きな方法使えよ。
VC++2005使ってWindowsプログラム作ってます。 .NETではなくネイティブAPIです。 文字列定義するときはどの型で作るのがベターですか? charとかLPSTRとかこいつらに似たような型やらがいっぱいあって どれを使えばいいのかわかりません。
TCHARとTEXTマクロ使っとけ
LPxSTRとPxSTRはxCHAR* LPCxSTRとPCxSTRはxCHAR const* 共にヌル文字終端する。 LPxCHARとPxCHARはxCHAR* こっちはヌル文字終端しない。 ただし、xは(空)、T、Wの3種類で、 例えばxCHARならCHAR、TCHAR、WCHARという具合。 CHARはchar、WCHARはwchar_tのtypedef。 TCHARはコンパイル時条件でcharかwchar_tのどちらかに切り替わる型。 特に理由がなければ400も言っているとおりTCHAR系を使っておけばいい。
charとwchar_tのどちらになっても問題ないようにコーディングするならTCHARを使ってもいいけど、 どちらか片方でしか正しく動かないようなコードを中途半端に書くならTCHARを使うべきではないと思うよ。
あらかじめ謝ればマナー違反が許されると思ってごめんなさい。出直してきます。
405 :
399 :2007/08/30(木) 00:48:14
詳しく説明してもらってありがとうございます。 自分でもいろいろ調べたりしましたが 型はTCHARで_TかTEXTマクロを使うのがよさそうですね。 ついでですがprintf系関数は _sをつけた関数にして_Tをつけとけばいいですか?
printf/wprintfには_tprintf、
printf_s/wprintf_sには_tprintf_sのようにTCHAR版が存在し、
<tchar.h>で宣言されている。
(正確には_TCHARという型を使うがTCHARと同一視して問題ない)
MSDNライブラリを引けばT版の関数名も載っている。
http://msdn2.microsoft.com/ja-jp/library/wc7014hz (VS.80).aspx
C++のほうはテンプレートになっているので、
std::basic_string<TCHAR>のように難なく使えるものが多い。
便乗して質問。 日本語版のVC++の std::basic_stringは、 C標準ライブラリ関数のようにMBCS対応していますか? std::basic_string<_TCHAR>とした場合、 _UNICODEを定義している場合は、std::wstringと同じで問題なさそう _MBCSを定義している場合は、std::stringとは同じではダメそうだと思う。
CString urlInput = "
http://www.yahoo.co.jp/ ";
TCHAR buf[1024];
CInternetSession cSession;
CHttpFile* file= (CHttpFile*)cSession.OpenURL(urlInput);
CString htmlData;
UINT readHtml;
while(1)
{
readHtml = file->Read(buf,1024);
CString str((LPCSTR)buf, readHtml);
htmlData += str;
if(readHtml < 1024)
break;
}
delete file;
m_htmlOutputEdit.SetWindowText(htmlData);
HTMLを表示するプログラムを作ったつもりなんですが、
日本語部分が文字化けしてしまうんです。
どうすれば文字化けしないで表示できるでしょうか?
mojiこで
あなたが気がついていない問題が。
> CString str((LPCSTR)buf, readHtml);
>>402 を読んで反省するように。
一般に使われてるブラウザでさえ文字化けの問題は避けられないし そのへん真面目に作ると結構めんどくさい
CStringよりCMemFileを使った方がいいな、こういう場合。
デバッガに出力するprintf風に拡張した OutputDebugStringのラッパを作ってみたんですが _vstprintf_sの第二引数に何を入れればいいのかわかりません。 わからないポイントは以下の通りです。 ・文字数なのかサイズなのか ・終端文字含めるのか含めないのか ・例外が発生したときの処理 よろしくおねがいします。 void DebugPrintf(LPTSTR format, ...) { TCHAR buf[256]; va_list ap; va_start(ap, format); _vstprintf_s(buf, /*ここ*/, format, ap); va_end(ap); OutputDebugString(buf); }
>>413 > ・文字数なのかサイズなのか
文字数
> ・終端文字含めるのか含めないのか
含める
> ・例外が発生したときの処理
知らない。
416 :
414 :2007/08/31(金) 01:03:50
ありがとうございました 確信がもてました でも例外のときはどうすればいいんでしょうか
自分なら例外はハンドルせずに放置するよ。 下手に処理して隠してしまったら、デバッグにならないし。
msdnとか見て自己解決しました
くだ質か分からないんだけど VC++6 (pro)にて 明示的リンク(LoadLibrary〜GetProcAddress〜FreeLibrary)で呼び出されるDLLの プロファイルやデバッグってどうやるんでしょう?
>>419 暗黙的リンクで呼び出されるDLLと同じ方法を試してみてダメだったの?
421 :
419 :2007/09/02(日) 11:27:38
>>420 「えっ?・・・」と思ってやってみたらできました。本当にありがとう&すいません。
exe側ではdllをフルパス指定し、かつ一定条件時でのみLoadLibraryしてるんで、
単にexe指定するだけでは無理と思ったんです。
(どうやってやっているんだろう・・・LoadLibraryごとAPIフックしてんのかな?)
何かモヤモヤしてますがひとまず結果オーライなのでこうやって使うことにします
お騒がせしました
VC++6.0使ってます。猫でもわかるの31章ラジオボタンでボタンをグループにする場合 の「レイアウト」「タブオーダーの設定」というのはどこからすればいいのでしょうか
探さなくても目の前にあると思うけど
bmpファイル読み込み、90°回転、保存を行いたいです。 Bitmap bmp( img1.bmp );//読込み bmp.RotateFlip( Rotate90FlipNone );//回転 bmp.Save( img2.bmp );//保存 この処理はPC性能によって制限(画像サイズ、階調値など)があるだろうと思いますが、 その値の取得、計算方法がわかりません。 教えて頂けませんか。よろしくお願いします。
必要分のメモリ確保できたかどうか
>>424 古いうえに正確さは不明な昔のメモから引用。
WindowsのAPIでイメージを扱うにはDIBとDDBの2つのやり方がある。
(APIによって異なる)
NT系ではDIBのサイズには制限はないが、DDBの大きさに制限があり
NT4では、1個あたり150MB、総容量250MB程度
W2kでは、1個あたり130MB、総容量180MB程度
9x系だと、DDB/DIBいずれにも制限があり、
95/98では、DDBの場合1個あたり16MB、総容量350MB程度
DIB Sectionの場合1個あたり64MB、総容量350MB程度
Meでは、DDBの場合1個あたり16MB、総容量400MB程度
DIB Sectionの場合1個あたり400MBで、総容量400MB程度
XP/VistaやGDIPlusで制限があるかは知らないが、
例えばGDIPlusのBitmapクラスが内部でDDB/DIBを使用しているのであれば
同様の制限になると思われる。
あー、ありました・・。ありがとうございました。
>>425 ,426
参考になります。環境はXPなので、この情報を元に探ってみます。
ありがとうございました。
以前VC++ 6.0でMFCアプリケーションでのプログラム作成を通して、 簡単な文法を勉強したことがありました 最近、visual stdio2005 のスタンダードエディションを購入して同じようにMFCのアプリを作ろうと思ったのですが、 文法がかなり違う事に気づきました。 メッセージボックスでメッセージと変数の値を一緒に出すのはどうすればいいのでしょうか? 6.0では下記の記述でできました。 int num = 12; CString str; str.Format( "答えの結果は%mbd", num ); MessageBox( str, "確認", MB_OK); 2005では CA2T str("答えの結果は"); CA2T ptr("確認"); MessageBox(str, ptr, MB_OK); という方法で文字を出すことは出来たのですが、変数の値を組み込む方法がわかりません。 ご教示おねがいします。
431 :
430 :2007/09/03(月) 22:20:41
>>str.Format( "答えの結果は%mbd", num ); str.Format( "答えの結果は%d", num ); の間違えでした
%mbdを単に%dにすれば、その6.0の記述とやらも2005で使えると思うが。
_Tマクロ忘れていた。<tchar.h>をインクルードしてこう。 str.Format(_T("答えの結果は%d"), num); 逆にVC++ 6.0でもコレでいけると思う。 こうなったのは、VC++ 2005がUNICODE有りを初期状態にしたため。
434 :
430 :2007/09/03(月) 22:45:35
>>433 記述の通り行ったところ、エラーなく表示できました。
理由も教えて頂き、本当にありがとうございます。
MFCのCStringはVS.NET以降で大きく変更&拡張されているので、 一通り目を通しておくことをお勧めする。 これのお陰で文字列変換マクロはほぼ用済みになった。
マルチ文字コード対応のための_T()をつけるのがめんどいんですがなんとかならないですか?
>>436 char決め打ちだった頃のように、Unicode決め打ちでいいんじゃね?
GetObject(hBmp, sizeof(BITMAP), &bmp); //bmpはBITMAP SetWindowText(label,(char*)bmp.bmWidth); あんまりに下らない質問かも知れんが教えて。 ビットマップの長さ(横幅)を取得して(labelというスタティックコントロール(であってる?))に 表示させたいんだけど、実行してもlabelの文字が変わらんのです。 bmp.bmWidthはlongのようだからキャストしてるつもりなんですが・・・ このスレで間違ってたらすいません。
>>438 数値をそれを意味する文字列に変換する、ってのは素のキャストではできません。
sprintfやCString::Formatを使ってください。
>>438 それは、VCとかwindowsとかの問題ではなくc言語の基本中の基本の問題だ
SetWindowTextの第2引数は、文字列のポインタを指定する訳だが
果たして、bmp.bmWidthの値は、文字列のポインタになっているだろうか?
ヒントは、キャストしたからと言って、その値自体は変わらない
これ以上は、頼むから調べてくれ
441 :
デフォルトの名無しさん :2007/09/04(火) 16:47:14
VC++のSDKでCreateWindowで作ったボタンが消える現象が起きた。 フォームにボタンを2,3個置き、ボタンと関係ない離れた位置にビットマップ描画。 すると(3,4回に一回)ボタンが消える。 でもその位置でクリックするとボタンが現れ、押せる。 ちなみに某のC++Builderでも同じ事が起きた。 リソース不足かと思って、IDEを閉じて実行しても同じ。 何で?
ソースup
443 :
441 :2007/09/04(火) 16:58:29
>>442 case WM_PAINT:
return 0;
この所をコメントアウトすると起きなくなるみたいなんだが。
怪しいのはこの辺と思うんだけど。
CLIPING
Win32API初めて数週間の俺が思うに、 WM_PAINTではValidateRectとかBeginPaintとかしないといけないんじゃ?と思ったんだが とりあえずそこで処理しないで、return 0; を break; にするなりして、DefWindowProcに渡せばいいんじゃね。 多分
>>443 WM_PAINTでは更新リージョンを空にしないといけない。
更新リージョンがある限りWM_PAINTは呼ばれ続ける。
更新リージョンを空にする方法は、
BeginPaint、ValidateRect、ValidateRgnのいずれかの関数を使用すること。
DefWindowProcにWM_PAINTが渡ると、ただBeginPaintしてEndPaintしていると
AdvancedWindowsかプログラミングWindowsにも書いてあったはず。
だからWM_PAINTのcaseをコメントアウトすると、作法通りのプログラムになり、
問題が起きなくなると考えられる。
>>441 「VC++のSDK」つーから、Visual Studio SDK かと思ったら、PlatformSDKのことかよ。
ふつうは、
VC++で、Win32APIでCreateWindowで・・・
と書くのよ。
Visual Studio2003でWIN32プログラムを作ってるんですが、 printfみたいにコンソールにデバッグ用メッセージを表示させるにはどうすればいいんでしょうか? 凄く初歩的な質問ですいません。
>>448 コンソールへの出力ではなく、デバッグ出力を得ることが目的なら、
CRTのデバッグルーチン、もしくはOutputDebugStringを使った自前の関数を用意する。
MFC/ATLならTRACEとかATLTRACEというのもある。
>>448 AllocConsole
MSDNライブラリで、AllocConsoleのページを表示した状態で「同期」して、
目次の同じツリーにある他の関数群も読んでみよう。
もっと楽な方法があるから、そんな面倒なのやるやつはいない
>>449 >>450 ありがとうございます。
MSDNライブラリってAPIリファレンスのことですよね。
これは、WEBにあるのを見るんでしょうか、
それともVisual Studioインストールしたら一緒にインストールされてるものですか?
>>451 普通はどういうふうにデバッグするんでしょうか?
>>452 > MSDNライブラリってAPIリファレンスのことですよね。
そう。
開発者向けのドキュメント各種が入っていて、
その中にWin32APIリファレンスも含まれてる。
APIリファレンスだけなら、
WindowsSDK(PlatformSDK)のヘルプでも足りる。
> これは、WEBにあるのを見るんでしょうか、
最新版をチェックしたいのでなければ、
ローカルにインストールしたほうが使いやすいよ。
> それともVisual Studioインストールしたら一緒にインストールされてるものですか?
ごめん、どうだったか覚えてない。
455 :
452 :2007/09/04(火) 22:20:59
>>453 今まで携帯のアプリしか作ったことないんですが、それだと
System.out.println() とか、
DBGPRINTF() とかで、
コンソールに値を出してデバッグするんですが、
普通はブレークポイント?とかいうのを使ったりしてデバッグするのかなあと。
>>454 ありがとうございます。
WEBで見てみたらやたら重かったのでインストールしてみます。
>>455 Windowsの場合、通常はデバッガにメッセージを出力(OutputDebugString等)する。
VisualStudio上でデバッグすると出力ウィンドウに出力されるので、後で簡単に見返せる。
無論せっかくのIDEなのだから、ブレークポイントもどんどん使うべき。
>>455 ログを取ったほうがいい場合もあるが、
いわゆる「printfデバッグ」は考え物だぞ。
普通にデバッガでブレークポイント張って、ステップ実行しながらチェックすべし。
458 :
452 :2007/09/04(火) 22:42:34
ありがとうございます。色々と参考になります。 ブレークポイント凄く便利そうですよね。是非使ってみます。
>>458 デバッガで止めた状態で、
マウスカーソルを変数の上にもっていくと、
その値が表示されるよ。
自分のは表示されません。
ビットマップハンドルから一点の色を取得するには どうすればいいんでしょう? hBitmapには既にビットマップが読まれていて、 そのビットマップの左上(0,0)は例えば赤だとする。 この時に赤を返すAPIが知りたいんです。 GetPixel(hBitmap,0,0) でも駄目だったし
GetPixelの引数はHBITMAPじゃなくてHDCだから、こうかな HDC hScreenDC = GetDC(NULL); HDC hMemDC = CreateCompatibleDC(hScreenDC); ReleaseDC(NULL, hScreenDC); SelectObject(hMemDC, hBitmap); COLORREF pixel = GetPixel(hMemDC, 0, 0); DeleteDC(hMemDC);
GetPixelはDCに対して、使用する関数だから DCにhBitmapを選択してからGetPixelを使用する どうしても、ビットマップハンドルからとなるとGetBitmapBitsで 一旦バッファにコピーして、コピーした配列からアドレスを求めて読み出す もし、ビットマップをDIBにロードしてるなら GetObjectでビットマップへのポインタを直接参照も可能
464 :
461 :2007/09/05(水) 02:20:58
>>462 >>463 レスどうもです。
sprintf(col2,"%x",pixel);
SetWindowText(abc,col2);
462さんのプログラムの後に上記で
(abcというラベルに)書き込むと
0と表示されてしまうんですが・・・
左上が赤だったら ff0000 と出てほしいんです。
間違いあったら指摘お願いします。
>>464 それでは色の並びはBGRの順に表示される。
桁数を6桁固定で、RGBの順で表示したいなら、例えば以下とする。
sprintf(col2,"%02X%02X%02X", GetRValue(pixel), GetGValue(pixel), GetBValue(pixel));
ただし、これは値が0になることとは関係ない。
pixelの値が0になるのは、色の取得プログラムを間違えて入力してるか、
hBitmap自体が正しくないことなどが考えられる。
hBitmapはどうやって検証してる?
466 :
464 :2007/09/05(水) 03:31:10
こんな夜分に下らない質問に付き合って頂き恐縮です。 sprintf(col2,"%02X%02X%02X", GetRValue(pixel), GetGValue(pixel), GetBValue(pixel)); これでやっても 000000って出てしまうんですよ。 自分自身かなりの馬鹿なので変なことやってるかも。 色の取得プログラムは462さんのコードを使っています。 hBmp=LoadImage(NULL,GotFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); ってな感じで読んでます。 BitBltで描画もできます。また、ビットマップは数種類試してますが どのビットマップでも、やっぱり 000000 が出ます。
SelectObjectは成功してるのか? なんかメモリDCに最初から選択されている モノクロ1x1のビットマップのピクセルカラーを読んでる気が
あと戻り値やパラメタのチェック、おかしければGetLastError見るとか 自分でSetPixelして読んでみるとどうなるか、とか Bitmap情報を調べてみるとか
>>466 以下のプログラムは動作する?
うちの環境(WinXP pro)では、以下は正常に動作して8C6B5Aと表示された。これは正常な値。
なお、珈琲カップ.bmpはWindowsフォルダ配下にある標準のビットマップをカレントフォルダにコピーしたもの。
もしこれが動作したら次はビットマップを調査対象のものに差し替えて試してみたらどうなる?
てな感じで、もうあとはこのレベルから順番に1つずつつぶしていくしかないんじゃないの?
---a.cpp----------
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "user32.lib")
int main(int argc, char* argv[])
{
HBITMAP hBmp=(HBITMAP)LoadImage(NULL,"珈琲カップ.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
HDC hScreenDC = GetDC(NULL);
HDC hMemDC = CreateCompatibleDC(hScreenDC);
ReleaseDC(NULL, hScreenDC);
HBITMAP hBmpOrig = (HBITMAP)SelectObject(hMemDC, hBmp);
COLORREF pixel = GetPixel(hMemDC, 0, 0);
SelectObject(hMemDC, hBmpOrig);
DeleteDC(hMemDC);
DeleteObject(hBmp);
char col2[10];
sprintf(col2,"%02X%02X%02X", GetRValue(pixel), GetGValue(pixel), GetBValue(pixel));
printf("%s\n", col2);
return 0;
}
470 :
466 :2007/09/05(水) 12:14:13
>> 467 468 469 なんとか469氏のコードで出来ました。 皆さんに感謝です。
471 :
デフォルトの名無しさん :2007/09/05(水) 12:46:44
>>464 マルチ死ね
アホは初心者スレから出てくるなカス
C++では例外処理は自分でthrowしなきゃいけない? try { int a = func(); } catch(...) { エラー処理 } とかだとfunc()にthrowを書く必要がありますか?
474 :
472 :2007/09/05(水) 15:16:29
>>473 お前には聞いてないので安心汁!!(`・ω・´)
472だけど… よく考えたらC++の質問でした。すいません。 C#とかだとException型のcatchがあればなんでも拾ってくれるんですけど C++だとcatch(...)を書いておけば想定外のエラー時に拾ってくれるのかな?という質問です。
例外は無いならそれに越したことは無い。 よって書く必要は無い。
猫でもわかるSDKの第6章簡単なメニューで myProg.hbrBackground = GetStockObject(WHITE_BRUSH); のままだと明示的にキャストが必要と言われ HBRUSHにキャストするとOKでした。 あと、そのままだとメニューがでないので参考書をみると myProg.lpszMenuName ="SAMPLE02"; の右辺は MAKEINTRESOURCE(SAMPLE02); とする必要がありました。私はVS6.0ですが バージョン違いのせいでしょうか
>>475 お前さ、自分の頭の中のことが、説明しなくても、相手に伝わると無自覚に思っているだろ。
基本的にC++では、誰かがC++例外をthrowしない限り、C++例外は発生しない。
いちいち「C++例外」というのは、C++の領分ではない例外もあるから。
Windows環境だと、言語に関係なく、「構造化例外処理」という名前のものがある。
VC++の場合、コンパイルオプションによって取り扱いが違い、
デフォルトではC++例外としては扱わず、catch(...)で捕捉できない。
詳しくは、このスレの
>>135 からを読め。
>>478 文句言いながら質問に答えるなよ。
質問に答えちまったら、
エスパーが必要な質問をしても、
求める答えが得られると思って、
行動を改めないぞ。
>>477 リソースを作るときに、IDで指定(SAMPLE02)した場合はMAKEINTRESOURCEマクロ必要
名前で指定("SAMPLE02")した場合はそのままでおk
キャストはcかcppの差じゃないか?
すいません、リソースを作る時に指定というのはどこで指定するのでしょうか。 私はリソースエディタで作ってますがスクリプト本体を見比べても違う部分が分かりません。
>>481 だから、SAMPLE02 と入れるか "SAMPLE02" と入れるかの違い
"" の有無だよ。リソースエディタ上でやってみな
483 :
481 :2007/09/05(水) 16:55:24
できました。ありがとうございました。
484 :
472 :2007/09/05(水) 17:28:50
なるほど、理解できました。ありがとうございます。 もう少し質問の仕方も勉強します…
485 :
デフォルトの名無しさん :2007/09/05(水) 20:39:05
printf() 関数で " (ダブルコーテーション)の文字を出力する時は、どうすればいいでしょうか? 教えて下さい。
\"
487 :
485 :2007/09/05(水) 20:50:54
VC++2005でWin32APIの関数をヘルプで見てもしょぼい情報しか出てこないか情報が見つからないって出ます。 6.0の時は詳細な情報が出てきて重宝したのですが2005では軽視されてるんですか?
MSDNライブラリはインストールしてる?
EEだからインストールしてません(できない)
できるよ
そだね
ありゃりゃできるんですか? さっそくしてみます。 ありがとうございました。
VC++2005 ExpressEditionからアップグレードしてStandardEditionを入れたのですが ExpressEditionはアンインストールしても大丈夫ですか?
ExpressEditionは他のEditionとは独立しているので大丈夫なはず。 関連付けがうまく処理されるかどうか多少不安だけど。
モジュールは独立かもしれないけど、 >アップグレードして ってところが気になる。
498 :
デフォルトの名無しさん :2007/09/06(木) 00:34:00
超初心者スレでも怒られるような質問かもしれませんが・・・ 以下、概要となります。 aaa.h → VCで作られたaaa.libのヘッダ(関数のプロトタイプ) test.cpp → プロジェクトのメインプログラム extern"c" #include <aaa.h> winmain { ※test.cppについてはaaa.hの関数を使っても リンクエラー無し } tes_sub.cpp → プロジェクトに存在しているクラス処理 extern"c" #include <aaa.h> abcclass::abc_read { abc_readでaaa.hの関数を使おうとすると ビルドでLNK2001エラー } abcclass::abc_close { } tes_sub.cppでaaa.h(aaa.lib)の関数を使用する方法は ありますでしょうか? それとも元々このような記述は不可なのでしょうか?
499 :
495 :2007/09/06(木) 00:48:01
ExpressEditionアンインストールしても問題なく動きました
>>498 > tes_sub.cppでaaa.h(aaa.lib)の関数を使用する方法はありますでしょうか?
ある。
>>500 レスありがとうございます。
もう少々具体的にアドバイス願えますでしょうか<(_ _)>
>>498 > それとも元々このような記述は不可なのでしょうか?
お前さんの書いたコード断片は論外だろ。
どうすればいいか、より なぜそうなるのか、を聞いたほうがためになると思うがなあ
>>498 とりあえず、
>>498 の書き方ではエラーになると思うけど、
仮に以下のように2行に分けて記述してあったとしても
extern"c"
#include <aaa.h>
この場合、extern "C" はaaa.h内の先頭の1関数にしか有効ではない。
通常は extern "C" の記述自体をヘッダ内に入れ、以下のように全体を中括弧で囲む。
extern "C" {
void foo();
void bar();
void baz();
}
ソース側では、ただヘッダを取り込むだけにする。ちなみに自プロジェクトのヘッダはダブルクォーテーションで囲む。
#include "aaa.h"
extern "C"をヘッダに記述する場合は、__cplusplusで切り分けるべき。 #ifdef __cplusplus extern "C" { #endif void foo(); #ifdef __cplusplus } #endif
507 :
501 :2007/09/06(木) 01:28:15
>>502 あまり長々と書くのも良くないと思いまして概要だけを抜き書き
したのですが、質問としては端折り過ぎだったようで申し訳ございません
>>503 ,
>>504 ビルド時にtest.objについてはリンクエラーが無いのに、
tes_sub.objはLNK2001になってしまう原因が何なのかが
判らずにおります。
もう少し自分でも調べてみます。
508 :
501 :2007/09/06(木) 01:32:57
>>505 ,
>>506 レスありがとうございます。
>この場合、extern "C" はaaa.h内の先頭の1関数にしか有効ではない。
この部分の記述が良くなかったみたいですね。
ヘッダ内で__cplusplusを条件にしてextern "C"を記述するようにしてみます。
たいへんありがとうございました。
>>507 test.objでは任意の関数が使えているってこと?
503で書いたけど、元の書き方(抜書きが正しいなら)だと、
extern "C" は最初にしかかからない。
逆にいえば、先頭の関数には有効なので、test.objで使っている関数
によってはたまたまOKだった可能性があるということを言ってるんだけど。
>>507 を自分へのレスだと勘違いした...orz
511 :
488 :2007/09/06(木) 01:50:15
遅レスですが MSDN無事DL&インスコできました。 Win32APIもばっちりあるしローカルだから軽くて最高です。 ありがとうございました。
C++対応してないヘッダファイルを使う場合は、 extern "C" { #include "hoge.h" } これでいいじゃないか。
>>507 肝心な情報を全て隠して質問してもわかるわけない。
自分で切り分けしてポイントを絞るか、
プロジェクトのソースコード一式を全て出すか、
どっちかにせい。
>>502 申し訳ないと思っているのなら、端折らずに書けよ。
場合によっては、一字一句変らないようにコピペしたほうがいいぞ。
モーダルでダイアログ表示した場合って 元のウィンドウを、(ダイアログ閉じないと)操作出来ない? ウィンドウ上のボタンが押されると 時間のかかる処理を行うんだけど その進捗を、モーダルで表示したダイアログ上の プログレスバーに表したいんです。 不可能ですか?
モーダルの意味を考えてみよう。 操作できないのはユーザーインターフェースで、 プログラムからプログレス表示するのは問題ないと思うが
517 :
515 :2007/09/06(木) 10:23:59
>>516 case ID_BUTTON:
DialogBox( hInstance,("IDD_DIALOG1"), hWnd, DlgProc );
for (i=0;i<1000;i++)
{
時間のかかる処理
}
こんな感じでやってるんですが
どうもfor文が実行されるのが、ダイアログを閉じた後なんです。
ダイアログを閉じない限り処理が始まらないんです。
>>517 UIスレッドで重い処理をしようというのが間違いだと思う。
>>517 まず、時間のかかる処理は別スレッドを起こすべき。
ウィンドウには毎秒何十/何百というメッセージが飛んでくるが、
そのすべてをリアルタイムで処理しなければならない。
>>517 のように記述すると、ID_BUTTONのメッセージの処理を行うため、
他のすべてのメッセージの処理を阻害してしまう。
モーダルダイアログは閉じられるまで次の行に制御は移らない。
これは仕様だが、処理自体を別スレッドにしておけば平行して処理
されるので問題はなくなる。
スレッドのない時代は、モードレスダイアログを作成して モードレスなんだけど親子関係作って親を操作できないようにして モーダルのように動作させることもやったし、今でもできるけど せっかくスレッドあるんだから活用したら
521 :
デフォルトの名無しさん :2007/09/06(木) 13:01:01
>>518 ,519,520
レス、サンクスです。もう一つお聞きしたいんですが、
ダイアログを閉じたいんですが、これって間違ってますか?
DialogBox(hInstance,"IDD_DIALOG1", hWnd, DlgProc );
↑ここでダイアログ表示
switch( LOWORD( wp ) ) //ダイアログプロシージャの中
{
case IDOK:
case IDC_BUTTON1:
EndDialog( hDlg, 0 );
break;
↓ここがおかしい?(ダイアログ閉じたい)
SendMessage("IDD_DIALOG1",IDOK,0,0);
ダイアログ上にあるボタン(IDC_BUTTON1)を押すとダイアログが消えます。
ちなみに、右上の閉じるボタンを押してもダイアログが消えません。
またお前かアホすぎw
>>521 そのSendMessageは明らかに間違い。
例えば
PostMessage(hDlg, WM_COMMAND, MAKELONG(IDOK, 0), 0);
などとする。
閉じるボタンについては、OKとキャンセルの区別がないなら、
case IDOK:
case IDCANCEL:
case IDC_BUTTON1:
EndDialog(hDlg, 0);
break;
のようにIDCANCELを併記しておけばよいと思う。
ダイアログはESCキーや閉じるボタンに対して、IDCANCELのIDを持つ
ボタンが押されたかのようなメッセージを投げてくる。
いまいち基本が理解できていないようなので、躓くたびにいちいち質問するより、
猫でもわかるとかのサイトで勉強して基本を身につけたほうがよいと思う。
個人的にはLOWORD(wp)よりGET_WM_COMMAND_ID(wp, lp)が好き。 SendMessageの引数がめちゃくちゃ。最初は"IDD_DIALOG1"ではなく、 ウィンドウハンドル。コンパイル時に警告かエラーになるだろ。 そして送るメッセージはIDOKではなく、WM_COMMAND。 wParam、lParamの引数を組み立てるのは間違えやすいので、 FORWARD_WM_COMMANDかGET_WM_COMMAND_MPSのマクロに任せておけ。 最後、IDOKだけでなくIDCANCELでもEndDialogすれば、 閉じるボタンでも終了するようになる。 ついでに言うとボタンのIDもIDC_BUTTON1なんかではなく、 OKボタンのIDの値はIDOK (== 1)、 キャンセルボタンのIDの値はIDCANCEL (== 2)にしておくのが常套手段。
>>524 521は言ってないが、たぶんMFC臭いぞ。
>>525 hInstanceとか使ってるから、win32に一票
DialogBoxなんて使ってる時点で、win32でしょ しかし・・・自分はwin32でソフト作るのって、もう10年近くやってないかも DirectXがまだ2位でゲーム作って以来だわ
MFCとwin32の違いも分かってないに3000点
VisualStudio2005に変わってから、色々と戸惑っています。 例えばこんなコードの場合、y=0から始まる文字列と、 y=20から始まるコードの内容を同じにする場合、 コメントの部分をどんな風に変えれば良いのでしょうか? char str[80]; TCHAR str2[80],str3[80]=_T("[]"); RECT rc; GetClientRect(hWnd,&rc); sprintf(str,"[X=%4d,Y=%4d]",rc.right,rc.bottom); swprintf(str2,_T("[X=%4d,Y=%4d]"),rc.right,rc.bottom); TextOut(hdc,0,0,(LPCTSTR)str2,wcslen(str2)); //strspy(str3,str); TextOut(hdc,0,20,(LPCTSTR)str3,wcslen(str3));
>>529 中途半端にTCHARマクロを使うべきではない。
> swprintf(str2,_T("[X=%4d,Y=%4d]"),rc.right,rc.bottom);
swprintfはUnicode専用だから、
TCHARの配列や文字列リテラルを_T()で囲むのであれば、_stprintfを使うべき。
> TextOut(hdc,0,0,(LPCTSTR)str2,wcslen(str2));
str2はTCHARの配列なのだから、wcslenではなく、_tcslenを使うべき。
そして、charとTCHARを混在させると変換が必要になるので、
できるかぎり片方に統一して混在させるべきではない。
どうしても変換したいなら、 _stprintf(str3, _T("%hs"), str) ; かな。
さらに、変換をしない、という選択肢もある。 TextOutA(hdc,0,20,str,strlen(str)) ;
Thunx!! テキストファイルと表示の違いに戸惑っていました。 2005ではマルチバイト文字が標準になったんですね。
違うわ低脳
>>533 ワイド = Unicode
マルチバイト = SJIS
今までヘッダファイル書くとき #ifndef _○○○_H_ #define _○○○_H_ 内容 #endif ってやってたんだけど 今は #pragma once 使うのが流行ってるの?
>>536 開発ターゲットがWindowsのみなら、#pragma once でいいんじゃないかな?
一部のファイルでも、他プラットフォームと共通化の可能性があったりすると、
ソース記述は全体で規約統一しておきたいために、結局従来の書き方をすることに
なったりするけど。
.rcファイルってマイクロソフト専用のフォーマット? これだけ妙な書式で書かれてるもんで
Microsoft専用のフォーマットって表現が微妙だけど、 Windowsアプリケーション固有のリソース定義用のファイル。 フォーマットを決めたのはもちろんMicrosoft。
>>538 Windowsリソーススクリプトだけど、
どこのでも大体共通の書式だと思うよ。
1つのリソーススクリプトファイルを
Borland C++のbrc32とVC++のrcの両方で
コンパイルできるように書いた覚えもある。
>>538 って初心者専用のフォーマット?
これだけ妙なレスが書かれてるもんで
gcc3だと、pragma onceに文句言ってこない
コンパイルするだけでヒーヒーいっとりますよ。 エラーとか引っ切り無しに出てくるし プログラムってむずかしいね。
諦めたらええねん
諦めきれんねん
頑固だねぇ己の力量も弁える事ができないとは
力量以上にほとばしるものがあるねん
早死にするタイプだな
死にたくないねん
#pragmaのいろんな使い方をまとめたHPありませんか?
ありますが、
教えてください double変数をDWORDLONG変数へビット単位でコピーできますか? つまりdouble変数のbit0が1ならDWORDLONGのbit0も0、bit63が1なら DWORDLONGのbit63も1にする動作です。
できます。
556 :
554 :2007/09/07(金) 09:47:44
自己解決しました
アドバイスもらっといて事故解決はないだろ
できるかどうかを知りたいのか、 やり方を知りたいのか、 その区別すらできないのは、 初心者とかそういう以前の問題だな。
初心者より以前なんてない
ある
ない あると思ってるのは初心者だけ
そもそも何もしてない無関係な人は初心者でさえない
そもそも何もしてない無関係な人はこんな所には来ない
つまり、こんなとこには来ない人は初心者でさえない、と
アホすぎw相手するの疲れた
真面目に話をしているのを見かけると、茶化して荒らさずにはいられない、頭が可哀想な人がいますが、スルーしましょう。
マジでそういう話題もう良いから
568 :
名前を付けて保存 :2007/09/07(金) 21:51:04
Visual C++ 2005でMFCを用いたプログラムを始めたいのですが、 「Visual Studio 2005 Academic Edition」でMFCを使うことは可能でしょうか?? 公式ホームページやアマゾンの商品の説明等色々調べてみたのですがそのことに関する記述が見あたらなくて困ってます。 もし、どなたか、お分かりの方がいらしたら教えて頂けないでしょうか??
570 :
名前を付けて保存 :2007/09/07(金) 22:10:48
>>569 親切に教えて下さって有り難うございます。
これで安心して購入できます。
>>559 そういういわゆる初心者より以前を指しているのが
スレタイにある<超初心者>だと俺は思う。
572 :
デフォルトの名無しさん :2007/09/08(土) 00:21:12
MFCなんてもう廃れちゃってんじゃん あえて銭払う必要もなかろう
そう思う君が買わなければいいだけ
>>571 初心者を超えたら初級者じゃないか。
最初の一歩が初心者なのだから、それ以前は有り得ない。
VC++の初心者というのはいいが、 人間として初心者というのはいかがなものか。
言うなら、 VC++の初心者はOK 質問の初心者はNG と。
質問するのは難しいよね。 質問文を書くために問題を切り分けて整理しているうちに、問題の原因が判明することも多々あるわけで。
>>577 それ、良い事じゃないか
俺は、一応初心者スレの場合、変な質問がきたら、聞き返すことにしてるよ
もちろん初心者スレ以外で訳わからん質問は完無視だが
みんなも初心者のころ経験してるだろ?
質問したいんだけど質問したい内容を記述できなくて、もどかしい思いをした経験が
とても初心者な質問なのですが…、VisualStduio2005で、C++言語での開発をしたいと考えています。 言語よりも、VCのプロジェクトの種類で戸惑っています。 MFCアプリケーションとWin32プロジェクトで窓ソフトが作れるようになっていますが、 どちらでソフトを作ったほうが良いのでしょうか。 やりたい事はDirectXを使った3Dプログラミングと、普通の窓ソフト、TCP/IPなどの通信ソフトなのですが…。 ちなみに、手元にある入門本にはMFCについてしか書かれておらず、Win32については触れられていません。 触れられていないと言う事は相当理解が難しいのでしょうか? それともMFCで作る方が今は普通なのでしょうか?
両方やってみて好きな方を選ぶ
>>579 「窓ソフト」とは何か、そういうアプリの種類があるのですか?
「手元にある入門本」は具体的に何ですか?
582 :
579 :2007/09/08(土) 18:08:03
>>581 窓ソフト、GUIアプリケーションのことをそう言ってしまいました。すいません。
具体的に書名を書くと「明快入門 Visual C++2005 ビギナー編」、著者 林晴比古さんの本です。
>>582 林晴比古か。
私の脳内の買ってはいけない著者リストに入ってるなぁ。
入門書を選ぶときに大切なポイントは、
現時点でのスタンダードを解説した本なのか、
過去に出した本を、新しいバージョンのVC++に合わせて手直ししただけで、中身は古いままの本なのか、
見極めること。
もちろん過去の延長線上に現在があるわけで、
以前から変らないことについては、古い本でも構わず、
今では絶版になってしまっている本が、必読として推奨されることもあるし、
定評のある本がアップデートされるのもいいことだとは思う。
でもね、
過去に評判が悪かった本が、
素早く最新バージョンに合わせて手直しすることで、
それなりの販売数を稼いでいるということもあるのですよ。
その本がどうなのかは言わないけどね。
で、本題。
結論は
>>580 と同じになってしまうのだけど、説明すると・・・
まず、MFCとは何か。
一言で言えばWin32APIのC++ラッパー プラスαのライブラリ。
これでわかる? わからなかったら、さらに説明するよ。
どっちを使うべきかは、ケースバイケース。
MFCが便利だと思うなら使えばいいし、
MFCがやることが余計なお世話だと思うなら使わなければいい。
ただし、
MFCが常に最善だとは限らない
MFCはその基本設計が古い
MFC以外にも幾つもの選択肢がある
という理由で、MFCと心中することのないように、気をつけてほしい。
MFCは、MFCの守備範囲内とくにウィザードが対応していることをやるのには便利で素晴らしいと思う。
でも、MFCの守備範囲から外れた途端に、Win32API直叩きとのちゃんぽんになり、MFCの内部構造を
理解しないといけなくなったりする。度重なるバージョンアップがされていて、歴史的な理由や互換性の
ために歪になっている部分もある。そして、MFCは既にVisualStudioの主役ではなくなってしまっている。
ただその後継が.NETなので、 このスレ的にはC++/CLI&WindowsFormsという とても初心者向きとは思えない構成になってしまうのが難しいところだな。
MFCというよりVC自体が主流じゃなくなってると考えるのが正解
林の本だったら、さらっと1冊通してプログラム動かしてみれば感じつかめると思う。 深くやっても実用的なプログラム作れるようにはならないから時間をかけないのがコツ
関係ないが、MFCの本というと ハーバートシルト標準講座MFCは名著だったなぁ win32なら同じくハーバートシルトのc/c++プログラマのためのwindows95 とりあえず、この2冊は今でも本棚に飾ってある
589 :
579 :2007/09/08(土) 20:23:06
>>583-585 詳しい説明ありがとうございます。
作りたいソフト次第でWin32かMFCのプロジェクトを作ってソフトを作るのが最適ということでしょうか。
VS2005は.net開発用に置いておいて、本格的なソフトはボーランドのC++ビルダー辺りで作った方がいいでしょうか。
C++ビルダーはVS2005で言うWin32プロジェクトになると思うのですが、Win32プログラミングに関する本が中々見つからず…。
C++ビルダーの方がRADでGUIも作りやすくコンパイルも早いと聞いたのでC++ビルダーを買ってみようと思います。
もし、よろしければWin32プログラミング、もしくはC++ビルダーでソフトを作るのに適した入門本をご紹介して頂けないでしょうか?
(C++の基本的な文法(ifやdo、例外処理など)は「やさしいC++」 著者 高橋麻奈さんの本を読んでいます。
>>582 の本では文法はあまり詳しく載っていなかったので…)
一般的に、 これ一冊で総合的に入門 なんていう本は、ろくでもない。 ピンで勝負できないから、 特定の状況に特化することで、 なんとか凌ごうとしているからね。 そもそも、 高々一冊の分量で何ができるのか。 どの本だったか忘れたが、 Visual C++によるC++入門 なんていう本があって、 C++入門書としては酷い内容だし、 Visual C++に特化しているわけでもなく、 旧来のprintf/scanfで、GUIなんて片鱗もなく、 タイトルから「VisualC++による」を削っても、 何ら問題なさそうな本だった。
>>589 猫でも分かるプログラミング
win32の本買うなら、このHPみたほうがいい
>>589 まず、自分が作りたいソフトと似た、オープンソースのソフトを探そう。
なるべく自分が目標とするものに近く、有名なものを選ぼう。
そのソフトを作った人は、あなたよりも経験豊富で、色々知ってる。
そういう人が色々考えた上で、言語や開発環境を選んで使ってる。
だから、それと同じ言語・開発環境を真似して使うのがいいと思う。
次に、顔を合わせて指導・相談をしてくれる人を確保すべし。
周囲にいる人によって、かなり違ってきます。良くも悪くも。
> C++ビルダーはVS2005で言うWin32プロジェクトになると思うのですが
C++BuilderでもWin32APIを直に使ってプログラムを書くこともできるけど、ふつうはVCLを使う。
VCLは、Win32とMFCどちらに近いかと言えば後者だけど、MFCよりも遥かに強力で洗練されてる。
そしてVCLを使うなら、C++BuilderよりもDelphiを使ったほうが、よりベターだと思う。
> Win32プログラミングに関する本が中々見つからず…。
必要としている人が少ないということの現われでもあるよ。
PlatformSDK(最近はWindowsSDK)付属のドキュメントやサンプルで事足りたりもするし。
ちなみに、言語の文法 と 言語の使い方のコツ というのは別物だと思ってもいい。
ついでにオブジェクト指向プログラミングの基礎も、C++とは独立した話として勉強したほうがいい。
そもそも、目的を実現する手段として C++ が最適なのかな。
594 :
デフォルトの名無しさん :2007/09/08(土) 21:20:53
アカデミックパックと通常版の違いにはどういったことがありますでしょうか?? アカデミックパックでは制限されている事などはありますか??
前はproがもらえたんだよな
596 :
579 :2007/09/08(土) 21:37:32
C/C++は覚えておいて損をしない言語だと思いC++を使ったソフトの作り方を学ぼうと思ったのですが…。
以前、Delphiを学ぼうと思い(SkypeやShareなどがDelphiで作られているということに驚きました)
Delphiの本(Delphi2005プログラミング Vol1 入門編 著者 日向俊二さん)を購入し、
無料のDelphi開発環境をインストールしたまでは良かったのですが、
パソコンを新たに購入したため、無料の開発環境がインストールできなくなり結局やめてしまいました。(OSがVistaで…)
有償版ならインストールできると思うのですが…。
実行速度もC++並、文法もVB.netをやっている自分には馴染みやすいところもあると思います。
もう一度Delphiをやってみようかと思います。(最近はJaneなどで活気もあり、OpenJaneのソースコードを見れば勉強になるような気もするので)
>>592 オブジェクト指向プログラミングについて今一度勉強してみます。
Win32プログラミングに関する本が少ない、ということについて必要としている人が少ないということはあまり重視する必要はないということだと思うので
それほど気にしないことにします。
とりあえず、Delphiで経験を積んでみたいと思います。
C++はDelphiに飽きた時、勉強してみようと思います。
皆さん、ありがとうございました。
VB.NETやってるなら、VB.NETで作ればいいじゃん。
考えてみれば、VisualStudioに例題やサンプルソース満載の ちゃんとしたマニュアルが付いてくれば、入門書なんて(ry
VC++6.0のStandard版は、マニュアルの代わりにASCIIの本が入ってたよ?
>>599 VSで自分が始めて買ったのはVC4stdだったけど
なんか入ってたな
mdi,sdiの作り方の基本みたいな本、後MFCのポスター
VS2005proにもユーザーズガイドとポスターは入ってた気がする
>>600 確かにサンプルもあるんだけど、なんつーかもうちょっと
面白みが欲しいのよw
ま、MSもその領域には手を出さないことで出版社と共存共栄
ってことなんだろうけど。
でもOSやOfficeなんかでもそうだけど、書店に並ぶ各種解説書
見てると、なんでこのレベルの本に金払わなきゃならんのよって
思うんだよな・・・
マイクロソフト社内には、もっと豊富なサンプルコードがあって、 コンサルティングのサービスを通して個別に提供されたりする。
604 :
デフォルトの名無しさん :2007/09/08(土) 23:03:10
C++はじめて3日目の初心者です 現在日付を表示させるのに time_tを使って表示させようと思っているのですが ビルド時にC3861エラーが出てしまいます エラー error C3861: 'time': 識別子が見つかりませんでした コード #include <stdio.h> #include <time.h> #include "stdafx.h" void MyClass::put_time() { time_t current; struct tm *local; time(¤t); /* 現在の時刻を取得 */ local = localtime(¤t); /* 地方時の構造体に変換 */ printf("%02d時%02d分%02d秒", local->tm_hour, local->tm_min, local->tm_sec); } ビルドでエラーが出ないようにするにはどうしたらいいでしょうか教えてください VS2005使用
timeって何?
>>604 > ビルドでエラーが出ないようにするにはどうしたらいいでしょうか
正しいコードを書く。
以上。
意地悪だが、質問は正確に。
ちなみに、 #include <stdio.h> #include <time.h> #include "stdafx.h" ↑これは、良くない。 stdafx.hは、各ソースファイルの最初の行に書くこと。
608 :
デフォルトの名無しさん :2007/09/08(土) 23:14:15
>>605 timeはコードの中にある
>>604 確かにその回答は正解だ
だが、初心者にはその正しいコードがわからんのだ
>>607 #include "stdafx.h"
これを最初の行に移動したらビルドでエラーが出なくなりました
ありがとうございます。
あほすぎw
初心者でも分かる。アホには分からないの間違い
>>608 > だが、初心者にはその正しいコードがわからんのだ
そういうことではなくて、問題点をきちんと絞り込もう、ってことだよ。
まず第一に、
ビルドのエラーではなく、ビルドの1ステップのコンパイルのエラー
なのだから、コンパイルでエラーが出ると言うべき。
次に、
コンパイラが出しているエラーの内容をちゃんと見よう。
「識別子が見つかりませんでした」が何を意味しているのかわからないのなら、そういう質問をすること。
意味はわかるが、#includeしたtime.hで定義されてるはずなのに、実際には定義されていないのはどうしてなのかわからないなら、そういう質問をすること。
こうやって問題点を絞り込む習慣を付けないと、いつまでたっても力が付かないよ。
かちゅ+Kage使いなんだが、
>>604 のカキコで time(¤t)の
カッコ内が文字化け?してるのは漏れだけ?
化けて出てる字はunicodeでU+00A4のように見える。
アンカーにカーソル合わせると表示されるテキストボックスだと
正しく表示されるのに・・・
613 :
612 :2007/09/08(土) 23:32:50
リロードしたら自分で書いたのも化けてる・・・orz
2ちゃんの掲示板の仕様が変だから 古いブラウザだと化けるんじゃないの?
615 :
612 :2007/09/08(土) 23:45:49
>>614 Kageで延命してるけどかちゅ自体は古いから
そういう事なんだろうな・・・thx
ってか、IE6(エンコードはS-JIS)で見てみたら
やっぱり化けてる。
Operaだと正しく表示・・・ワケワカメw
>>604 プリコンパイル済みヘッダファイルの使用(/Yu)について見ておくといい。
エラーが出たのはコンパイル設定の影響であり、
ソース自体は一応間違ってはいない。
VC++2005でWin32のアプリを作るにはプラットフォームSDKってのを 入れなきゃいけないみたいなんですが プラットフォームSDKってなんですか?
プラットフォームとは、つまり Windows のことを指している SDK は Software Developlement Kit (ソフトウェア開発キット) つまり プラットフォームSDK = Windowsのソフトウェアを開発するためのキット っていうそのまんま
620 :
617 :2007/09/09(日) 02:03:01
Windowsアプリを作るためのライブラリとかが まとめられたものなんですね わかりましたありがとうございます
time(叶)
622 :
デフォルトの名無しさん :2007/09/09(日) 04:05:04
>>43 >
>>42 > すみません、分かりづらいですねorz
> VC++6ではCやC++のファイルを放り込めば、すぐにビルドの処理に持っていけます
> VC++6ではF7がビルドへのショートカットキーです
>
> VC2005Expressでは、VC++6見たいに、C++のファイルを放り込んでもメニューバーにビルド自体がないため、
> ビルドの処理を実行できません。
> 新規プロジェクトを作成するとメニューバーにビルドが表示され、ビルドが実行できます
> ですので、VC2005では一々プロジェクトを作成しないとビルドが出来ないのかと思い、質問させて頂きました。
>
自分も疑問なのですが これは単体で出来ないのですか?
プロジェクトをいちいち作るのではなく
一つのファイルだけをコンパイルして実行したいのです
clでええやん
clとは何でしょうか?
cl.exe
塩素
ファイル単体でのコンパイルをやる方法はないのですか? 以前のヴァージョンのものならできたのですが ちなみに、以前のヴァージョンのものは持っていません 使ったことがあるだけです
>>622 ビルド用に1つプロジェクトを作っておき、
そこにファイルを放り込めばいいじゃないか。
必要なくなったら、プロジェクトからファイルを削除、と。
ひとりwikiのプラグインを作ってみようと思い いろいろサンプル見ながら初めてDLLを作ってみたのですがデバッグ方法がわかりません デバッグ開始を押すと、おそらくDLLを使用するプログラムを求められる?のですが ひとりwikiで配布されているプラグインテスターを指定してデバッグを始めると インクリメンタルリンクが出来ないのでフルリンクにした、や デバッグ情報が無いなどの警告が出て、それを無視して始めると落ちてしまいました。 この場合デバッグを行うには、DLL関数を呼び出すテストプログラムを 自分で作らなければいけないんでしょうか? 後、DLL側で作成された文字列などのポインター変数はDLLを解放?した後に メイン側からアクセスするとやっぱりエラーになるんでしょうか?
ひとりwikiとやらを配布してる人に質問する
>>630 わからないことが多すぎ。
まずはDLL開発の一般論をどこかで勉強したほうがいい。
場当たり的に個別のノウハウを身につけても、泥縄になる恐れあり。
なんだ文字列を変換する関数を1つだけ呼び出すだけか
>>632 DLLについてもっと調べてみます
>>633 ファイル名も引き渡してくれるので色々できそうです
ふと思ったのですがDLLからDLLを呼び出すなんてでき・・
はい、まずはDLLについてちゃんと調べてきます
Googleとかで検索して断片的な情報を得るよりは、 まずは、 MSDNライブラリ等をあたったほうがいいよ。 けっこう美味しい解説があったりするのよ。
636 :
デフォルトの名無しさん :2007/09/09(日) 11:42:01
HDC hDC=GetDC(hwnd); ReleaseDC(hwnd,hDC); if (hDC!=NULL) { MessageBox(hwnd,"hDC!=NULL","Error",MB_OK | MB_ICONSTOP); } これを実行するとメッセージが出るんだけど どこが変なのかな? DCハンドル得る→開放 だから メッセージが出ないと思うんだけど。 もしかしてめちゃくちゃ変なことしてる?
>>636 C言語から勉強しなおそう。
ReleaseDCしても、
関数に値渡ししているから、
hwndやhDCの値は変らない。
638 :
デフォルトの名無しさん :2007/09/09(日) 16:24:27
MFCATLCOMは今後は需要はどうなりそうなんですか? 勉強しようか迷ってます。 今はWin32とJAVAとC#だけできてれば問題ないんですが今後必要になりそうなら勉強しておこうかと思ってます
639 :
デフォルトの名無しさん :2007/09/09(日) 18:15:40
エムエフカトルコム? Windowsが続く限り生き残るんじゃね? .NETのCLRはCOMで実装されてるらしいし… 挫折しないように頑張ってね!
COMをC++で使うのは面倒くせー、 かといってVBは嫌だー、 VJ++ならCOM使うの簡単なんだけど、Sunが横槍入れてあれなんだよなー ってことで、実はC#ってのは、VJ++の後継なんだ。 JavaというとSunがウルサイから、Javaという名前を使わず、 マイクロソフトお得意の、どんどん自分達流に改造したから、 とってもJava臭い文法や、GUIライブラリになったというわけ。
641 :
デフォルトの名無しさん :2007/09/09(日) 20:36:43
禿同
642 :
デフォルトの名無しさん :2007/09/10(月) 08:56:27
○int main(array<System::String ^> ^args) の「^」って何ですか? ○[STAThreadAttribute]って何ですか? ○gcnewって何ですか? ○refって何ですか?
C++/CLIで拡張された言語仕様だろ。C++/CLIスレで聞いて味噌。
てか、普通に文法の話だから、まずMSDNを見ること。これは基本。 それでも分からないなら、質問するときには、何が分からないかを書くこと。
VisualStudioの最新版の発売予定日もう発表されましたか?
646 :
デフォルトの名無しさん :2007/09/11(火) 22:10:03
質問させてください。 VC6.0で、ダイアログA,Bをつくり、AのOKボタンを押すとBが開くようにしました。 ここでBが開いたときにAを閉じるようにしたいのですがそれができません。 ダイアログAのクラスC000、ダイアログBのクラスC001として、 C000.cpp内、 OnOK内に C001 dlg001; dlg001.DoModal(); としているのですが。ここに何か書くのでしょうか?もしくは違うところに。。。 かなり初歩的なことで調べれば出てくると思ったのですが、MSDNのヘルプを見ても何を書いているのかわからなくて。。。EndDialogあたりが怪しそうで、いろいろ試したのですがだめでした。 わけあって今プログラムを見ることができないのですがよろしくお願いします!
自分が乗った枝を切り落とすの?
>>646 OnOKでダイアログBを開くのではなく、
ダイアログAのリターンコードを見て、ダイアログBを開く。
>>646 いくつか方法がないこともないが、一番簡単で近い方法は
ダイアログBを開く直前にダイアログAを非表示にすることだろうな。
>>648 >>649 ありがとうございます。
リターンコードというのがよくわかりませんが、調べてみます。
651 :
648 :2007/09/12(水) 09:12:43
>>650 ちなみに、647さんが最も適切なアドバイスだと思うが、理解できないからスルーしちゃったかな。
ダイアログのリターンコードってのは、CDialog::DoModal() のリターンコードね。
試しに別のプロジェクトを新規作成して、
MFCのウィザードでダイアログベースのスケルトンを生成すると、
CほげほげDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: ダイアログが <OK> で消された時のコードを
// 記述してください。
}
else if (nResponse == IDCANCEL)
{
// TODO: ダイアログが <キャンセル> で消された時のコードを
// 記述してください。
}
なんていうコードが生成されるよん。
652 :
デフォルトの名無しさん :2007/09/12(水) 17:35:49
ポインタ変数 *a の値(ポインタのアドレス値)を int b へ入れて処理をしたいです。 b = (int)a; というソースを書いたところ、 warning C4311: '型キャスト' : ポインタを 'int *' から 'int' へ切り詰めます。 というワーニングになります。 ワーニングがでないキャストの方法ってありますか? データの一部が欠落するのは承知の上です。 よろしくお願いします
#pragma warning(disable:4311) b = (int)a; #pragma warning(default:4311)
>>652 Windowsヘッダ依存で良いなら、
PtrToIntというマクロも用意されている。
656 :
652 :2007/09/12(水) 18:24:06
本当にbはintでいいのか、INT_PTR型でなくていいのか?
どうでもいいけど DWORD_PTR, INT_PTR, UINT_PTR, LONG_PTR, ULONG_PTRとか_PTRがつく型はいろいろあるけど、 全部32bit環境なら32bitで、64bitなら64bitなんだよね?これらの型を区別する意味が分からないが。
みんなlong*だと、指している先の型がわかんないでしょ?
DWORD_PTR、INT_PTR…というのは、それぞれ もともと64bit対応してなかったころのWin32APIで 引数がDWORD(だけどポインタ値やハンドルも許容する場合がある) 引数がUINT(だけどポインタ値やハンドルも許容する場合がある) … というのを64bit対応を契機に機械的に DWORD => DWORD_PTR UNIT => UINT_PTR に置き換えただけなんじゃないの? DWORD_PTRがDWORDのポインタなわけではないし、それ自体に 意味を求めてもしょうがないんじゃ
>>658 そうだねオブジェクトもみんな同じく型のないポインタでさせばいいね。
間違う奴はただの馬鹿だね。
お前だけやってろよw
(; ゚д゚)ポカーン
これは・・・
#pragmaのよく使う機能ってどんなのがある?
pack
parallel
>>664 comment, once, pack、warning かな
#pragma は必要に迫られて使うものなので、一般的に
使われているものかどうかを気にするのは意味がないと思うけど
region, endregion(笑)
スライダに目盛りが表示されません。 SendMessage(GetDlgItem(hWnd, IDC_SLD1), TBM_SETRANGE, (WPARAM)TRUE, MAKELPARAM(0,100)); SendDlgItemMessage(hWnd, IDC_SLD1, TBM_SETLINESIZE, 0, 100L ); SendDlgItemMessage(hWnd, IDC_SLD1, TBM_SETTICFREQ, (WPARAM) 10, 0 ); for(i = 2; i < 10; i++) { SendDlgItemMessage(hWnd, IDC_SLD1, TBM_SETTIC, 0, (LONG)((i * 10)); } トラックバースタイルには TBS_AUTOTICKS を指定しています。がエディタ上でも 目盛りは表示されてません(メモ帳で開くとTBS_NOTICKSが指定されてたので削除しました)
2000以降のOSで、Documents and SettingsのユーザーIDのフォルダの、 アプリケーションのフォルダを作成、又は作ったり、ファイルを作って アクセスしたりするにはどのように行えば良いのでしょうか? レジストリが怪しいと思っているのですが・・・
>>670 アプリケーション用フォルダの位置の取得はSHGetSpecialFolderPathを使う
ファイルの作成、アクセスは自分でやる
これまでC++をCUIで勉強してきてそれなりに慣れたと感じたので VC2005を使ってGUIのプログラムを習得しようと思うのですが フォームアプリケーションを使うのとSDKを使うのと どちらの方がいいでしょうか?
>>669 TBS_AUTOTICKSで自動的に付けられる目盛りが、
TBM_SETLINESIZEの値を基準にしていると予想してみる。
>>672 SDKがお勧め。個人的にはいきなりWTLに突撃するのも面白いと思う。
フォームはC#辺りで慣れてからの方が良い。
C++/CLIも覚えないといけないし。
675 :
デフォルトの名無しさん :2007/09/13(木) 23:10:32
Visual Studio .Net 2002 で 下の簡単なコードがコンパイルできません。 「error C2065: 'printf' : 定義されていない識別子です。」というエラーメッセージです。 コマンドラインで cl xxx.cpp ではコンパイルできます。なぜでしょうか? ---------------------- #include <stdio.h> #include "stdafx.h" main(){ printf("hello"); }
>>675 そういう設定になっているからです。
環境からでも設定を変更すればコンパイルできるようになりますし、
逆にコマンドラインからでもオプションしだいではエラーになるようにできます。
"stdafx.h"のインクルードより前に書いた記述は全て無視される仕様。 #include "stdafx.h"の後に書いてもいいが、 stdafx.hの中に書けば、コンパイル時間短縮になるので、これお薦め。
679 :
675 :2007/09/13(木) 23:20:53
>676 どのように設定を変えればいいのでしょうか? >677 stdafx.h のファイルに #include <stdio.h> をいれましたが、同様のエラーです。
>>679 #include "stdafx.h"
の前の行を削除したか?
ついでに、
main関数の引数・返り値が不正だぞ。
helloと表示するためにprintfを使うのは間違い。
昔のBASICのPRINT文を引きずっている馬鹿の書いた本を参考にするのはヤメレ。
>>675 とりあえずプリコンパイルヘッダを使うのをやめてみたら?
682 :
675 :2007/09/13(木) 23:37:29
削除しました。 コマンドラインでは動くのが、Visual Netの環境だと動かない理由が知りたいのですが・・・
683 :
675 :2007/09/13(木) 23:38:42
>とりあえずプリコンパイルヘッダを使うのをやめてみたら? プリコンパイルヘッダとは? どうすれば、そのようにできますか? 教えて下さい。
超初心者用といえど、池沼を相手にするほど優しくは無い。
685 :
681 :2007/09/13(木) 23:44:43
>>683 ごめん、言葉が違ってた。
正しくは「プリコンパイル済みヘッダー」
場所によっては「プリコンパイル済みのヘッダー」と書かれているかも。
VisualStudio.NET付属のでもいいからMSDNライブラリで検索してみるとか、
目次からVC++の使い方のところを辿って説明のページを見つけるとか、
少しは自分で探そうとしようよ。
687 :
675 :2007/09/13(木) 23:51:36
プロジェクトのプロパティで プリコンパイル済みヘッダーを使用しない を選択しましたが、今度は LIBCD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。 Debug/test2.exe : fatal error LNK1120: 外部参照 1 が未解決です。 というエラーになってしまいました。
プロジェクト作り直せ。 今度はWin32コンソールアプリケーションのプロジェクトを選べ。
>>687 プロジェクトを作るとき、ウィザードで何を選んだ?
空のプロジェクトだとえすp
691 :
675 :2007/09/13(木) 23:56:28
新規のプロジェクトで選択できるもののなかに Win32コンソールアプリケーション はありません。先ほどはWin32プロジェクト を選んだのですが、これがいけなかったのでしょうか?
プロジェクト作らずに、 VisualStudio.NETのアイコンにソースドロップして起動しビルド。 プロジェクト作りますかには「はい」と答える。 これでどう?
>>691 VS.NET 2002は、もうアンインストールしちゃったから確認できないけどさ、
2003には、Win32コンソールアプリケーションがあるぞ。
694 :
669 :2007/09/14(金) 17:27:49
色々試してみましたがVirtualPC上の98SEにVS6をインスコして試したら正常に目盛り 付きました。XP上では使わない方がいいということでしょうか。
.NET Framework使わないGUIアプリ作るときどうしますか。 WinAPI使ってごりごり書きますか。 難しそうでふんぎり付かないので良い方法ありますか。
馬鹿には無理だから
いえあなたの答えは私の質問に間違っています。 そういう事を聞いているのではなくて。 VCでより効率的なGUIアプリケーションの開発方法が聞きたいことです。
楽したかったらVC以外を使うのが普通
無理なものは無理 いさぎよくあきらめよう
VBなら2〜3行でできることがVCだと数100行だったりするし あれこれ考えるより先に手が動くようじゃないとプログラムが完成しない。
ATL/WTLとかオヌヌメだよ MFCより数倍効率いいよ 他のオープンソースのライブラリも併用すれば.NET Frameworkを超えるよ でも、全C++使いの2割程度にしか理解できないようなコードになるのが欠点だよ
ありがとうございます。 便利なものが色々あるのですね。 考えるより手を動かすを励んでみます。
>>701 ATL3.0の頃から、どれくらい進化して、使えるものになったの?
Windows専用ではないので同列に比較できないけど、wxWidgetsはどうですか?
マイクロソフトはDelphiの神様を引き抜いてVBチームに入れるだけでなく、
VCLのライセンスを買って、VC++に組込んで欲しいわ、ほんとに。
704 :
デフォルトの名無しさん :2007/09/15(土) 00:28:29
VCLなんて鼻くそじゃん あんなもの買い取るバカいねーよ あの程度なら自作できるっちゅーねん
自作できるといっても、自作するのには時間がかかるだろう。
買えばソースついてくるから自作といってぱくればよいのだ
707 :
デフォルトの名無しさん :2007/09/15(土) 19:28:00
ネットに繋いでないと Platform SDKって インストールできないんですか? (´・ω・`)
>>707 DVDのISOイメージも配布されている。
SDKダウンロードページを「ISO」で検索しる。
そんなことはない
710 :
デフォルトの名無しさん :2007/09/15(土) 19:47:04
途中経過のSTGのソースアップしたらいじめてくれますか。
バッチコーイ
712 :
デフォルトの名無しさん :2007/09/15(土) 19:58:53
>>711 ごめんC++のスレに書き込むつもりだったのにVisualがついてた
713 :
デフォルトの名無しさん :2007/09/15(土) 20:08:30
なんだゴラ!
714 :
デフォルトの名無しさん :2007/09/15(土) 20:10:31
さぁーせぇーん
ってゆーか
716 :
デフォルトの名無しさん :2007/09/16(日) 13:20:27
どのへんがVisualなのかがいまだに分からん
717 :
デフォルトの名無しさん :2007/09/16(日) 13:26:21
ダイアログエディタ
でもコードエディタはすばらしい。
719 :
デフォルトの名無しさん :2007/09/16(日) 15:22:01
で、Platform SDKをWeb経由以外でインストールするには いったいどうしたらいいの? (´・ω・`)
すみません、MFCで書かれたプログラムをexeに変身させたいんで VC2005++ExpressでMFCを使えるようにする裏技教えてください。
評価版からファイル取ってくる
コンパイルだけならSDK入れていくつか設定すれば出来る。 IDEのサポートはないけどね。
>>722 >いくつか設定 について詳しく解りやすく解説お願いします。
IDEサポートがないとどうやってexeを作るのですか?
>>721 評価版のどのファイルを持ってくるんですか?
>>723 サポートはコーディングのためだろ
コンパイルだけならそのままいける
MFCで書かれたプログラムならMFC入れないと無理
VS2005のSTD版を買ってくるのが一番早いし面倒もない。
>>719 MicrosoftダウンロードセンターからISOイメージを探せ
728 :
デフォルトの名無しさん :2007/09/16(日) 16:53:30
で、どうすればいいの? (´・ω・`)
なにが?
ExpressでF1押したときExpress用のヘルプが呼ばれるんだけど Express用ヘルプじゃなくてローカルの完全版ヘルプを呼ぶ方法教えて
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の内容を表示させるとエラーに なります。 なにか解決方法をご存知の方がいらっしゃったらだったらご教授ください。 よろしくお願いします。
VC++5.0使ってていまだに超初心者なの?
733 :
デフォルトの名無しさん :2007/09/16(日) 17:25:15
他人に見せても恥ずかしくないソフトが書けないうちは超初心者では?
公開して恥ずかしくないレベルが書けたら上級者
>>731 とりあえずVC++5.0なんざ今更使うな。
業務で必要なら、Win2000とのマルチブート環境でも用意しろ。
>>720 教えるの面倒くさいから、代わりにビルドしてやっから、ソースupしてみ。
>>723 そんなこともわからないなら、金を出して製品版のVC++を買おう。
736 :
デフォルトの名無しさん :2007/09/16(日) 20:02:16
>>719 初期のマイクロソフトには「泳げないやつは沈め」って言葉があったそうだよ。
>>720 Visual Studio 2005 Professional か Team Suite の評価版いれて
ビルドすればいいだけ。
ビルドしたものに制限はつかないはず(たぶん)。
金出して買ったアカデミックが商用利用不可で、無償で配られてるEEが商用利用可ってどういうこと?
>>737 内容が違うでしょう。
自分には違いが関係ないなら、アカデミック買わずに、Expressで十分。
739 :
デフォルトの名無しさん :2007/09/16(日) 20:36:17
740 :
734 :2007/09/16(日) 22:03:20
俺にとってはそうなんだよヽ(`Д´)ノ オープンソースのコードを見てると、自分の力不足を痛感するんだよ……
741 :
デフォルトの名無しさん :2007/09/16(日) 23:01:55
俺は、今までコンパイルエラーを1回も出した事が無い! 上級者とは、俺レベルの人を指す
dt=$.split(' \n');dt[dt.length]='';for(i=0;undefined!=dt[i];i+=2){write(dt[i-i%2+1].replace('jp.','').replace('www.',''));br();write(dt[i-i%2]);br();}
>>741 さては1回もコンパイルしたことがないという落ちだな。
745 :
デフォルトの名無しさん :2007/09/17(月) 03:27:06
リソースに24bits/pxのJPGファイルを"JPG"リソースとして追加してビルドすると、 jpgファイルが8bits/pxのBitmapに変換されてしまいます。 何が原因でしょうか?それとも仕様でしょうか? ・JPGはリソースとして追加しただけで処理は行っていません ・いくつかの作成ソフト、画質、サイズのJPGについて確認しました。 ・GIFはもとから8bits/pxですがこれも同様に8bits/pxのBitmapに変換されます。 ・PNGは問題ありませんでした。 ・リソースの画像を読み込んでGDI+使って表示させる練習をしています。 VisualStudio2005 Pro Ver.8.0.50727.762 - Visual C++ SP1 Windows XP Home SP2
746 :
デフォルトの名無しさん :2007/09/17(月) 03:52:22
>>719 お前、OSが割れもんだからそんなこと聞きに来たクズだろ?w
747 :
デフォルトの名無しさん :2007/09/17(月) 04:02:00
OSを金出してまで欲しいと思うヲタクではないんで割れですが、何か?
748 :
デフォルトの名無しさん :2007/09/17(月) 04:04:11
買えよ ライセンスがバッティングしたらネットワークからアップデート関連なにも落とせないし普通に不便だろ 金額分の価値あると思うぜ
750 :
デフォルトの名無しさん :2007/09/17(月) 05:03:19
この中に貧乏人、歪んだ共産主義者、ただの反社会性異常人格者が居たら私のところに来なさい、以上。
752 :
デフォルトの名無しさん :2007/09/17(月) 12:37:19
ウラー
753 :
720 :2007/09/17(月) 14:52:19
>>736 アニキ、そんな手があったのか。やっぱアニキは頭いいな。
>>745 ど初心者、俺の基地外レス
jpgデータをバイナリリソースとして追加したら良いんじゃねー
そして、それをjpgとして扱う。
755 :
デフォルトの名無しさん :2007/09/17(月) 18:56:42
Code ProjectにあるCXXXExitControlを使おうと思うとViewは何を継承すればいいのですか? ダイアログベースでなきゃいけないんですかね?
何でもいいよ
757 :
745 :2007/09/17(月) 19:19:41
>>753 >jpgデータをバイナリリソースとして追加したら良いんじゃねー
>そして、それをjpgとして扱う。
拡張子消してみろってことかな?確かにそれならできる。
resource.hとhoge.rcに手書きで追加した場合も正常に動作する。
インポートダイアログ見る限りjpgとgifはビットマップと同列になってて
VCからリソースとして追加するとビットマップになるみたい。
今のところjpgとかgifをリソースで使うことは無いから別にいいんだけどなんかすごい気になる。
>>754 ありがとう。でもダイアログも手書きで作れますので。
758 :
デフォルトの名無しさん :2007/09/17(月) 19:26:58
>>756 CViewを選んだ場合、CXXXExitControlを表示するにはどうするんですか?
C/C++の文法はわかるレベルです、ただ、MFCのGUIの作成が全く分かりません。
C#みたく、フォームにポトペタできないんで非常に難しく感じています。
759 :
デフォルトの名無しさん :2007/09/17(月) 19:33:57
>>757 リソースエディタからカスタムリソースで追加してrc保存しただけでこうなるね。なんだこれ?
>758 Create
>>759 APIレベルでサポートしている画像はbitmapだけだから、全ての画像はbitmap(DIB)に変換した
ものをリソースとして持つんじゃないと**妄想**してみる
762 :
デフォルトの名無しさん :2007/09/17(月) 20:15:30
今日からVC++やり始めたんだけど、ずっとやりっぱなしで 気が付いたら自動生成されたところを除いても600行以上書いてた 今までに書いた一番長いプログラムでも1500行ぐらい(C言語で多分数ヶ月かけて書いた)なのに 1日でこんなに書いたの初めてだわ めっちゃ面白い やっぱCUIとGUIじゃ達成感とかが違いまくるな
763 :
デフォルトの名無しさん :2007/09/17(月) 20:18:25
最高に頭の悪いレスを見た
764 :
デフォルトの名無しさん :2007/09/17(月) 21:30:42
バイナリ見た感じリソースエディタでインポートした時点でビットマップ変換されている予感。
765 :
デフォルトの名無しさん :2007/09/17(月) 23:19:28
ソリューションエクスプローラというか プロパティウィンドウというか とにかく、そこのフォントを変えたいんですけど 設定の表示欄的にはあれは何て名前なんですか? (´・ω・`)
ワークスペース?
767 :
デフォルトの名無しさん :2007/09/18(火) 00:18:39
項目に無ーい‥ (´・ω・`)
2003だけど、「ダイアログおよびツールウィンドウ」。 しかしこれ色んなところが変わるな。
769 :
デフォルトの名無しさん :2007/09/18(火) 00:53:10
CCustomEdit m_CEdit; CHogeView::CHogeView内で RECT rect; GetClientRect(&rect); m_CEdit.Create(WS_CHILD | WS_VISIBLE,rect,this,9999); を実行するとCreateの個所でAssertダイアログが表示されます。 やりたいことは、CCustomEdit というCEditから派生されたコントロールをViewとして使いたいです
>>769 OnCreateで作成する
OnSizeでサイズを再調整するのを忘れないように
OnCreateの前にもOnSizeが呼ばれるので注意
771 :
デフォルトの名無しさん :2007/09/18(火) 23:09:05
>>770 OnCreate?
Createをオーバーライドしました。
RECT ClientRect;
GetClientRect(&ClientRect);
m_CEdit.Create(WS_CHILD | WS_VISIBLE,ClientRect,this,9999);
で実行しましたが、エディットコントロールがViewに配置されているようには見えません。
いや〜VC++ってホントに難しいですね
けど、ネイティブへの憧れがあるからがんばりますのでご助言願います。
猫でも分かるSDK18章のソースをコピペしてリソースも画面を参考に作ったのですが コンボボックスがドロップダウンしません。あれはコードを書かなくてもドロップダウンする のでしょうか。
だからOnSizeで再調整って書いておいたのに(´・ω・`) その作り方だとサイズは0,0になるけど、 コントロール自体はきちんと作成されているからSpy++で確認してみて。
あと wc.hbrBackground = (HBRUSH)(WHITE_BRUSH); だとクライアント領域が透けて下がみえるので本を参考に wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); に直しましたが本がなかったらお手上げでした。
WHITE_BRUSHはGetStockObjectと組み合わせるための値だな。
>>772 コモンコントロール6.0より前では、リスト内容が無くてもドロップダウンされていた。
XP+テーマ適用の6.0以降ではリスト内容に依存するようになるため、そういう動作になる。
アイテムさえ追加されればドロップダウンされるので、慌てる必要はない。
単にコンボボックスの高さがデフォルトのままのせいでした。失礼しました。
777 :
デフォルトの名無しさん :2007/09/19(水) 15:38:00
今さっきまで普通にいじることができた、リソースが 「!読み込めませんでした」 となって、操作できなくなってしまったんですが、どうしたら直りますか? 初歩的な質問かもしれませんが、よろしくお願いします。
リソースビューで? rcファイル自体を別の形式(テキストとか)で開いている、 ファイルの記述にエラーがある、とかかなあ?
時計の文字盤(まだ時間の目盛りだけ)をウインドウに書こうとしているのですが うまくいきません。WM_PAINTが来たらDrawTicks(hWnd, 50)を呼び出してますが 0°の位置(3時)の目盛りしか表示されません。ソースは次に示します。
void DrawTicks(HWND hWnd, int r) { double s; hWnd = hWnd; for(s = 0.0; s < 360.0; s += 30.0) { DrawTick(hWnd, s, r); } return; } void DrawTick(HWND hWnd, double s, int r) { HDC hDC; PAINTSTRUCT ps; int x, y; hDC = BeginPaint(hWnd, &ps); x = (int)((r - 5) * cos(DegToRad(s))); y = (int)((r - 5) * sin(DegToRad(s))); MoveToEx(hDC, x + 50, y + 50, NULL); x = (int)(r * cos(DegToRad(s))); y = (int)(r * sin(DegToRad(s))); LineTo(hDC, x + 50, y + 50); EndPaint(hWnd, &ps); return; }
よろしくお願いします。
BeginPaint EndPaintしたら前に書いたやつ消えるような気がするけど
>>779 BeginPaintは更新領域をクリッピング領域に変換、
EndPaintは更新領域を全てクリアする。
よって、二回目以降のDrawTickは全てクリップされて実際には描画されない。
BeginPaintとEndPaintは、
本来WM_PAINTハンドラの最初と最後に一回ずつ呼び出して使う。
DirectShowフィルタを作製しているんですが、この間までできていたビルドができなくなって しまいました。 以下のようなエラーがでてしまいます。 c:\program files\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(76) : error C2504: 'IReferenceClockTimerControl' : 定義されていない基本クラスが宣言されています。 最後に成功したときから、プロジェクトの内容、設定ともに変更していないはずなのですが・・・。 こういう場合、原因としてどこを疑えばイイんでしょうか?
786 :
779 :2007/09/23(日) 13:19:22
ご指摘の点修正しましたら目盛り表示されました。ありがとうございます。
とりあえずリビルド
788 :
785 :2007/09/25(火) 07:38:23
解決しました。 Dshow.hファイルが複数あり、オプションでWindowsSDKのインクルードフォルダの 優先順位を上げてやればビルドできるようになりました。 それまではDirectX9.0のDShow.hがビルド時に参照されてしまっていたのが問題 だったようです。
WPARAM型の比較って↓こんな感じであってますか? if ( a == 5 ) { iroiro(); } aがWPARAM型変数、環境はWin32です。
>>789 メッセージの種類による。
値を切り出すのにマクロが用意されている場合は、それの使用を推奨。
特に無い場合は、普通に比較なりすればいいと思う。
TCHARをSJISコードに変換する方法は無いでしょうか? TCHARをそのままファイルにテキスト出力しようとすると、 アルファベットの部分は変換されずに出力されますが、 日本語の部分は???に変換されます。
TCHARは漢字コードを規定していません。
>>792 そのまま出力したら、コンパイル時の設定に従って
UTF-16LEかShift_JIS(日本語なら)になるはずだが。
795 :
792 :2007/09/30(日) 11:22:28
ちなみに、ファイル出力に使用した命令は_ftprintfです。 コンパイルの設定はVisual Stdio2005のデフォルトなので、UTF-16LEかと思われます。 OSはWindows2000のSP4を用いています。
>>792 _tsetlocale(LC_ALL, _T(""));
プログラム開始時はCロケールなので、
Unicode->ANSI変換の際、日本語等は全て変換不可文字として扱われる。
全角空白がコメント前に紛れ込んでいたというおち テキストでなく画像なところが怪しい
>>798 ウホッ。。ホントだ。間隔入れ直したらあっさりコンパイルできますた。
ありがとうございました。
800 :
デフォルトの名無しさん :2007/10/04(木) 19:32:20
それであっている。 なお、(3)では別途ランタイムが要らない代わりに、 実行ファイルの大きさが膨れやすいことに注意。 許容範囲かどうかは自分で試すこと。
warning C4996: 'strcat' が古い形式として宣言されました(ry のwarningはどうやったら抑制できるでしょうか? ぐぐって、#define _CRT_SECURE_NO_DEPRECATE を先頭でやってみましたがダメでした。 ちなみに自分で書いたソースではなく、本のCDに入ってたdxutil.cppで出ます。 無視してもいいのですが、あまりに大量に出るので…。
>>802 先頭ってどのファイルの先頭?
もし、プロジェクトを作っていてstdafx.hがあったら、
stdafx.hの先頭でないと駄目だよ。
いろいろやってみて、warningが出る全てのcppの先頭に書いたら出なくなりました。 #includeよりも前に書かないとダメなのね。
プロジェクトプロパティでプリプロセッサ定義しちゃいなYO
Visual C++ 6.0でMFC ActiveXコントロールを作成しています。 テキストボックスを拡張したタイプです。 WM_DROPFILESイベントでOnDropFilesメソッドを作ったのですが IEでこのコンポーネントを使った場合に、このイベントが発生してくれません。 VB6.0のフォームに貼り付けると問題ありません。 IEでもファイルのドロップイベントが発生するようにするためには どうしたらよいでしょうか? 申し訳ありませんがよろしくお願いいたします。
>>806 DragAcceptFiles();
とか?
>>807 ありがとうございます。
そのコードは記述しております。VBのフォームに貼り付けた場合は
イベントが発生しているので問題ないかと思います。
どうやらいくつかのイベントはIE(コンテナ?)が処理してしまって
ActiveXコントロールのほうには来てくれないようです。
http://www.hi-ho.ne.jp/babaq/bfup.html やりたいのは↑みたいなことなのですが
これはリストボックスにドラッグできますので
できないということはないはずなのですが・・・
>>801 しかし、VC++2005SP1のランタイムを入れてるやつなんて
ほとんどいないという罠
810 :
デフォルトの名無しさん :2007/10/06(土) 17:03:57
>>809 自分の環境では Visual Studio 2005 Professional を
入れてしまってるから検証しようがないんですが、
.NET Framework 2.0 の再配布可能パッケージに、
Visual C++ 2005 SP1 の再配布可能パッケージに含まれる
DLLの一部が含まれてるなんてことはないんですかねぇ。
さすがに両方入れておいてなんてなかなか言えないなぁ。
自分は C++ でも C++/CLI でもプログラム書くもんで。
なんだそれ 調べりゃわかることをくどくど質問するな
なんだそれ 質問すりゃわかることをくどくど調べるな
813 :
デフォルトの名無しさん :2007/10/06(土) 18:05:38
くだすれなんだから、 くだくだ質問してもいいじゃない。 おーい、やまだくん、ざぶとん1まい
すいませんホントにくだらない質問なので申し訳ないのですが マクロについて聞かせてください。 #define GET_FRAGMENT_PARAM(name) \ myCgFragmentParam_##name = \ cgGetNamedParameter(myCgFragmentProgram, #name); \ checkForCgError("could not get " #name " parameter"); このようなマクロがあったときに \ で複数行にすることはわかったのですが その後の##nameと#nameの違いと意味について教えてください。
すいません…814に加えて #define MAT(m,r,c) (m)[(r)*4+(c)] これは1次元配列の(r)*4+(c)を参照する、ということなのでしょうか・・・ こういう表現の仕方に今まで触れていなかったので混乱してしまって
>>815 ブレークポイントで確認して値見て見ればいいじゃん
おっしゃるとおりです そういうことまで聴いてしまってすいませんでした あと、ここはVCスレだったのですね…他で伺うことにします。
猫でもわかるに 当ホーム・ページの一部または全部を無断で複写、複製、転載あるいはコンピュータ等のファイルに保存することを禁じます。 って記載されたんだけどどういうこと?本文にソースを入力して保存しましょうって書いてる ところもあるんだけど。
猫なんか見るのやめて本買えば?
820 :
デフォルトの名無しさん :2007/10/06(土) 22:51:50
>>818 「無断で・・・することを禁じます。」って書いてあるんでしょ?
「本文にソースを入力して保存しましょうって書いてる」のならば、
それは「無断」ではなく、許可を得てやってることになるから問題ないのでは?
>>819 まだ始めたばっかりだしモノになるかわからないから最初は猫に限らず無料の解説サイト
のがいいかと思いまして。といっても、本は何冊か持ってますけどね。
>>820 なるほど、そう考えれば矛盾はないことになるのかな。
すいません質問以前のVisual Studioインストールについての質問なんですが、 WindowsMeへのインストール出来るVisual Studio(Visual C)ってあるんでしょうか? 色々調べたけどWindows2000なら対応しているものもあるのですが、 Meだと色々制限あるようでよくわかりません。 そんなに機能は求めなくて、C言語が実行できる環境が欲しいだけなのですが、どなたか回答お願いします。
823 :
デフォルトの名無しさん :2007/10/07(日) 11:03:38
>>822 ボーランドC++
BCC developerがいいよ
無料
cygwin + gcc はだめだろうか。
VCで拡張子が違うファイルを Cと同じように編集したいんだけど そういう設定ってどこかにないかな? たとえば .dx とか拡張子があったら それをCと同じように色つけたりさせていじくりたいの
>>814 トークン連結演算子と文字列化演算子でググれ。
>>825 ツール - オプション - テキストエディタ - ファイル拡張子
>>810 VirtualPCかVMwareくらい使って、簡単に検証する環境を用意したほうがいい。
>>814 マニュアルを見るか、プリプロセッサの出力を見ろ。
>>815 マクロはマクロでしかなく、そのマクロを使って初めて、コードに化ける。
マクロの引数に何が渡されるのか分からない状態では、何とも言えぬ。
>>821 無料の解説サイトは、しょせんは無料。
プロのインストラクターは、ただで教えたりはしない。
一部の人達が市販本を書いてくれているので、
それを読むべし。
>>822 WindowsMeに固執する理由がなければ、Windows2000もしくはXPの環境を用意すべき。
830 :
デフォルトの名無しさん :2007/10/09(火) 20:19:37
>>830 手順を手取り足取り教えろってか? 逝ってよし。
しかも、Warez関連だな。逝ってよし。
自分で1からコードを書いてDLLを作って、
基本的なノウハウを身につけてから出直したほうがいい。
使ってる開発環境も分からんのでは何とも言えまへんなぁ。
833 :
830 :2007/10/09(火) 20:46:55
>>831 超初心者質問スレと聞いてきたのですがさすがにレベルが低すぎましたか。
わかりました。自力でがんばってみます。
後、Peer to Peer=Warezと言う考えは改めたほうがいいです^^;
>>830 へ?何も考えずに Visual C++ 2005 でビルドできるけど?
ソリューションのあるディレクトリの一つ上の階層に
dll ができるし、インポートライブラリは release 以下にできる。
そのへんはプロジェクトのプロパティ見ればわかる。
835 :
デフォルトの名無しさん :2007/10/09(火) 21:04:05
>>834 最初からあったので生成されていないと勘違いしていました。
ありがとうございました。
>>833 > 超初心者質問スレと聞いてきたのですがさすがにレベルが低すぎましたか。
そういう問題じゃぁない。
VC++の超初心者はOKだが、
質問の超初心者はNGなんだよ。
> 後、Peer to Peer=Warezと言う考えは改めたほうがいいです^^;
なんだその口の利き方は。気をつけろ。
そのDLLはwarezと関係ないのか?
不正に入手したゲームをネット対戦するためのDLLじゃないか?
837 :
デフォルトの名無しさん :2007/10/09(火) 21:40:57
ボタンを押して画像をPictureBoxに表示させたいのですが、 C++にはC#のように、 this.pictureBox1.Image = Image.FromFile(@"C:\sample.bmp"); といったふうに簡単にはできないのでしょうか?
馬鹿でも使えるようなライブラリがあったと思う
this->Image1->Picture->LoadFromFile("hage.bmp");
WinInet.dllを使ってHTTPでファイルをアップロードする サンプルをください!
841 :
デフォルトの名無しさん :2007/10/09(火) 22:01:43
>>839 それはBuilderの書き方ではないでしょうか?
> そのDLLはwarezと関係ないのか? > 不正に入手したゲームをネット対戦するためのDLLじゃないか? 少なくともここはそれ専用の質問スレではないのでよそで質問してください。 ソフ板かム板のスレ立てるまでもない〜で誘導してもらっても良いかもしれません。 それと言葉使いには気をつけましょう。 気に入らない質問・言葉使いの悪い質問の場合、回答者によっては回答を控えることも考えられます。 より良い回答をもらうためにも言葉使いには気をつけた方が無難です。 どこの質問スレでもそうですが回答側が絶対、と思われてる人もいるのでなおさらです。 もちろん質問者を主と考える回答者もいますが全部が全部そうとは限らないので気をつけてください。 質問者に一方的な敬語を要求し、回答者は威圧的な口語で構わないという雰囲気があるスレでは特に気をつけてください。
>>840 おまいみたいな面倒臭がりには、System.Net.WebClient.UploadFileで十分だ。
wininetに拘るなら、HTTP絡みのRFCを一通り読め。
自己解決しました pictureBox1->image=System::Drawing::Image::FromFile("C:\\Sample.jpg"); でよかったんですね なんかすごくめんどくさいです
>>845 最初の質問時にC++/CLIと書いておくこと。これ非常に重要。
>>846 そんなこと言ったらだめだよ
>>836 さんに「なんだその口の利き方は。気をつけろ。」って怒られちゃうよ
なんか殺伐としてて、(・∀・)イイ!!
とりあえず割れみたいだから通報はしておいたよ
そういう問題じゃぁない。
852 :
デフォルトの名無しさん :2007/10/11(木) 15:13:38
>>836 明らかに質問者の口の利き方はいい(VC++にはありえないほど初心者みたいだが)
最近じゃお礼も言わないでいくやつや、質問に答えてくれないから死ねとかいうやつもいるしな。
逆に回答者のほうが口の聞き方から小学生みたいに見えるぞ。
DLLみたかぎり割れとはまったく関係ないようだしな。
P2Pはすばらしい通信方式だからすぐ割れと決め付けるのはよくない。
最近一部で人気のスカイプもP2Pを使ってるおかげだ。
sourceforgeだったら作って配布してる人に直接聞けばいいじゃない ファイルだけもらって別の掲示板で質問するんじゃ配布してる人に失礼だし、 ここはサポートセンターじゃないよ
一番の癌は逆切れる質問者と余裕のない回答者である。 〜ニーチェ〜
>>852 > DLLみたかぎり割れとはまったく関係ないようだしな。
ゲーム機エミュレータで通信対戦をするのに特化したDLLだよ。
> P2Pはすばらしい通信方式だからすぐ割れと決め付けるのはよくない。
TCP/IPが産まれたときから、ピア-to-ピア で通信するのが当たり前なのだが。
いまさらP2Pなんて言う連中は、数十年も昔の考え方のままだね。
> TCP/IPが産まれたときから、ピア-to-ピア で通信するのが当たり前なのだが。 > いまさらP2Pなんて言う連中は、数十年も昔の考え方のままだね。 なるほど、ということはやっぱり「Peer to Peer=Warezと言う考えは改めたほうがいいです」 てのは間違ってなかったんだな。
質問者は簡潔に言うと
無料配布されているソースを(VC++で)コンパイルするにはどうすればいいのか?
で、試したことは書いてあるし結局ただの勘違いだったんだから
>>834 のような回答すればいいんじゃないか。
URLはただの参考だし
くだ質スレで回答者だからって偉そうにしてるやつはおかしい。
>>856 誰もP2P=Warezだなんて言ってないな。
ゲーム機エミュレータだからwarez関連なんだろ。
>>857 回答者だからではなく、キツい口調で言わないと分からない人が相手だから、キツい口調にしてる。
859 :
デフォルトの名無しさん :2007/10/11(木) 17:33:23
> 回答者だからではなく、キツい口調で言わないと分からない人が相手だから、キツい口調にしてる。
860 :
↑ :2007/10/11(木) 17:34:11
なんだその口の利き方は。気をつけろ。
甘えきった質問者にはビシーッと言ってやらにゃぁな。
>そういう問題じゃぁない。 >VC++の超初心者はOKだが、 >質問の超初心者はNGなんだよ。 > >そのDLLはwarezと関係ないのか? >不正に入手したゲームをネット対戦するためのDLLじゃないか? これは問題ないと思うが >なんだその口の利き方は。気をつけろ。 これはキツい口調とかそれ以前に自分が偉いと思ってる小学生みたいじゃねw
そういう問題じゃぁない。 VC++の超初心者・質問の初心者はOKだが、 逆切れする超初心者はNGなんだよ。
うあああああああああああああああああああああああ!!!!!!! ぎゃあああああああああああああああああ!!!!!!!!1
おまえらなんかprintf関数で挫折しろ
> >なんだその口の利き方は。気をつけろ。 > これはキツい口調とかそれ以前に自分が偉いと思ってる小学生みたいじゃねw 確かにね。 エスパー何とかって質問スレのテンプレの意図を汲むと 余裕のない回答者も嫌われる質問者と同じくらいうざいね。
安易に答えを教えて甘やかさないのは、 真に余裕があって優しい先輩なのだが。
そういう人がいるとすれば少なくとも2種類あるね。 ググれっていう人と答えは教えないけど調べ方を教える人。
ググれは調べ方だろう・・・。常識的に考えて・・・。
今回の消防は割れ野郎だって確定してるんだし引っ張る理由はなんなの?>ALL
ググれ
ヤフーでググりました
なぜに検索のことをググるというんですか? yahooでもinfoでもどこで検索しても同じですよ
俺は真に余裕があって優しい先輩だから教えてやるよ ググれ
ググればいいってわけでもないぞ。 基礎はマニュアルや参考書を読んで勉強すべき。 ググったけど、わかりませんでした という相談を受けて、 たりめーだ、マニュアルのすぐわかるところに書いてあるぞ。 だから誰もWebで解説したりブログに書いたりしねーんだよ。 と怒鳴ることも多々。
>>873 油性フェルトペンのことを「マジック」
ステープラーのことを「ホッチキス」
セロハンテープのことを「セロテープ」
コピーのことを「ゼロックス」
商標の一般名詞化ってやつ。
だからなぜ、商標を指定するのかと聞いているのです
>>878 代名詞だからさ。
そんくらい、わかれよ。
mimeのboundary文字列を生成したいのですが どうやって生成するのがお勧めでしょうか?
VC++でGUIの作り方がさっぱりわかりません。 テキストエディタを作る場合はやはりCEditViewを選択するんでしょうか?
>>881 しっかりしたものを作りたいならCEditでは使い物にならない。
試しに「こんなもんか」程度のものを作りたいならご自由に。
エディットコントロールすら使えないやつは問題外
CComPtr<IWebBrowser2> でエラーが出ます。何かインクルードしないといけないようですが 何をインクルードすればよいでしょうか?
MSDNに書いてあるし 直接インクルードファイル検索してもいいし ネットで検索してもいいし
>>887 自分が何をやっているのか理解せずにコピペするなよ。
だいたい、部分的に要点だけ書いたブログ記事を見て、
それで自分でプログラムが書けないのなら、前提知識が
なさすぎるってことだよ。いまは諦めな。
>>887 あんたアフォですか?
どう実装すればって、そんなのはどういう動作を期待しているかわかるおまえしか
わからんだろ?
>>888 , 889
すみません。
頭を使うのは苦手でして・・・
またほかからコピペしてみたら イベントが発生したっぽいです。 m_pWebBrowser = GetIeBrowser(hWnd); com_event_sink<CIESink> sink; HRESULT hr; hr = sink.create(); hr = sink->DispEventAdvise(m_pWebBrowser); でも例外エラーっぽく落ちます。 なぜでしょう?
うひょー できました。 m_pWebBrowser = GetIeBrowser(hWnd); com_event_sink<CIESink> sink; HRESULT hr; hr = sink.create(); hr = sink->AdviseToIE((CComPtr<IUnknown>)m_pWebBrowser, this->m_hWnd); 意味はさっぱりわかりませんがw
トークンのはじめに _ があったり、トークンの中に __ があるとC++の規格上アウトらしいんですが、 なんでコンパイルエラーにならないんだよおおおおおおおおおお
ユーザのコードかそうでないか判断するの('A`)マンドクセ
質問('A`)ヴァー 環境 : VC++2005Express、VCS2005Express、WinXPHome やりたいこと : C++でクラスライブラリ作成、CSで利用 詰まってるとこ : クラスライブラリの関数の型を自由に宣言出来ない VC++側 namespace hoge_dll{ public ref class Choge_dll{ public : void hage(void){} } } VCS側 using hoge_dll; (ry Choge_dll poge = new Choge_dll(); poge.hage(); DLL関数hageの引数・返り値がvoidだと上手く行くんだが、型をstringなど複雑なものに変えると使えなくなる。 ポインタの引渡しや関数ポインタの引渡しとか色々やりたいけど、これでは出来そうも無くて困ってる('A`) 誰かやり方教えてくだしあ
std::stringはStringに変更、 ポインタ・関数ポインタはIntPtrで渡せばいいんじゃね?
900 :
デフォルトの名無しさん :2007/10/13(土) 22:54:20
MFCでViewクラスのメンバ変数・関数をつかうにはどうすればいいんですか? Viewのヘッダーをインクルードするとコンパイルエラーでるんですが
エラー内容わかんね。
902 :
デフォルトの名無しさん :2007/10/14(日) 00:11:39
MFC(VC8)で、IMEを一時的にOFFにしたいのですが、どうすべきでしょうか? エディットボックスで入力制限が行いたくて、困っています。 全角入力を不可にしたいんです。ImmDisableIMEを使うと無効にはなりますが、 このエディットボックスでは無効、このエディットボックスでは有効、という ようにしたいんです。
>>902 EditBox毎にImmDisableIMEを使えばいいじゃん。
>>899 Stringでいけたぜ(`・ω・´)サンキュー
IntPtrはまだ試してないけどググったら文献出てきたからいける予感
いまのVC++って、そんな芸当ができるんだ。 昔はC++のクラスをVBから使うためには、COMを使わないといけなかったんだよ・・・。
>>899 >>904 関数ポインタよりもデリゲート使ったほうがいいんじゃね?
その他のポインタも、C#でいうref/out引数で十分なことが多い気がする。
配列なら当然C++/CLIではarrayね。
907 :
デフォルトの名無しさん :2007/10/14(日) 09:56:34
VC2005を使っています。 ifstreamとstd::getlineでファイルから一行ずつ読んでいるのですが、空行を読ませた場合に eofbitを立てていなくても例外が送出されて困っています。 具体的には、ヘッダー string の 585 行目でeofを検出するとeofbitのフラグを立てて、 611行目で例外を創出するはずなのですが、空行の場合 _Changed フラグがfalseのままなので、 勝手にfailbitフラグを立ててしまっているようです。 コードは以下の通りで、 f.exceptions(std::ios_base::badbit | std::ios_base::failbit); if (!eof()) { do { std::getline(f, line); } while (line[0] == '#' && !eof()); } こんな感じです。 abc↓ def↓ [EOF] このようなファイルを読み込ませると、最後の行で必ず例外が発生します。
908 :
907 :2007/10/14(日) 09:57:46
何か良い解決方法はないでしょうか?
それ以前におかしくないか?
>>907 少なくとも超初心者ならば、
プロが作ったライブラリの間違いを探す前に、
自分の書いたコードの間違いを探そうぜ。
VCのマニュアルには、
> 要素を何も抽出しない場合、この関数は setstate(failbit) を呼び出します。
なんて書いてあるぞ。
つまり、あなたがgetlineを選択したこと、もしくは、使い方が悪い。
911 :
デフォルトの名無しさん :2007/10/14(日) 13:47:24
MFCを使ってメール送受信させたい場合、どういうクラスを使って実現するわけですか?
ソケットw
3年B組クラス
>>911 MFCしか使えないという縛りがないのであれば、
別途、メール送受信のライブラリを使えばいい。
VS2005でUNICODEでコンパイルしてるんですが 日本語の表示に若干苦戦しています。 setlocale( LC_ALL, "japanese" ) ; としてからwprintfは正常に実行できるんですが wcoutは動作しなくなります。 std::wcout.imbue(std::locale("japanese")); としてからwcoutは正常に実行できるんですが wprintfは動作しなくなります。 上記の2つを同時にセットすると、 wcoutは失敗、wprintfは成功 します。 cout、printfのようにwcout、wprintfを同時に使えるようにするにはどうすればいいのでしょうか?
>>915 よくわからんけどそれぞの関数使う直前で設定しちゃ駄目なの?w
(ホントによく知らんw)
>>915 C++の入門書に、
Cの入出力ライブラリと、C++のストリームライブラリは、混ぜて使ってはいけない
というようなことが書いてあるから、試したこともないなぁ。
>>915 その問題を最小のコードで書いてみてよ。
自分がVC7.1で試したら、↓は、正常に動作したよ。
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "japanese") ;
std::wcout.imbue(std::locale("japanese")) ;
wprintf(L"Hoge1日本語") ;
std::wcout << L"Hoge2日本語" ;
return 0 ;
}
919 :
デフォルトの名無しさん :2007/10/14(日) 16:26:48
>>912 どこか参考になるサイトはご存知でしょうか?
探しているのですが、なかなか見つけられません。
>>914 別途ライブラリというのはフリーのライブラリでしょうか?
それならば知っていますが、ATLやなんかで簡単にできる
やつはないのでしょうか?
920 :
915 :2007/10/14(日) 16:29:22
前に調査したときに出来なかったんで、wprintfは捨てて wcoutを取ったんですが、ファイル操作の段階で また問題が出たので、質問してみました。 で、また調べた結果、ファイルの場合は別途回避方法を見つけました。 _setmode( _fileno( pFile ), _O_WTEXT ) ; オープンしたファイルポインタをsetmodeでUTF16を指定してやると いままで失敗していたfputwsが正常に動作するようになりました。 結局、wcout、wprintfの同居出来ませんでしたが・・・ レスありがとうございます。
921 :
915 :2007/10/14(日) 16:31:39
>>918 VS2003.NETでは、そのコードでこちらでも動作していました。
ただ、VS2005では動作が違うようです・・・
>>919 > どこか参考になるサイトはご存知でしょうか?
Webでタダで見れるものだけで、済まそうとするな。
下手に自前で作るな。とくに他所様に迷惑をかける可能性のあるものは、な。
> 別途ライブラリというのはフリーのライブラリでしょうか?
フリーかどうかは、関係ない。
品質が確かなものを選んで使うべし。
924 :
915 :2007/10/14(日) 16:53:06
>>923 質問したときには、wprintfがうまく行けばfputwsもうまく行く
と思っていたんですが、たしかにvswprintf_sや他のコンソールに
出力しない文字列操作関数は動作していました。
コンソールの出力の問題だけだったかもしれません。
ちなみに
_setmode( _fileno( stdout ), _O_WTEXT )
をやったらimbueをすると落ちてしまいました。
謎です・・・。
「メール送受信なんて」ばくぜんとしたイメージしか持ってないのにプログラム作る気?
926 :
デフォルトの名無しさん :2007/10/14(日) 17:27:39
>>922 そういうサイトは知らないってことですね。わかりました。
>品質が確かなものを選んで使うべし。
確かにそう思います。今となってはフリーだとシェアだの
ライセンスだの、関係ないと思ってます。
>925
勉強したかったので。参考書とか手に入ればいいんですが、
近くの本屋じゃ「できる〜」しか売ってないし、
ネットだと中身が見れなから嫌だし・・・。
で、漠然としてるので、こう、なんていうんでしょう、クラスとか
でMFCが提供してたり、こんな感じで作るわけですよ、的な
ことが書いてあるサイトがあったらいいなと。
>>924 既に理解していると思うけど、
Cの入出力ストリームのワイド版は、引数などでやりとりするのはワイド文字列だけど、ファイルに書くのはマルチバイト文字列。
C++のiostreamのワイド版は、引数とファイルの両方がワイド文字列。
だから混在させると、マルチバイト文字列とワイド文字列が混在したファイルを出力したり、
マルチバイト文字列をワイド文字列として読込もうとして、バッファをオーバーランしたりするの。
>>926 > そういうサイトは知らないってことですね。わかりました。
正しい道を示して、方向転換を促す人よりも、
間違った道へ進もうとしていても、そのまま具体的な手順を教えて、奈落の底に突き落とす人のほうが、
あなたにとっては、好ましいアドバイスのようだな。
OK。ならば悪魔の入れ知恵をしてやろう。
sourceforge.netへ行って、
自分が作ろうとしているプログラムに近いものを見つけて、
ソースコードをパクれ。
929 :
926 :2007/10/14(日) 18:06:22
>>928 悪の入れ知恵ありがとうございます。
928さんの示していただいた道が正しいかどうか、それを判断するのは
私です。お気を使ってくださり922のような発言をしていただいたのに
は感謝します。ただ、手詰まり困った挙句「何か手がかりになるもの」
を求めここにきたわけです。方向性を変えてくださるつもりでの922の
発言だったようですが、僕的に、そこで道が閉ざされてしまったわけ
です。
それに、僕はソースをパクるのはあまり好きじゃありません。もちろん
いいな、と思ったものは流用させていただいたりすることもありますが
基本はいろいろなサイトやソースを参考にし、納得した後に自分なりに
作ったりしています。今回の場合、最終的には928さんの示した道に進む
ことにならざるを得ないだろうとも思っています。
メール送信なんて簡単だお 簡易メール転送プロトコルって言うぐらいだからね
ところでこのえらそうなばかはなぜねこでもわかるをみないのかなあああああああ
メールの送受信のプロトコルを、自分でスクラッチで書くなんて、どーかしてるよ。 簡単なようだけど、相互運用性とかセキュリティとか考えると、すごく大変。
>>932 メールの送受信はネットワークプログラムの基礎だと思うが?
つないでリスト取って本文取るだけ。
>>898 その後
C++DLL側のChoge_dllにSTLを使ったメンバ変数を使ったら「マネージドじゃありません」って言われた('A`)
>>898 の状況下でSTL使いまくる方法を誰か教えて下さい('A`)
936 :
926 :2007/10/14(日) 18:52:25
えらそうなばかで申し訳ありません。
ほんともうみなさん、ご迷惑をおかけしてすみません。
甚だしい奴でごめんなさい。
>>931 猫は見ました。というか、猫しか詳しそうなところがなくて。
他のところはどうなんだろうと、見てみたかったんです。
「え、つーかこういうやり方が普通なのか?なんか他に
便利君とか揃ってないのか?つーか他のやり方は??」
とか、そんな感じだったんです。
最初から楽したかったらVB VCは楽しないできっちり作りこむためにある
あとのせさくさくですか?
ドットネットを一度経験すると、C+WIN32APIで1からシコシコ作るのがアホ臭くなるな 画面周りはポトペタでサクッと作るのがいい
>>939 もさっりが酷いもっさりがもっさりが我慢ならないもっさりが
できるだけ起動したくねーし
↓「お前のPCがしょぼい」から煽りあい勃発
今時.NETって・・・
VCに関連付けられてる(?)コンパイラって ほかのものに変ることってできるんでしょうか VS2005を使っていて 使いたいのコンパイラはDMCです
>>944 自分のやりたいことくらい的確に説明しようぜ。
セックル
俺も
私も
あちきも
俺童貞だけどお前らセクロスに夢見すぎ
俺セクロスだけどお前ら童貞に夢中すぎ
|ω^) <408とか410とか
953 :
デフォルトの名無しさん :2007/10/24(水) 16:34:24
6.0で、MFCのSDIアプリを作ってたのですが、タイトルバーが「無題-(アプリ名)」となっていたのが、知らないうちに「無題-」だけになってしまってました。 どこを変更すれば直りますかね?
スイカバー
超初心者です、ちょっと質問させてください。 Visual Studio 2005とPlatform SDK をインストール後、いくつかのサイトに載っているように、設定を行っていました。 で、corewin_express.vspropsを書き換えているときに(MSのサイトでは手順4)、 誤って、CoreWin.vspropsの方を書き換えてしまいました。 CoreWin.vsprops内の AdditionalDependencies= 以降の内容を教えていただけませんか? 結構長かった気がするんですが。
VC++6でC#のDataGridViewのようなグリッドコントロールを フリーで公開している日本人の方はいませんかね? CPにたくさんあるが全て外国人・・・
>>957 何故日本人でないといけないの?
理由如何によっては知り合いがシンプルなのを作っているから紹介しようか?
>>958 レスタイの通りじゃない?
せめて専門英語だけでも読めないと年くったとき苦しむんじゃね?
>>959 えーとすみません、どこのレスにタイトルが?
にちゃんではレスにタイトルはつけられない
レスタイって
>>958 の名前欄に書いてる内容の事?
文字列を2次元配列に収めたいんですが、どうすればいいのでしょうか? てっきり、char[N][M]でいいのかと思ってたら、これは1次元配列みたいで… char[N][M][P]というふうにすればいいのでしょうか?
そうなんだ 長年やってるけど知らんかった
勉強になるなあ
Active Xを使用する際はCFormViewをつかうか、ダイアログベースにしないといけないんですか? Cviewで使用することはできませんか?
つ CWnd::CreateControl
>>963 charは文字であって、文字列ではないから。
970 :
デフォルトの名無しさん :2007/11/01(木) 17:08:27
Visual C++ 2005 Express EditionのWindowsフォームアプリケーションの作りかたなどが載ってる本ってなにかありませんか? どうにもC++の参考書は、コンソール作成のものが多くて
C++にフォームなんてない
あるわけがない
コンソールならあるの?
cin cout は何の略だっけ?
>>970 まず、C++を勉強する。
次に、C#を勉強し、更にC#でのフォームアプリケーション作成を勉強する (a)。
そして、C++/CLIを勉強する (b)。WWWでググったり、MSDNライブラリを読み漁ったりすれば十分。
そうすれば、(a)と(b)の知識の応用で、C++フォームアプリケーションが作れるようになる。
VC6のプロファイルを使いたい。 EXEなら問題なく仕えたんだけどDLLでやろうとするとうまくいかない。 EXE+DLLの両方を対象にするとEXE内の内容は正しくでる。 DLL内の処理はなぜか初めの呼び出し(初期化処理)のみが表示され、 その後の処理に対するプロファイル結果が出てこない。 MSDNとかネットで調べる限りDLLも問題なくできるように思ったんだけど これは俺が何かを間違ってるから?
はい
978 :
デフォルトの名無しさん :2007/11/02(金) 22:12:58
windowsでGUIのアプリケーションを作るなら、 VC++でMFCAppで作るのが一番楽ですよね? GCCやBCCだと大変ですよね?
GUIアプリケーション作成ならBorland C++ Builderとかもあった。 C++でなくても良ければ、VB、Delphi、C#などRAD搭載の開発環境なんてありふれたもの。 どれが一番か俺に判断できることではないが。
>>978 そんなのライブラリの使いこなしによるよ。
俺はGCCでGUIアプリを作る気にはならないけど、Cygwin環境なら作る人もいるわな。
ちなみに俺のやり方
GUI→VB
裏方→VC++でDLLとかActiveXとか
981 :
デフォルトの名無しさん :2007/11/03(土) 00:10:25
めんどくせ それなら全部VC++でやったほうがよくねか?
>>981 俺はダイアログベースをよく使ってたが、届かないメッセージが結構あって。
それならVBも一緒だーっつーて、こういうスタイルにした。
最近はC#が出てきたが、客寄せパンダ程度で終わるのを危惧してまだ手をだしてない。
984 :
デフォルトの名無しさん :2007/11/04(日) 00:44:32
vectorや窓の杜などの公開されているシェアウェアはどの開発環境が多いんですか やはり、VC++MFCですかね VC++は本当に難しく感じます、ダイアログベースでも本当に基本的なコントロールしかないし、 Doc/Viewにするとなにをどうすればいいのかさっぱりわかりません。 どこか、いい勉強サイトありませんか?
985 :
デフォルトの名無しさん :2007/11/04(日) 01:33:20
Delphiにしとけ NETとかいらないしJANE styleとか作れる
986 :
デフォルトの名無しさん :2007/11/04(日) 02:32:31
include/sys/socket.hがないんですが、 インストール時失敗したんでしょうか? vc++2003
>>986 WindowsのPOSIXサポートは、別途インストールが必要。
JANE styleなんか作りたくありません
>>988 ソケット使いたいだけなら、とりあえず<winsock2.h>。
もちろんPOSIX系のとは若干、感触が違うので、気を付けろ。
991 :
986 :2007/11/04(日) 23:32:08
すいません、POSIXサポートはどっから何をインストールすればいいのでしょか?
993 :
デフォルトの名無しさん :2007/11/05(月) 00:45:50
C++/CLIにて、Threadクラスを使ってマルチスレッドに挑戦中です。
ttp://www.atmarkit.co.jp/fdotnet/mthread/mthread03/mthread03_01.html ↑のList1を参考に、MSDN見ながら自分でC++/CLI用に書き換えていったのですが、
「error C3364: 'System::Threading::ThreadStart' : delegate コンストラクタの引数が無効です。
デリゲート ターゲットはメンバ関数のポインタである必要があります。」
と、コンパイラ様に怒られてしまいます。
だ、誰か助けてください・・・。
(アンマネージクラスだと、もしかしてこういう使い方は不可能!?)
-----------------以下、ソース抜粋
(外からstart()メソッドが呼ばれた際に、mainLoop()を別スレッドにて開始する)
class monoEye
{
public:
int mainLoop()
{
/* ループ処理が入る */
}
void start()
{
ThreadStart^ threadDelegate_EyeL = gcnew ThreadStart(this,&monoEye::mainLoop);
Thread^ Thread_EyeL = gcnew Thread( threadDelegate_EyeL );
Thread_EyeL->Start();
}
};
うん、アンマネージクラスの非静的メンバはデリゲートに出来ない。
>>994 マネージドクラスだと動くので、もしかしたらと思ったら・・・。
こういう時って皆さんどうしてるんでしょうね?
Threadクラス以外ということになるんだとは思うんですが
monoEyeをマネージクラスにするのが嫌なら、マネージクラスで包むしかない。たとえばこんな感じ。 #pragma unmanaged #include <boost/function.hpp> #include <boost/bind.hpp> #pragma managed ref class NetiveWrapper { public: template<typename T> [System::CLSCompliant(false)] NetiveWrapper(T fn) : pfn(new boost::function<void ()>(fn)) {} void Do() {(*pfn)();} ~NetiveWrapper() {this->!NetiveWrapper();} !NetiveWrapper() {delete pfn;} private: boost::function<void ()>* pfn; }; class monoEye { public: void mainLoop() {} void start() { using namespace System::Threading; NetiveWrapper^ wrapper = gcnew NetiveWrapper(boost::bind(&monoEye::mainLoop, this)); ThreadStart^ threadDelegate_EyeL = gcnew ThreadStart(wrapper, &NetiveWrapper::Do); Thread^ Thread_EyeL = gcnew Thread( threadDelegate_EyeL ); Thread_EyeL->Start(); } };
>>996 ぅ・・・なんかすごいことになってますね・・・。
マルチスレッドにするだけでスレッドセーフだのInvokeだのいろいろ出てきて飽和気味なので、
とりあえずはStaticで行こうかと思います。
皆様、ありがとうございました。
998 :
デフォルトの名無しさん :2007/11/05(月) 15:52:02
本人に聞いたらどうだい?
本人さんのページにメアドとか掲示板とかがないのでわからないです。 初心者にVisualC++を教えるスレで聞いてみます。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。