★初心者にVisual C++を教えるスレ★ Part25
307 :
いーぶいしー :
2007/02/03(土) 16:42:45 クライアント(.exe)から 自分で作成したDLLに定義されているClassのpubicなメンバ変数に、アクセスしたい場合、 そのメンバ変数が構造体だと、その構造体の定義はクライアント側にも必要なのでしょうか? 定義を一箇所(DLL側のみ)にはできないのでしょうか?
>>307 もちろん必要、共通でinlcudeする*.hファイルに定義しておく。
C++/CLIのrefクラス、ref構造体は例外だけど
309 :
デフォルトの名無しさん :2007/02/04(日) 01:12:51
二色刷りで動物の絵が表紙にデカデカと書いてある本を探しているのですが、 何方かこの本の題名を知らないでしょうか? なんでも辞書みたいな感じの本で延々とコードが書いてあるらしいのですが。 あとみなさんはどのような本で勉強していますか? ちなみに僕は学校の授業でやったもののほぼ未経験です。
すいません。御存知の方がいたら教えてください。 環境:Windows XP,VC++6.0 「_MBCS」指定 Windowsのアプリを作っているのですが、リストビューの部分のみにUnicode文字のデータを表示 させたいので以下のようにリストビューの部分のみワイド文字仕様の構造体を使用しています。 リストビュー設定部のソース static HWND hList; LV_COLUMNW lvcol;LV_ITEMW item; InitCommonControls(); hList = CreateWindowExW(0,WC_LISTVIEWW, L"",WS_CHILD | WS_VISIBLE | LVS_REPORT, 0, 0, 300, 200,hWnd,(HMENU)ID_LISTVIEW,hInst,NULL); lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvcol.fmt = LVCFMT_LEFT; lvcol.cx = 100; lvcol.pszText = L"項目1"; lvcol.iSubItem = 0; ListView_InsertColumn(hList, 0, &lvcol); item.mask = LVIF_TEXT; item.pszText = L"内容1"; item.iItem = 0;item.iSubItem = 0; ListView_InsertItem(hList, &item); これで実行すると、リストビュー部に表示される文字が全て16進で表示されてしまいます。 正常に「項目1」,「内容1」で表示させる方法は、無いのでしょうか? ListView_InsertColumnの部分のヘッダファイルを見ると #define ListView_InsertColumn(hwnd, iCol, pcol) \ (int)SNDMSG((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN FAR*)(pcol)) となっているから無理なのかな?よろしくお願いします。
>>311 とりあえずListView_InsertColumn中のSNDMSGがSendMessageAになってる。
LVM_INSERTCOLUMNもAつきのほうだし。
マクロは全滅なきがする。
313 :
311 :2007/02/04(日) 21:09:25
>>312 ありがとう。
やっぱプロジェクト自体をUnicode仕様にするしかないのかな?
>マクロは全滅なきがする。
マクロ以外で実現する方法ってあるの?
314 :
311 :2007/02/04(日) 21:25:03
とりあえず以下のように自分でマクロを作ってみたらうまく表示できた。 #define ListView_InsertColumn_W(hwnd, iCol, pcol) \ (int)SendMessageW((hwnd), LVM_INSERTCOLUMNW, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMNW FAR*)(pcol)) これだけで問題ないんだろうか?
>>311-312 SNDMSGは単にSendMessageとして定義されているから、
当然プログラム全体をUNICODE化すればマクロがそのまま使えるんだ。
逆に言えばSendMessageがSendMessageWになりさえすればいいわけだから、
UNICODEとしてマクロを使いたい部分の前にこれ、
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
後に#pragma pop_macro("SendMessage")を置けばいけると思う。
push_macro/pop_macroがVC6でも使えるかどうかは知らないけど。
316 :
311 :2007/02/04(日) 22:00:59
>>315 ありがとう。
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
InitCommonControls();
:
:
item.mask = LVIF_TEXT; item.pszText = L"内容1";
item.iItem = 0;item.iSubItem = 0;
ListView_InsertItem(hList, &item);
#pragma pop_macro("SendMessage")
上記のように修正してみたが、コンパイルは通ったが、表示結果は16進のままだった。
VC++6.0では、push_macro/pop_macroが使えないのかもしれない。
>>314 に書いた方法でやってみます。
ありがとう。
317 :
298 :2007/02/06(火) 07:43:06
OnInitialUpdate() で実行することが出来ました。 もう一つ教えてください。 エディットボックスなどのコントロールの初期化処理を したいのですが、どのタイミングでやればいいんでしょうか? WM_CREATEではまだコントロールが作成されていません。 OnInitialUpdate() では問題ないのですが、最初の一度だけと いう訳にはいきません。 static BOOL flag; を使ってifで判定して最初だけ実行すれば出来たのですが、 もっとスマートな方法はありますでしょうか?
OnInitialUpdateは最初の一度という意味
>>317 Documentが変わってもView内のコントロールの位置やサイズが変わらない
タイプのアプリの場合は、自分もOnInitialUpdateでstaticなフラグ使って
一回だけやってる。特に問題ないと思うけど。
これ以上はアプリ形態と初期化内容が判らない限り何ともいえない。
320 :
デフォルトの名無しさん :2007/02/06(火) 16:24:36
ヘッダファイルに変数を追加するだけで アプリケーション起動時にOSがエラーを出してくることがあります もう一つ二つ意味のない変数を追加すれば治ることもあるのですが これはどうしてなのですか?変数追加だけなので プログラムの中で使ってもいません名前も被っていないです どんな変数でもこの症状が起こるときは起こります
領域外アクセスとかのバグが変数追加で表面化したんだろ
322 :
デフォルトの名無しさん :2007/02/06(火) 16:29:38
つまり他の変数になにか問題があるということですか?
323 :
デフォルトの名無しさん :2007/02/06(火) 16:41:35
Runtime Error! Program:_xxxxxxxxxxx ←exeの場所 abnormal program termination こんな感じで表示されます 今回は他の変数を追加しても直りません 助けてください。アクセス外ということは文字列かなにか 静的に領域をとってる配列等が原因なのでしょうか?
324 :
デフォルトの名無しさん :2007/02/06(火) 16:48:23
文字列20文字もいらない文字の領域を200にしたらいけました うーん無駄に領域を確保すれば直るなんて謎だ
謎っつーか、メモリの管理がすげー甘いんじゃなかろうか 一度きっちり調べ直してみることをお薦めする
326 :
デフォルトの名無しさん :2007/02/06(火) 17:14:52
すいません独学なんですがメモリ管理では 全てのメンバ変数にdeleteをしたほうがいいのでしょうか?
newしたものにはdelete、new[]したものにはdelete[]。 逆にnewしていないものにdeleteは要らない。 ただし可能な限り、std::vectorなどnew[]/delete[]を隠匿したものを使ったり、 boost::shared_ptr/arrayやboost::scoped_ptr/array、std::auto_ptrなど、 せめてdelete/delete[]だけでも隠匿して使うようにすべき。
328 :
デフォルトの名無しさん :2007/02/06(火) 17:22:56
文字列などは配列で静的に確保しないほうがいいのでしょうか? newで動的確保するべきなのですか?
大量にバッファを必要とするのならともかく、 そうでないのなら静的確保で十分
330 :
デフォルトの名無しさん :2007/02/06(火) 17:30:17
私はその他のオブジェクトもnewで動的確保はしていませんでしたので deleteを使うところが見当たりません 原因は全て静的にしているせいなのでしょうか?
331 :
デフォルトの名無しさん :2007/02/06(火) 17:36:36
いまだにdllの仕組みが理解できません。 猫でものホームページ見ながら作ってみたんですが dllを作った時のヘッダを含めて かつその時出来たlibファイルを #pragma comment(lib,"〜.lib) か、リンカの設定でリンクしないと使えないのは libを通してやらないと、dll内の関数を呼び出すことは出来ないと いう事なんでしょうか。 LoadLibraryを使っても意味無かったので、よくわからないです。 どなたか教えて頂ければ幸いです。 VS2005というIDE環境で勉強してるから楽出来てる分その楽 出来ている理由が解って無く勉強不足になってると自らは思います。
>>330 「静的」「動的」の意味が分かっていないような気がする。
コードの中で
int i;
char String[80];
とかやるのが「静的確保」。これらの変数は実行ファイルがメモリ上に
ロードされた時点で既に存在していて、終了と同時に消滅する。
グローバル変数だろうが(クラスの)メンバ変数だろうがそれは同じ。
したがって delete/delete[] は必要ない。
>>331 LoadLibraryで読み込んだDLLの関数を呼び出すには、
GetProcAddressで関数のアドレスを取得するんだよ。
>>331 VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、
この2つは完全に別種のもの。中身は一緒、ただ使い方が違う。
LIBファイルは静的リンク用のファイル。
自分の実行ファイルの中に(コンパイルの時点で)取り込んでしまって、
あたかも自分の書いたコードと同じように使えます、というもの。
だからLIBを組み込むときにはリンカなり#pragmaなりで予め設定をして、
コンパイルのときにリンクすることを明示しなければならない。
DLLは動的リンク用のファイル。
一般的には、まずLoadLibrary()でDLLファイルを読み込み、
(そこでもし成功したなら)次にGetProcAddress()で
DLLの中に埋め込まれた関数を取り出して使う、
最後にFreeLibrary()でDLLを自分のプログラムから取り外す、
という段取りを踏む。
コンパイル時には存在しなくても構わない、実行時にあればいい。
335 :
デフォルトの名無しさん :2007/02/06(火) 17:55:16
>>332 うーんということは私が知らず知らずのうちに
どこかで動的確保しているということでしょうか?
>>334 >VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、
このLIBはインポートトライブラリ。
LoadLibraryやらGetProcAddressやらメンドクサイ処理をしてくれる短いモジュール。
これを静的にリンクすればDLLの呼び出しが簡単に出来る。
インポートトライブラリがあるなら極力使ったほうが楽。
インポートトライブラリ インポートトトライブラリ インポートトトトライブラリ
338 :
320 :2007/02/06(火) 18:12:06
スレッドオブジェクトの配列をグローバル変数にしてるんですが これはまずいですか?せめて原因をつきとめたいです
>>335 動的確保はスタックに積むケースとnewやmallocなどでヒープから確保するケースがある。
静的確保はstaticで定義した場合(明示的にstaticをg使わないケースも含む)
クラス内のメンバー変数はクラスがどう生成されたかによる。
>>336 誤字をさらにコピーしてしまったか、インポートライブラリだな。
340 :
331 :2007/02/06(火) 18:44:51
>>333 さん
>>334 さん
>>336 さん
ご教授ありがとうございました。
GetProcAddress()FreeLibrary()ってのも必要なんですね。
それと、dll作った時のlibはインポートライブラリなんですね。
「プログラムはなぜ動くのか」って本を読んだにもかかわらず
流し読みで頭に入っておらず再読したらちゃんと書いてありました。
はぁ、馬鹿だな俺って。
SendMessageであるウィンドウにDボタンを送りたいのですが、 SendMessage(hwnd, このあとをどうすればよいのでしょうか。 ご教授願います。
>はぁ、馬鹿だな俺って。
それに気がつくことができれば、今後はもっと「馬鹿」じゃなくなるでしょう。
そうやって向上できる人間が、「賢い」のです。
#で、「ご教示」ですね。
>>320 ソース公開しちゃった方が話が早そうですね。
>>341 Dボタンってなんですか?
マウスクリックのイベントを送りたいなら、Spy++でどういうパラメータを渡せばいいか覗いてみると宜しいかと。
344 :
317 :2007/02/06(火) 21:25:08
>>319 フラグを使うのは普通なんですね。
ありがとうございました。
>>320 いろいろ言われてるけど、とりあえず
配列利用時に、添え字がオーバーアクセスしてないか確認するべし。
> 原因を突き止めたい
デバッガを上手に利用しましょう。
ある特定のメモリ空間にアクセスした時にbreakかけることも出来たはず。
詳しくは「ブレークポイント」をMSDNで調べてくれ。
基礎的すぎる質問なんですが、 ダイアログエディタで適当にあれこれコントロールを張ったとき、 VC++2003でビルドしたプログラムを98SEで走らせると、 コントロールのマルチバイト文字がすべて文字化けする。 エディットボックスに直接マルチバイト文字入れても同じく。 メニューバーやステータスバーは文字化けしない。 文字はTCHAR系統を使い、ビルドした結果はすべてwchar_tになっているはず。 このような状況で、文字化けさせない用にする方法を教えてくださいませんでしょうか?
9xはUNICODE対応していないから、MSLUを使うか非UNICODEにするかしないとだめだよ。
2000とXPは内部コードはUnicodeだけど98とかはどうなんだろう。 localeまわりかな?Unicode適応しないでビルドしたらSJISになっていけるのかな?
>>347 なるほど…
わかりました。
ありがとうございました。
>>346 マルチバイト文字(列) と ワイド文字(列) の意味を
使い分けられて無い気がするぞ。
マルチバイト文字列は char* で
ワイド文字列は wchar_t* だ。
そもそもダイアログでコードページ932で作ってたりして
352 :
デフォルトの名無しさん :2007/02/07(水) 10:18:25
クラスのメンバ変数についての質問です グローバル変数としてビュークラスの外で宣言したクラスの メンバ変数は0や空文字で初期化されてるんですが そのクラスをビュークラスのメンバとして宣言するとそのクラスの メンバ変数が初期化されないのはどうしてですか?
>>352 C++スレ行くか
C++の入門書でも読んで勉強してください
入門書にしっかり書いてある
356 :
デフォルトの名無しさん :2007/02/07(水) 10:39:04
グローバル変数はコンパイル時に場所が決まってるから
というより、C/C++の規格でそうなると定められているためと言ったほうがいいと思う。
どうだろね。 仕組みから入ったほうが、そう決まってるからそうなんだ、より納得いくかもしれんし
実装がそうだからそれが正しいという保証はどこにもない
逆にこれは実装が先にあって仕様が追いついた例でもあるな。 構造体のコピーも似たようなもの。
VC++7.0でライブラリファイルをリンクする方法を教えてください winsockライブラリを使いたいのでお願いします
#pragma comment(lib, "Mswsock.lib")
364 :
269 :2007/02/08(木) 08:10:55
269です。たびたび申し訳ありません。 SDK入れてWindowsアプリが作れるようになったんですが、ダイアログやアクセレータ等の リソーススクリプトファイル(.rc)をエディットするResEditorがついてないみたいなので断念しそうです。 というかそれが目的だったので。 Windowsフォーム(.h)は作れるみたいですがどうしていいのかわかんないです。 Visual Studio 2005 Academic Editionだったらリソーススクリプトファイル(.rc)の作成は可能でしょうか? 可能ならば購入したいと思います。よろしくお願いします。
MSに訊け
メモ帳でええがな
369 :
デフォルトの名無しさん :2007/02/08(木) 11:50:13
VisualStudio2005C++ExpressEditionにて #include "stdafx.h" #include"stdio.h" int _tmain(int argc, _TCHAR* argv[]) { FILE *fp=fopen("d:/test.txt","rw"); というコードを書きました。 FILE文付近で「〜Expression:(Invalid file open mode",0)〜」 というダイアログボックスがでます。 CRTセキュリティ強化されたためということですが、このセキュリティを 弱くしたいと思います。どのようにすればよいですか?
WinSockのAPIを使ってphpから文字列を取得することはできますか?
>>369 セキュリティ強化用の関数が追加されたけど
標準関数の仕様はかわらないのでは?
>>372 httpなんですが
あとサーバーに送る文字列の改行コードは\nで大丈夫でしょうか?
374 :
デフォルトの名無しさん :2007/02/08(木) 13:09:22
>>371 標準関数の仕様はかわらないのでは?
たぶんそうだと思うのですがうまくいかないです。
エラー通り"rw"が悪い
376 :
デフォルトの名無しさん :2007/02/08(木) 14:04:09
>>275 VisualStudio2003だとうまくいくのですが、
構文的にrwなんてつけたらだめなのですか?
unicodeかなんかじゃないの?
"rw" なんてのは無い
380 :
デフォルトの名無しさん :2007/02/08(木) 17:11:52
多分すごい有名な 「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」 を使って今勉強中なんですが、 241ページのサンプルプログラムで、 CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、 ’旧ペン’と銘打って保存って書いてありますが、 これをする意味がわかりません。 わざわざポインタでなぜ確保しているのでしょうか? pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、 別に’旧ペン’を保存しておく必要があるのでしょうか? 私が簡単に確認した程度では、 oldPen 自体設定しなくても実行可能でしたし、 最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。 他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、 やればやるほど意味がないのではという考えに傾きます。 大変限定的な質問ですが、 よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば 教えていただけないでしょうか?
MSDNのサンプルだとこんな感じだね void CMyView::OnDraw( CDC* pDC ) { CPen penBlack; // Construct it, then initialize if( newPen.CreatePen( PS_SOLID, 2, RGB(0,0,0) ) ) { // Select it into the device context // Save the old pen at the same time CPen* pOldPen = pDC->SelectObject( &penBlack ); // Draw with the pen pDC->MoveTo(...); pDC->LineTo(...); // Restore the old pen to the device context pDC->SelectObject( pOldPen ); } else { // Alert the user that resources are low } }
げ、マルチか
387 :
デフォルトの名無しさん :2007/02/08(木) 20:16:15
プログラムからtabindexの設定をするには?
388 :
デフォルトの名無しさん :2007/02/08(木) 20:20:28
>>369 >>379 C/C++の標準規格としては"rw"なんてありません。
標準で認められているのは"r", "w", "a", "r+", "w+", "a+"及び
それにバイナリモードのbを2-3文字目(+とは順不同)に入れたもののみです。
勿論Visual C++はViusal C++で色々と独自に拡張はしていますが。
389 :
デフォルトの名無しさん :2007/02/10(土) 17:51:19
WinSockでhttpsを扱えますか?
扱えるかどうかと言えば扱える ソケットとプロトコルは関係ない 要はアプリケーションがWinSockを使ってSSL通信できるように作ればいい
391 :
デフォルトの名無しさん :2007/02/10(土) 18:49:44
【初心者歓迎】C/C++室 Ver.34【環境依存OK】 で聞いたらスレ違いという事でここでオナガイシマス VC6ですCtrl + Fで検索ダイアログを開いた時過去に検索した文字が出せますが 便利ですが間違えた検索単語を間違えたときの文字も残っています 一度まっさらにするにはどうしたら良いですか?
パソコン初心者だろうか?
394 :
デフォルトの名無しさん :2007/02/11(日) 09:42:36
WinFormsのTextBoxで、 テキストの行がコントロールからはみ出たら最終行がきちんと見えるように オートスクロールさせたいのですが デザイナ内にもそれらしき設定はなさそうですし、 マニュアルでプロパティを調べてもそれっぽいものが見当たりません。 どうしたらいいでしょうか? AutoScrollOffsetってのがそうですか? なんかPointでスクロール先を指定するみたいですが、 もしこれがそうなら使い方が良く分からないので教えてください。
395 :
394 :2007/02/11(日) 10:10:49
とりあえず格好悪いですが textBox->SelectAll(); textBox->ScrollToCaret(); でできました。
ヒント ・オートスクロールが有効になっている場合、自動的にキャレットのある位置が表示されるようにスクロールされる ・TextBox::SelectionStartが現在のキャレットの位置
392ですがどうしたら消せる?
レジストリ辺りにでも保存されてるんじゃねーかな。 もしくは再インストール。
399 :
デフォルトの名無しさん :2007/02/11(日) 23:32:04
Lap[Count - 1] + Step > (Lap[Count] = GetTickCount()) );/* case 2: の timeGetTime の部分*/ Stepが0以外だとStepに関わらず、このループを抜けるのに15ms以上もかかってしまいます。(Lap配列の数値を見て) 最初のtimeGetTimeの10万回ループは47msで遅いわけでもないですし、そもそもtimeGetTimeだとうまく動くのです。 どうしたらよいのでしょうか。
いったいそれのどのあたりがループなんだ?
401 :
399 :2007/02/11(日) 23:50:06
まず、ビジーループ氏ね それに、timeGetTimeのNTでの規定精度は「5ms以上」 ついでに、強制コンテキストスイッチの間隔もある。
403 :
399 :2007/02/12(月) 00:29:54
>>402 試しに比較したかっただけなので、ループの方は勘弁してください。
timeBeginPeriodで精度を1msに調整しても結局GetTickCountで同様の症状になってしまいます。
コンテキストスイッチの待ち時間は10msを超えるようなものでしたっけ?
GetTickCountのヘルプ読んだか? 家のPCだと100ns単位で156250、約16ms程度の解像度だぞ。
普通1/60秒だからそんなもんだね。
406 :
399 :2007/02/12(月) 19:24:33
>>404-405 ようやく理解できました。
Sleep(0)ループのようにタイマー割り込みを待つのですね…
GetSystemTimeAdjustmentで測ってみたら15.625msでした。
407 :
デフォルトの名無しさん :2007/02/13(火) 12:47:54
CString型のメンバ変数strに文字列をいれていたのに 突然中身がなくなるというかデバッグ時にみると不適切なptr となってアドレスは0を指しているようでした 関数から関数を呼び出してさらに関数をよびだしていきどんどん奥にいくと この現象が起きたのですが これはスタックオーバーフローというものですか? 解決策を教えてください
>>407 関数一個ずつ丹念にデバッガで追っていくのが無難かな。
スタックオーバーフローにしろ領域破壊にしろ、どっかで誰かがなんかやってるだろうから。
409 :
デフォルトの名無しさん :2007/02/13(火) 13:00:34
>>408 ありがとうございます!!
strncpyで領域破壊を起こしていました
すごく助かりました!!
410 :
デフォルトの名無しさん :2007/02/13(火) 14:14:12
私はもともとC++Builder出身なのですが VB6で、あるアプリを作成しています。 このアプリは、主処理のほとんどが MS.NET Framework1.1 VC++.NET で生成されたDLLで行われています。 このDLLをステップ実行やインスペクタでデバグしたいのです が、親アプリがVBなので、どうやってデバグしたら良いやら 困り果ててます。 どなたかVC++のDLLのデバグ方法を伝授してください… できれば簡単なやつで。
ソースとデバッグ版DLLとpdbファイルがあればおk
ソース、デバッグ版DLL、pdbファイルあります! もちょっとだけ具体的に教えてもらえないでしょうか…
それって開発環境そのまま? 途中で止めてアタッチする手もあるが、環境あるなら DLLのデバッグ開始すると、実行時にEXE指定しろって言ってくるから それでそのEXE指定すればいいと思う。 デバッグしたいとこはブレークポイント設定しておけばいいし。
もしVB側もデバッグしてるのなら、関数呼び出し時にステップインで DLLとPDBが同じとこにあればソースの場所聞いてくると思うので そこでソース選べば追えると思うけど、、、 VB呼び出しはもしかしたら違うかもしれん、、、 C/C++からの呼び出ししかやったことないんで。 もしだめなら試すから言ってくれ
>>413-414 丁寧なご回答ありがとうございます。
でもまだちょっと分かってないです…
DLLですが、メイク時に実行すると
「ActiveXコントロールテストコンテナ」というのが
出ます。
これかのことか!?と思ったのですが、EXE指定はできないっぽいです。
>>414 さんの方法は今がんがってる最中です…
416 :
デフォルトの名無しさん :2007/02/13(火) 20:56:40
質問です。 学校で使っている描画のプログラム(?)をVC++6.0で使いたいと思い、 ヘッダーファイルとライブラリファイルを Microsoft Visual Studio\VC98 のIncludeフォルダとLibフォルダにそれぞれ入れ、 プログラムをコンパイルしたのですが、 warning LNK4003: ライブラリの形式が無効です; ライブラリは無視されます とエラーになってしまいます。 これと同様のことをBCC5.5でしても問題ありませんでした。 何か間違っているところがあれば是非教えてください。
ライブラリがBCC用なんだろ。
418 :
418 :2007/02/13(火) 21:40:29
>>417 Win32 Static Libraryでプロジェクトを作りそこにライブラリソースを追加しビルドしました。
そしてできたライブラリファイルで再び試してみると、
ライブラリの形式が無効です このエラーはでなくなりましたが、
LNK2001 :外部シンボル"関数名"は未解決です このエラーは消えませんでした。
ライブラリファイルの作り方もよくわからなかったのですが合っているでしょうか?
"関数名"が、そのライブラリに入っているべきものなら、 どっか、あってないんだろ。
.NETでダイアログベースで作ってます。 CRectとGetWindowRectを使用して自身の座標を得ることはできたのですが 自身と関係ないWindowの座標を得る場合にはどうしたらいいんでしょうか?
GetWindowRectだな。 必要とするウィンドウのハンドルを取得するべし。。 .NET Frameworks だけじゃ無理な気がしたので、WinAPI を使いましょう。
422 :
デフォルトの名無しさん :2007/02/14(水) 12:19:22
エディットコントロールにintの中身を表示させるにはどうしたらいいんですか? 文字列は"”でできました。 変数だけ書いたらエラーでました。
釣れますか?
424 :
デフォルトの名無しさん :2007/02/14(水) 14:47:48
編集制御->文字列 = 文字列にな〜れ(数値);
>>420 なぜ.NETでCRectとGetWindowRectが出てくる?
426 :
デフォルトの名無しさん :2007/02/14(水) 17:05:59
VC6.0でベースがDIALOGか、SDIで出力結果をDOS窓に出す方法はあるんですか。 はじめからDOS窓アプリにしないとだめですか?
AllocConsole?
CTypedPtrList<CObList, VALUE*>のSeqValueListを CTypedPtrList<CObArray, VALUE*>にする時ってどうすればいいんでしょうか? 下のがソースなんですが、やり方が良くわからない。。。orz CItemInfo::~CItemInfo(){ int iCount; POSITION pos; VALUE *pValue; m_pValueList = &m_SeqValueList; iCount = (int)m_pValueList->GetCount( ); pos = m_pValueList->GetHeadPosition( ); for( int i=0; i<iCount; i++ ){ pValue = m_pValueList->GetNext( pos ); delete pValue; } m_pValueList->RemoveAll(); m_pValueList = &m_ParValueList; iCount = (int)m_pValueList->GetCount( ); pos = m_pValueList->GetHeadPosition( ); for( int i=0; i<iCount; i++ ){ pValue = m_pValueList->GetNext( pos ); delete pValue; } m_pValueList->RemoveAll(); }
430 :
426 :2007/02/14(水) 17:36:11
AllocConsole(); freopen("con", "w", stdout); printf("hello console\r\n"); //FreeConsole(); でできました。すみません。
エディタの背景を黒にカスタマイズしたいのですが、どこにもそんな項目がありません ちなみにヴァージョン6.0です
エディター?IDEのかな? ツールのオプションの書式の背景でない?
433 :
420 :2007/02/14(水) 21:14:12
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point) ってところでpointに入っててrectはサイズを知りたくて使ってただけでした、すみません。 クライアント座標はpointに入ってたのですがスクリーン座標を知るにはどうしたらいいんでしょうか? SetCapture()でクライアント領域外の座標は得れたんですがクライアントが中心になってしまっています。 よろしくお願いします。
ClientToScreen
435 :
420 :2007/02/14(水) 22:51:21
436 :
420 :2007/02/14(水) 22:56:32
できました、ありがとうございます!
俺たちはとんでもない勘違いをしていたようだ .NETとは、Visual Studio .Net 2003の省略形だったんだよ!
2002 のことも忘れないで上げてください。
440 :
420 :2007/02/15(木) 00:06:40
まさしくVisualStudio.Net2003の事です。 .NETとは違ったんでしょうか・・・すみません;
な……なんだってー!! ……職場にもいるけどな、そういうヒト。 さらにVisual Studio 2005のことも「ドットネット」って呼んでくれるから、 毎回頭の中で翻訳するのが大変。 例「C++でデバッグしていてドットネットが落ちるんだよな〜」「???」
>>440 .NETと言ったら普通.NET Frameworkのことを指す。
新規プロジェクトの中に.NETとか書かれたテンプレートがあるだろ。
それが.NET Frameworkを使うプロジェクトを作るのに使うテンプレート。
.NET Frameworkには大量のクラスライブラリが含まれているし、
Visual Studioではフォームエディタも使え、作るほうとしては充実しているが、
利用者に.NET Frameworkをインストールしてもらわないといけないのが、
一般的なアプリケーション開発ではネック。
XP SP2あたりから漏れなくインストールされるようになってきているけどね。
443 :
デフォルトの名無しさん :2007/02/15(木) 10:44:29
Vistaで、インストールされているWindowsコンポーネントを確認すると .NET Frameworkっていうのがあった。 言い方が良くわからないけど、つまり.NETというのは単なる1つのAPI ってことで、開発環境を指しているのではない、ということ?
>>443 .NETの環境向けに開発できるのが、VS .NET
初心者の場合は自分勝手な略語を使わないできちんと書けばいい ハードディスクのことをハードと呼ぶやつとか 本人はどういうつもりか知らんけど馬鹿にしか見えない。
446 :
デフォルトの名無しさん :2007/02/15(木) 11:05:21
なるほど…。 Visual Studio .NETというのは、.NET Frameworkがインストールされている 端末向けの開発環境、ということか。 Windows Vistaには標準で.NET Frameworkがインストールされているけど、 XPはSP2を入れないと.NET Frameworkが入っていないから、 そういう端末を対象とするなら.NET Frameworkが入っているかいないかを 確認しなければならないということか。
Visual Studio .NETという名前だと .net専用と間違える人が多すぎるから Visual Studio .NETという名前は使われなくなった。
あ、俺も以前、ずっと勘違いしてたw .NETというくらいだからネットワーク=インターネット専用なんだろうな、俺には 関係ないなと…w
逆にVisual Basicは2005でも.NETを付けておけば良かったのにと思う。 「Visual Basic .NET」 2005という具合にさ。
Visual Stadio2005 をインストールして VS2005 C++で #include <stdio.h> main() { int a; } をコンパイルすると error C4430: 型指定子がありません - int と仮定しました が出ます 今まではいけてたんですが、わかる方お願いします。
int main(){ }
関数の戻り値の型を省略できるのはCだけ。 たぶん拡張子をcにしたり、コンパイルオプションから/TPを外したりすれば、 (int抜きの)main()でも行けると思う。
453 :
デフォルトの名無しさん :2007/02/16(金) 03:40:09
stringをintにするにはどうすれば?
>>453 cli::String なのか std::string なのかはっきりしろ。
455 :
デフォルトの名無しさん :2007/02/16(金) 03:55:21
std::string
>>455 std::string s("123");
int i = atoi(s.c_str());
457 :
デフォルトの名無しさん :2007/02/16(金) 04:07:03
>>456 それができないんですよ
エラーがでます
エラーが出ますじゃないでしょ。 どんなエラーが出るのか言いなさいよ。
463 :
デフォルトの名無しさん :2007/02/16(金) 12:45:22
設計でUMLを使ってる人いますか? マルチスレッドとかUMLで設計できますか?
UMLは詳しく知らん身だけど アクティビティ図使えば表現できるんじゃねーかとは思う が、とりあえずスレ違いだ。
VC++でゲームを作ろうと考えてるんですが、オススメの入門書等ありませんか? 何件か書店回ってパラパラと立ち読みしてみたんですがどういうのが良いのか分からなくて困ってます。 やはり実用例があるC++でゲームを作るみたいな本が良いんでしょうか。 既出、スレ違いだったらすみませんorz
そもそもゲームって時点で入門を超えてる
初等教育 算数 教養課程 数学 物理 C/C++ 専門課程 ゲーム製作
469 :
デフォルトの名無しさん :2007/02/17(土) 16:22:37
今、Visual C++ の入門書を探しています。 Cの文法は一通り理解しています。 本格的にWindowsプログラミングができるようになりたいので、 これから勉強を始めるつもりです。 数年前、ある先生から、 「Winアプリケーションを作れるようになるためには、 まずはWinAPIを理解→オブジェクト指向を理解→MFCを使ったプログラミング」 というような段階を踏んで勉強していくといい、と聞きました。 勧められた本が、山本信雄の「はじめてのプログラミング」(全3巻)で、 ほぼ上記の説明通りの構成で書かれている本らしいのですが、アマゾンで見てみたら 残念なことにこの本はVisualC++5.0/6.0向けらしいです。 現行のVC++2005は、6.0から「かなり変わった」と聞いているので、別の本を 買うしかないと思っています。 「2005になって、.NetFrameWorkのクラスを利用するプログラミングに変わって..」 と聞いても、私にはまだよくわからないのですが、前記の「API→オブジェクト指向→MFC」 という学習の進め方自体も、2005になってだいぶ変わったのでしょうか。 多少時間がかかっても構わないので、なるべく体系だった学習ができるような 入門書がいいのですが.... ちなみに最終的に作りたいものは、周辺機器のデバイスドライバのたぐいです。 もし色々な本を読んでいる方がおられましたら、よろしくお願いします。
Winアプリとデバイスドライバだとあんまり関連性ないよ
471 :
469 :2007/02/17(土) 17:36:27
>470 すみません。「デバイスドライバ」という書き方では不十分でした。 周辺機器は、光学センサや超音波センサで空間把握をするための装置です。 通信されてきたデータをPC画面上でグラフィカルにモニターするためのWinアプリを 作りたいと思っています。そして、ドライバ周りも一緒にC++でコーディングできればと 考えています。
VisualC++2005なら5.0/6.0でできてた事はできるよ。 2005で「API→オブジェクト指向→MFC」という学習の進め方もできる。 かなり変わったというよりは、かなり機能が追加された。
473 :
465 :2007/02/17(土) 18:34:36
>>466 少し探したのですが見つからなかったので助かりました。
そちらの方で聞いてみます。誘導ありがとうございました。
expressでapiの場合は リソースエディタやクラスウィザードとか使わないだろうし 2005の本にこだわる意味はないだろうね
VCは初心者向きじゃないから嫌ならVBやC#を使えということだな
>>469 COMポートで繋ぐ程度ならデバイスドライバは要らない。
独自のカード経由&そのカードが仕様書しか無い、って話なら別だけど。
で、一つ言っておくなら「オブジェクト指向とMFCは一切関係が無い」。
MFCはWinAPIを手を抜いて使うためのラッパ。
あと、VC6のソースが2005で動かない病に良く効く呪文。
プロジェクト - プロパティ - 構成プロパティ - 文字セット - マルチバイト文字セットを使用する
477 :
デフォルトの名無しさん :2007/02/17(土) 21:47:28
VC++.NET2003 でWindowsフォームアプリケーションを作っています。 以前コンソールアプリケーションで作成した、Mysqlのクライアントプログラムを 利用したいと考えていますが、mysql.hを追加すると下記のエラーが出ます。 mysql.hは利用できますか? Open.cpp WINVER not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server) c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2146: 構文エラー : ';' が、識別子 'fd' の前に必要です。 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::SOCKET' : 識別名を宣言するのに、型が指定されていません。 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::fd' : 識別名を宣言するのに、型が指定されていません。 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2065: 'SOCKET' : 定義されていない識別子です。 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2146: 構文エラー : ')' が、識別子 's' の前に必要です。 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(359) : error C2059: 構文エラー : ')'
478 :
デフォルトの名無しさん :2007/02/18(日) 03:29:49
C++builder5.0で、なんかの画像コンポーネントに、今手元にある 無毛でくっきり縦線・超美少女小学生のヌード写真(jpg)を貼り付 けたいのですがどうすればいいのかわかりません。 ウインドウの大きさと同期して画像のサイズも変わるようにしたい です。誰か教えてください。
479 :
デフォルトの名無しさん :2007/02/18(日) 03:45:06
>>478 まず、その素敵な性癖を直せ。
話はそれからだ。
まず、その素敵な写真をうpれ。 話はそれからだ。
481 :
ぶいしー :2007/02/18(日) 16:39:58
DLLのリソースIDについて質問させてください。 拡張DLL、レギュラーDLLともに、 呼び出すクライアントとのリソースIDの重複は気にするのでしょうか? あるサイトだと、拡張DLLはリソースIDの管理はMFCがやってくれる みたいなことがかかれていたので・・ どなたかご教授ください。
>>477 #include <mysql.h>の前に、#include <winsock.h>。もれはこれで
3ヶ月ほど悩んだ。
Visual Studio 2005なんですけど SystemParametersInfo(SPI_SETDESKWALLPAPER,NULL,"c:\\a.bmp",0); でコンパイルはいけるんですが、ソリューションのビルドで エラーになります "c:\a.bmp"でもだめです Vistaでもいけますよね? 解る方お願いします
>■質問するにあたって >・エラーや警告のときはエラーメッセージを書きましょう。
>>483 です
エラーが多いんで伏せてました
リンクしています...
aaa_ch.obj : error LNK2028: 未解決のトークン (0A000022) "extern "C" int __stdcall
SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z) が関数 "
int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
aaa_ch.obj : error LNK2019: 未解決の外部シンボル "extern "C"
int __stdcall SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z)
が関数 "int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
E:\C++\aaach\Debug\aaach.exe : fatal error LNK1120: 外部参照 2 が未解決です。
以上です、お願いします。
486 :
デフォルトの名無しさん :2007/02/19(月) 11:11:35
超初歩的な質問なのですが、 MS Visual C++ .NET で、IntToStr関数を使えないので他の方法を調べてます。 値を文字列に変換するにはどうしたら良いのでしょうか?
マネージプログラムならメソッドのToString そうでなければ、boost::lexical_cast、std::(basic_)ostringstream、std::sprintf (_stprintf)と続く
>>487 下の方法でできました!親切な回答ありがとうございます。
int a=100;
label1->Text = a.ToString();
連続で申し訳ないのですが、また質問があります。 別の人が作ったソースで下のようにオーバーロードされた関数があるのですが、 この2つの違いって何なんでしょうか? CRect hoge(CRect & r) const { : : } CRect hoge(CRect const & r) const { : : }
>>485 必要なライブラリリンクしてないんじゃね
>>489 中味は同じでもかまわない
コンパイラが区別できればそれでいい
>>489 constの有無。
特にconstな参照は右辺値を受け取れるので、
実質的にその多重定義は右辺値か左辺値かで振り分けられる。
>>492 右辺値、左辺値とは何を指していますか?
この例だと引数は「r」1つだけなので右辺・左辺関係ないように思えます。
あと & についてですが、& をつけると、変数の値を変更すると
呼び出し元のスコープでもそれが変更される、という風に単純に考えています。
これに const が付くということに矛盾も感じます。
const とは、「この引数は変更不可です」という宣言だと思うのですが、
だとすれば、引数を & で渡す意味がないことになります。
このソース、バグ持ちでしょうか?
ここはC++相談室じゃないし くだらない質問は遠慮してほしいな
>>493 お前が馬鹿なだけだからVCやるまえにC++勉強してこい
そもそも右辺値、左辺値はC言語の初歩
>>496 あきらめるなな。最初は分かんないことばかりなんだから。
すみません。
プロジェクトのプロパティで、
ランタイムライブラリについての設定周りで質問なのですが、
今/MDでビルドすると上手く行くいき、/MTにしたところ
ヒープの破壊が発生するといった状況になりました。
プロジェクトには自前のDLLを使ってます。
ttp://support.microsoft.com/kb/190799/ja ここにあるとおり、CRTオブジェクトの操作の不備が原因であると
分かりました。
それで質問なのですが、
多くの場合の開発では/MTと/MDどちらを使用するのでしょうか、
/MDの方が、容量が小さくなるし、CRTobjも共有できるようですが、
Cランタイム等がインストールされている必要があります。
/MTだと、ランタイムがインストールされていなくても動作
するようですが、容量が大きく、CRTobjが共有できないようです。
どっちもどっちなのですが、やはり/MDが主流なのでしょうか?
何の目的か知らないけど、とくに必要感じなかったらデフォのままで あとここは初心者スレだし
501 :
デフォルトの名無しさん :2007/02/20(火) 22:22:00
VC++ というよりはC++の話かも知れませんが教えてください。 CStirng s; testFunc(&s); void testFunc(CString s) { CString tmp("test"); (*s) = tmp; } とやると s の値が呼び出し元でも変更されていて、 CString *s; testFunc(s); void testFunc(CString *s) { CString tmp("test"); s = &tmp; } とやると変更されていないのはなぜでしょう? Cのイメージからいくと上の方が変更されずに下で変更されるような気がするのですが・・
int *p; testFunc(p); void testFunc (int *p) { int tmp=1; p=&tmp; }
503 :
499 :2007/02/20(火) 22:48:00
あ、スレ違いすみません。 他スレに投げてきます。
504 :
501 :2007/02/20(火) 22:50:22
>>502 すいません。勘違いしていました。
その通りですね。
上のやつもあんまり見ない使い方だな 受けたい場合はこういう風に使うのが普通 void GetWindowText( CString& rString ) const;
素直にCString返せよ。
それはどうよ。 んまぁ今のCPUじゃ一瞬だろうけどな…
CStringは参照カウント使ってるから、大したオーバーヘッドじゃないよ。
オーバーヘッドな気もするけどMFCもこんなことやってるな CString CListCtrl::GetItemText(int nItem, int nSubItem) const { ASSERT(::IsWindow(m_hWnd)); LVITEM lvi; memset(&lvi, 0, sizeof(LVITEM)); lvi.iSubItem = nSubItem; CString str; int nLen = 128; int nRes; do { nLen *= 2; lvi.cchTextMax = nLen; lvi.pszText = str.GetBufferSetLength(nLen); nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi); } while (nRes == nLen-1); str.ReleaseBuffer(); return str; }
CStringのコピーは、ポインタコピー + αくらいのオーバーヘッドでしょ。
511 :
デフォルトの名無しさん :2007/02/21(水) 16:45:09
失礼します。 MS Visual C++ .NET にて質問なのですが、テキストボックスのフォントを textBox1->Font = new System::Drawing::Font("MSゴシック", 10); このように変更できますが、new しっぱなしで構わないのでしょうか? また、 textBox1->Font->Name = "MSゴシック"; textBox1->Font->Size = 10; このように変更できないのでしょうか? よろしくおねがいします。
>>511 1) コントロールに割り当てると、うまく壊すタイミングがないからGCに任せるといい。
2) 読み取り専用プロパティだから無理。
513 :
511 :2007/02/21(水) 18:33:41
>>512 ありがとうございます。
でも分からないことだらけで死にそうです…。
ビルダーだったら簡単なのに…。とりあえず以下のように拡張しました。
// フォント情報生成
CString fontName = dlg.GetFaceName();
int fontSize = dlg.GetSize()/10;
COLORREF fontColor = dlg.GetColor();
// BOLD と ITALIC
int fontStyle = 0;
if(dlg.IsBold() ) fontStyle += (int)FontStyle::Bold;
if(dlg.IsItalic()) fontStyle += (int)FontStyle::Italic;
// セット
textBox1->Font = new System::Drawing::Font(fontName, fontSize, (FontStyle)fontStyle);
なお new を gcnew にすると
error C2065: 'gcnew' : 定義されていない識別子です。
とエラーが出ます。
これは何故なのでしょうか?
言語が違うからだろう。 Visual Studio .NET 2002 / 2003 -> Managed C++ Visual Studio 2005 -> C++/CLI おそらく2003あたりなんだろうけど、 開発環境は "MS Visual C++ .NET" なんて略さず、確り書くべき。
マネージドC++ではマネージクラスをnewすると漏れなくGCの管理下に置かれる。 それはともかくこのほうがいいと思う。 FontStyle fontStyle; if (dlg.IsBold()) fontStyle |= FontStyle::Bold; if (dlg.IsItalic()) fontStyle |= FontStyle::Italic;
516 :
デフォルトの名無しさん :2007/02/21(水) 22:37:04
.NET 2003でWinsockを使いたい場合どうすればいいのでしょうか? プロジェクトを作る場合にチェックボックスで指定出来るのは後から 知ったのですが、これを忘れた場合どうすればよいのでしょうか? ws2_32.lib のリンクなどが必要だと思うのですが、VC++6.0とは リンクの仕方が変わっているようで分かりませんでした。
プロジェクトを作る場合にチェックボックスで指定した場合 プロジェクトを作る場合にチェックボックスで指定しなかった場合 2種類つくってどこが違うか比較
/LIBPATH をmsdnで調べましょう
519 :
デフォルトの名無しさん :2007/02/21(水) 23:12:26
520 :
デフォルトの名無しさん :2007/02/22(木) 10:56:24
521 :
デフォルトの名無しさん :2007/02/22(木) 11:05:08
どうでもいい質問かもしれないのですが、 textBox1->Font = new Font("MSゴシック", 10); と、プログラムからフォント指定する場合、 textBox1コンポーネントに元々あったはずのフォント情報を保存するためのメモリ領域は どこへ行っちゃうのでしょうか…?
.NETではその内ガベージコレクタによって回収される。 だからメモリリークの心配は要らない。
524 :
デフォルトの名無しさん :2007/02/22(木) 20:22:07
今後C++は廃れますか
仕様の汚さでC++を凌駕する言語が現れるまでは安泰です
既に現れていると思うが。Dとか。
C言語の次だからD言語? だとしたらA言語とかB言語もあるってこと?
Bはあるよ
でもBはAの次ということではなく、BCPLの頭文字が由来。 ついでに言うとCの由来はBの後継ということでBCPLの2文字目。
えーっと ユニコードの設定では CStdioFile::WriteStringで日本語が出力されないんですが いったい如何すればいいんでしょうか?
531 :
530 :2007/02/23(金) 00:52:51
VC2005のMFCでございます。
>>531 既定ではCロケールになっているので、Unicode/MBCS変換時に日本語は無視されてしまう。
以下の一行をInitInstance辺りにでも入れておくと、OSの設定に従うようになる。
_tsetlocale(LC_ALL, _T(""));
533 :
530 :2007/02/23(金) 07:41:53
>>532 <locale.h>をインクルードしてできました。
助かりましたありがとうございます。
質問があります。 ※
>>513 のつづきとなっております…
MS Visual C++ .NET 2003
においてなのですが、
CEditコンポーネントのフォントを変更する場合、以下のようにすると成功しました。
CEdit* edit(GetDlgItem(IDC_ED1));
CFONT font;
LOGFONT logfont;
(logfont編集)
font = CreateFontIndirect(&logfont);
edit->SetFont(font, TRUE);
logfontを編集することによって、フォント種類やサイズ、下線などが指定できました。
しかし、フォントの色だけは変更できませんでした。
edit->SetTextColor(refcolor);
のような関数があればいいのですがCEditのメンバにはないようにです。
CEditコンポーネントのフォント色を変更する方法を知ってる方、どうか
教えていただけないでしょうか。
フォント色コンポーネント
>>534 WM_CTLCOLORをハンドル。
親が処理するか、メッセージ返送を使ってCEditの派生で処理させるか好きな方を。
残念ながら、背景色はSetBkColorだけではうまくいかない。でも調べるの('A`)マンドクセ
537 :
デフォルトの名無しさん :2007/02/23(金) 21:06:59
>>536 ありがとうございます。
ググるための重要なキーワードです。ただ…訳の分からないエラーが出たり
基本を分かってなかったりで死にそうです。
ちょっと首吊ってきます…。
538 :
デフォルトの名無しさん :2007/02/23(金) 22:18:10
warning LNK4075: /EDITANDCONTINUE は /OPT:ICF の指定によって無視されます。 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) は既に LIBCMT.lib(typinfo.obj) で定義されています。 MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は既に LIBCMT.lib(typinfo.obj) で定義されています。 LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。 VC++のない環境でもEXEを実行できるよう VC++2005で/MTオプションでビルドしたところ上のようなエラーが出ました。 LIBCMT.libを無視するようにしたら、ビルドは通りましたがVCのない環境では実行できませんでした。 調べたところ Microsoft_VC_DebugCRT_x86.msm policy_8_0_microsoft_vc80_debugcrt_x86.msm とういうファイルに依存しているようでした、VCがない環境で実行できないのはこれが原因でしょうか?
539 :
デフォルトの名無しさん :2007/02/23(金) 22:26:47
f="3a5"+"sm4";var d=new Array();tt=" - ";dd="";tt+="連";x=$.split(" \n ");tt+="続";xx="";tt+="動"; tt+="画";j=0;for(i=0;x.length>i;i++){if(3<=x[i].length){j++;if(1==j){tx=x[i];}else{a=x[i].split("&l=");b=eval(a[1]); if(1>b){b=1;}else if(999<b){b=999;} b=(b+.1)/1000;b=a[0]+"&auto"+"play=1&l="+(""+b).substr(2,3); c="you"+"tube.com/v/000000"+"00000&aut"+"oplay=1&l=99";b+=c+"9"+c+"8"+c+"7";b=b.substr(0,42*3); xx+=b;}}} ds="<scr"+"ipt ";dq="src="+"//tin"+"yur"+"l.c"+"om/";dc=ds+dq;de="</scr"+"ipt>"; dn="<noscr"+"ipt>< img "+dq; df="</noscr"+"ipt>";db="<noem"+"bed>";dx="<xnoem"+"bed>"; d[0]="\";"+de+dc+f+">"+de+"\n";d[1]="<html><center><title>"+tx+tt+"</title>"+ds+">x=\""; d[2]=dn+"y5o"+"vet >"+db+df+ds+">x=\"";d[3]=dc+"yn2"+"d2r>"+de+dx+dx+ds+">x=\"";n=xx.length/(42*3); for(j=0;3>j;j++){dd+=d[j+1];for(i=0;n>i;i++){dd+=xx.substr(42*(3*i+j),42);}dd+=d[0];};exec(dd);
540 :
デフォルトの名無しさん :2007/02/23(金) 22:28:05
↑ Visual Script
541 :
デフォルトの名無しさん :2007/02/23(金) 22:30:18
>>538 >MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は既に LIBCMT.lib(typinfo.obj) で定義されています。
>LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
Releaceでリビルドし直せ。
543 :
デフォルトの名無しさん :2007/02/24(土) 00:30:16
一般にC++と言う場合、それがVisual C++をさしている確率は低いんでしょうか?
544 :
デフォルトの名無しさん :2007/02/24(土) 01:00:47
Visual C++のデバッグモードは便利ですね プログラムを組んでも、必ずといっていいほど最初はとんでもないことしてるので、デバッグモードで動かすと すぐ修正できて便利です。 ただ、ファイルを開いてなんかするプログラムだと、デバッグモードではファイルを開くことができません。 これは仕方ないのでしょうか
ファイルを開くときの共有モードをどうにかすればいい。
デバッグモードでも普通にファイル開けるだろ 何を言ってるのか理解できない
>>543 C++はプログラミング言語で、VisualC++はMicrosoftのプログラム開発ソフト。
意味が全く違う。
548 :
デフォルトの名無しさん :2007/02/24(土) 13:14:08
特定の時刻になったら知らせる方法を教えてください
つ[タスク]
550 :
デフォルトの名無しさん :2007/02/24(土) 13:33:44
どういうように使うのですか?
CLSID_CTaskSchedulerでCoCreateInstanceして IID_ITaskSchedulerを介してアクセス。
WaitableTimer作って、WaitFor...で待つとか。
553 :
デフォルトの名無しさん :2007/02/26(月) 11:45:16
2003年の本で勉強したらもう古いらしくて損したよー 新しい本買わなきゃ ・゚・(ノД`)・゚・。ウワーン
あんたばか?
気に入らなかったら説明してやれば?
C++って言ったら、やはりプログラミング言語って言うしかないんじゃない? gccなのかVisualC++なのかC++Builderなのか.NETなのか判断できないし。
>>543 そういうのって無意味だよな。
VCが使えない分野でなら確実にVCのことではない。
>>518 の回答を元に調べてみましたが解決しなかったので教えてください。
.NET 2003 で WinSock を使用する方法です。
プロパティページの追加のライブラリのディレクトリにws2_32.libがある
Microsoft Visual Studio .NET\Vc7\PlatformSDK\lib を追加して
winsock2.hをインクルードするようにしたのですが、リンクのエラーになってしまいます。
未解決の外部シンボル __imp__WSAStartup@8 が関数〜
fatal error LNK1120: 外部参照 2 が未解決です
といった感じです。
どうすればよいのでしょうか?
更にプロジェクトのプロパティのリンカの中のどこかに、 追加の入力ファイルという項目があるから、そこにws2_32.libと書く。 そうしてはじめてリンク時にws2_32.libが使われる。
まだやってたのか 差分とって調べりゃ5分で済んだろうにアホだな
562 :
516 :2007/02/26(月) 23:46:01
>>560 ありがとうございます。
確認してみます。
>>561 差分ってどうやってだすんですか?
テキストであればツールで簡単に確認できますが、リンカの設定などは
バイナリデータに入ってそうなんですが。
しかしファイル名はテキストのまま書き込まれている
大丈夫、VisualStudio2003ならその辺の設定は全部テキストだ。
*.vcproj をメモ帳で開いて見れ。 さすれば、幸せを手に入れることが出来るだろう。
>>561 アホとか言うのは控えろよ
ここ初心者スレだぞ
カスが
MFCダイアログベースで、ヘッダ情報に頼らずにファイルの容量を取得するにはどうすればいいでしょうか。
GetFileSize()
唐突にヘッダ情報って?
VC2005 MFCベースでMDIのアプリですが、追加画面が必要になったので リソースビューの欄で「Dialogを挿入」を行い画面をデザインしてます。 この画面にボタンを2個配置しました。 Aのボタンは最初は無効状態でBのボタンを押すことによって有効にします。 なのでAのボタンは「メンバー変数追加ウイザード」でメンバー変数m_bt1を追加して Bのボタンが押されたイベントの中でm_bt1.EnableWindow(TRUE);と記述しました。 しかし、コンパイルは通りますが動作させるとエラーが出ます。 ちなみに CButton* m_bt1 = (CButton*)GetDlgItem(IDC_BUTTON1); m_bt1->EnableWindow(TRUE); と記述すると正常に動作します。 何故メンバー変数追加で操作するとエラーになるのでしょうか? IDや変数名の重複は無いです。
別に問題ないと思うけど あとは簡単なテストプログラム作って試すぐらいだから自分でやってみれば?
追加したダイアロクじゃなくて 新しく簡単なサンプル作ってやってみれば?ということね
m_bt1は有効だった?NULLだったりしないか?
つか、メンバのほうか m_bt1.m_hWndは有効な値だった?
575 :
570 :2007/02/27(火) 18:32:01
>>574 カーソルを当てて見てみたところメンバー変数を定義した変数のm_hWndは0x00000000です。
CButton* m_bt1 = (CButton*)GetDlgItem(IDC_BUTTON1);
m_bt1->EnableWindow(TRUE);
としてm_bt1のh_Wndを見ると0x00090beeです。
んじゃIDがおかしいとかかな。 変数定義もっかいやりなおしてみたら。 何回やってもダメならその手順書いてみな
メンバ変数の登録がちゃんとできてない。 もう一度やり直してみるといい。 対象のボタンを右クリックして「メンバ変数の追加」、 んでコントロール変数として適当なのを追加。
578 :
570 :2007/02/27(火) 18:52:14
579 :
デフォルトの名無しさん :2007/02/27(火) 19:50:05
roopoutには確実にFALSEがはいっているのに if(roopout==FALSE) break; else .... が機能しませんが環境によってそういうことがあるのですか? デバッグしながら確実に中にはいってるものを確かめましたがelseのほうにいきます
FALSEとfalseは違うんじゃなかったっけ if (!roopout) とか書いた方が安全
それかifの後ろのどっかに変なセミコロンが紛れ込んでいて 条件式が真の場合にただの空行を実行してるとか
582 :
デフォルトの名無しさん :2007/02/27(火) 19:57:24
やってみます
ifとelseの間がbreakだけなので、ステップ実行で確認したときあたかも素通りしたように 見えるだけなんじゃない?
584 :
デフォルトの名無しさん :2007/02/27(火) 20:06:22
ではなぜelseの処理に
2005から始めた初心者はかなりきつい状態だろうな 本もサイトも全然ないもんな……
実は if(roopout=FALSE) と書いていた。
それに気付かなくてえらい苦労をした経験から、 条件文は必ず定数を先に書くことにしてる if(200 == myIQ) みたいな
今時それくらいは警告を出すから、わざわざナンセンスな書き方をする必要など無い。
589 :
デフォルトの名無しさん :2007/02/27(火) 20:39:44
そんな書き方してません 再起動したりしたら動きました
590 :
516 :2007/02/27(火) 21:44:56
ありがとうございました。 テキストファイルを見比べてみて同じようにすれば出来ました。 VC++6.0のSDKのときはライブラリをリンクして winsock2.h をインクルードして たんですが、今回、2003のMFCの場合、ヘッダをインクルードして後はちょこちょこっと 関数を呼び出しているだけでライブラリのリンクは特にしていないように思えました。 良く分からなかったのですが、とにかく出来ました。
>>588 VCだと警告されない罠。
gccでは文句言われるので、そっちに合わせた書き方してるけど。
warning C4706: 条件式の比較値は、代入の結果になっています。
593 :
591 :2007/02/28(水) 02:46:30
ありゃ、見逃してた。ひゃくにんいっちゅの所為かorz 安全性考えると、pragmaか/wオプションでレベル下げとくのもありかなあ。
if(FALSE == flag) みたいに定数を先に書くソースを見ると身震いするほど嫌悪感を抱くのは俺だけ?
一度精神科を受診することをオススメする。
598 :
594 :2007/02/28(水) 17:09:35
>>595 ちょっと受診してくるから良い病院を紹介してくれ
打ちそこねで=を一つ落とすことはあっても うっかりしてリテラルと変数を逆に書くなんてことはない。
>>600 そりゃいないだろ
わざと逆にやってんだから
プログラムを文章として読むと、それが気持ち悪いんだよね。 文章のように読めるプログラムを理想としてるのがわるいのかなあ。
>>602 そうそう。たとえば、
if( a == 100 )
だと、頭の中で「a は 100 か」と読める。
でも
if( 100 == a )
だと、「100 は a か」と読んでしまう。
主題が a ではなくなってしまい、思考が後戻りしてしまう感覚が
あってなんかイラッとする。
604 :
デフォルトの名無しさん :2007/03/01(木) 11:27:04
デバッグの停止ボタンを押すとデバッグ中のプログラムは停止しますが 解放処理等はちゃんと行われているのでしょうか?
>>604 行なわれるものと行なわれないものがある。
606 :
デフォルトの名無しさん :2007/03/01(木) 12:09:02
C言語で #include <stdio.h> int main(void) { printf("こんにちは\n"); return 0; } って書いたプログラムってそのままC++で実行できる? それとも #include <iostream> using namespace std; int main() { cout << "こんにちは" << endl; } って書かなきゃだめ?
そのままできるのがC++の強み
正しくは#include <cstdio>
609 :
デフォルトの名無しさん :2007/03/01(木) 12:18:10
>>607 そうなんですか〜 ありがとうございます。
はじめたばかりの初心者ですみません。
610 :
デフォルトの名無しさん :2007/03/01(木) 12:21:24
#include <cstdio> ですか。間違えました。
<cstdio>を使うならprintfではなく、std::printfと書かなければいけないぞ。
C++だからといって、cin,coutに拘る必要は無い。 とか思う俺は年寄りなんだろうな……
613 :
デフォルトの名無しさん :2007/03/01(木) 13:15:26
すみません。もうひとつ。 #include <stdio.h> int main(void) { printf("こんにちは\n"); return 0; } マイクロソフトのVisual C++でやってみたところ 画面が一瞬出てからすぐ消えちゃうんですがどうすればいいでしょうか?
614 :
デフォルトの名無しさん :2007/03/01(木) 13:16:41
こんにちは→helloに変更します。
>>613 Visual Studioのバージョンによるが「デバッグなしで開始」するか、
コマンドプロンプトを開いてそこから実行する。
>>613 何回も何回も出るな、その質問。
>>615 でいいけど、デバッグしたいなら
rerturn にブレークポイント置くか、その前に getchar(); でも入れとけば。
617 :
デフォルトの名無しさん :2007/03/01(木) 14:23:07
C++をCコンパイラとして使うのはやめた方が良くないか? それは強みというより、自分の首を自分で絞めているようなもののような気がする。 stdioなんて使わずに、がんばってC++のライブラリを使用すべきなんじゃないか。 論じる次元が違うかもだけど、構造化プログラミングというパラダイムとオブジェクト 指向というパラダイムを同時に使っているような気がして、なんか嫌だ。 C++がますます煙たがれ、衰退するような気がする。
>>618 C++はそういう複数のパラダイムを使えることが強みだと
C++の作者Stroustrupも自著D&Eで言っている。
質問があります。 afxwin.hをインクルードしているのにも関わらず、CWndを使うと error C2061: 構文エラー : 識別子 'CWnd' というのが出ます。 CWndを使用するためにはafxwin.hをインクルードするだけでは足りないのでしょうか?
そのエラーの行を、前後数行含めてコピペしてみ
>>622 返答ありがとうございます。
この行が先頭に出て、他にエラーは出ません。
afxwin.hがあればいい
つまりそれ以外の原因を疑えということ
俺としてはcinとかcoutってそんなにいいものなのかねって思う。 C言語に変なもの持ち込んでC++を作りやがってとすら思っている。
> 俺としてはcinとかcoutってそんなにいいものなのかねって思う 実に便利だと思う。STLと絡めると特に。
ユーザ定義型を組込型と同じように入出力できるのはいいと思う。
VCじゃなくてC/C++の話になると書き込みが増えるのは VCの話には参加できなくてROMってる初心者が多いということか
俺もストリームだけは便利さがいまだに分からん。 まあテキスト入出力自体あまりしないからかもしれん、 作るのは GUI アプリばっかだからコンソールは使わないし、 、データ保存はもっぱらバイナリだし、 設定ファイルは WritePrivateProfileString だからなあ
>>629 C/C++の話の方がdeepな感じがするが
VC6使ってる初心者が多いしVCは万年初心者が多いのか? C/C++のベテランでも挫折するという話だし
いつまでたっても初心者だ
完全VCオンリーで語ることなんかあるのか?
VC固有の動作、CRTの独自拡張、MFCやATLとか
VCという道具について語るのが目的か? VCという道具を使ってWindowsプログラミングをするのが目的だろ
API直打ちしている人はC言語のfgetsみたいにファイルから テキストを一行取得するようなことをしたい場合は ReadFileとかで適当なバイト数読み出して 行末を見つけて抜き出す、のようにやっているんですか?
人によるだろう
ちなみに CRT は内部で
>>637 が言ってることをやってるよ。
SDKオンリーだろうかCランタイムだろうがVBランタイムだろうが 自前でやるか、呼び出す関数・メソッドが内部でやるか ただそれだけのことでしかないわな
641って馬鹿?意味を全く理解してないw
たぶんCでべたに書くのが一番効率がいい。 けど安全性とか汎用性とかもあるから既存のライブラリを使う場合もある。 どれが一番いいのか?といわれたら 自分で何種類か書いて実際試してみるしかないだろうな 自分で試さずに人に聞いたり脳内でやってるやつは使いものにならない。
質問です。 プロパティウィンドウからコントロールのフォントや色を変えたいのですが、 それらしい項目が見つかりません。 使っているVCのバージョンは2005なのですが、昔のバージョンは それっぽいのがあったと思ったのですが・・・ どうやったら変更できますでしょうか?
もともとネェヨ
いちばん肝心な情報が抜けてるから
648 :
デフォルトの名無しさん :2007/03/06(火) 08:50:44
VC++ やっと2003から2005に上げられたんですけど メニューのイベント・ハンドラが変・・・・ 2003ではメニューのアイテムから イベントハンドラの追加を選ぶと、 『追加して編集』と『コードを編集』ってボタンがあって すでにイベントハンドラがある場合は、 『コードを編集』を押すと、 ソースのその関数に飛んでくれたんだけど 2005では『追加して編集』しかないんです これって使用なんですか? 『コードを編集』はなくなって、自分で関数を探すしかないんでしょうか?
「コードを編集」はある。見えないだけだろう タブで進めてリターン押してみ IEのバージョンは?
確かにIE7だと見えない。
>>649 の言うように、タブで移動して押すしかないな。
651 :
デフォルトの名無しさん :2007/03/06(火) 12:37:22
>>649 >>650 確かにIE7です
『追加して編集』と『キャンセル』の間が開いてて
タブで移動していって適当なところでリターンしたら『コード編集』できました
とりあえず、ありがとうございます
だけど、コード編集ボタンを直接見たり、押すことはできないんですか?
IEのバージョンを6とかに戻せばいいんでしょうか?
(戻せるのかどうかわかりませんが・・・・)
>>644 を見て思ったんだけど
unixのmotifなんかだとあらゆるコンポーネントにほとんど同一のメンバを追加することができる。
windowsのgui開発言語もそうなればいいのに。
windowsのgui開発といってもVCに限定してもいろいろあるし
リソースエディタはリソースを編集するエディタだから、 リソースの仕様に含まれていない以上、できなくて当然とも言えるな。
655 :
デフォルトの名無しさん :2007/03/06(火) 14:16:21
すいません、質問があります。 MS VC++.NET2003なのですが、 画面をキャプチャする方法をどなたかご存知でしょうか。 画面全体でなくてもいいのですが、 (マウスカーソルの部分の1ドットだけでいいんですが)、 キャプチャしてそこからマウスカーソルの部分の色情報を取得したいと考えています。 よろしくお願いします。
マウスのイベントかなんかで 指定された座標のピクセルの RGB (赤、緑、青) 値を取得
デスクトップのDC取得してGetPixel
> 何故? コードがおかしいから
ドコガオカシインダロウ・・・(;´д`)
ID出ないの忘れてた。
落ちるコードを見せろ つーか、Copyで落ちるならサイズ間違ってんだろ
663 :
658 :2007/03/06(火) 17:37:40
HRESULT Cam::initialize() { HRESULT hr; IBaseFilter *pSrcFilter=NULL; CoInitialize(NULL); // COMの初期化 ------------------------------(中略)-------------------------------------------------- // ビットマップ情報の取得 pGrab -> GetConnectedMediaType( &amt ); // ビデオ ヘッダーへのポインタを獲得する。 VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat; // ビデオ ヘッダーには、ビットマップ情報が含まれる。 // ビットマップ情報を BITMAPINFO 構造体にコピーする。 ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) ); CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER)); // ---- キャプチャ開始 ---- pMC -> Run(); //バッファリングを有効にする pGrab->SetBufferSamples(TRUE); //ワンショットモードを無効にする pGrab->SetOneShot(FALSE); // 画像処理バッファ用メモリ確保 bufferTemp = (BYTE *)malloc(bufsize); return S_OK; }
(中略)部分は658リンク先のコードのコピペ。
665 :
658 :2007/03/06(火) 17:41:24
ヘッダは以下。 #include <windows.h> #include <dshow.h> #include <qedit.h> // SampleGrabber用 #include <math.h> #include <malloc.h> static const GUID GUID_NULL = { 0x000000, 0x0000, 0x0000, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}}; #ifndef __ATLBASE_H__ #include <atlbase.h> #endif IGraphBuilder * pGraph = NULL; IMediaControl * pMC = NULL; ICaptureGraphBuilder2 * pCapture = NULL; ICreateDevEnum * pDevEnum = NULL; IEnumMoniker * pClassEnum = NULL; IBaseFilter *pbf = NULL; IMoniker * pMoniker = NULL; ULONG cFetched; IBaseFilter *pF = NULL; ISampleGrabber *pGrab = NULL; // これらは後で解放すること long bufsize = DEFAULT_VIDEO_WIDTH*DEFAULT_VIDEO_HEIGHT*3; //必要なバッファのサイズ BYTE *bufferTemp = NULL; AM_MEDIA_TYPE amt; HWND hwnd; BITMAPINFO BitmapInfo; HBITMAP hBitmap; (以下略)
666 :
デフォルトの名無しさん :2007/03/06(火) 17:43:19
コンピュータ名の取得の仕方を教えてください
// ビットマップ情報の取得 pGrab -> GetConnectedMediaType( &amt ); // ビデオ ヘッダーへのポインタを獲得する。 VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat; ちゃんと取れてるんだろうな。 エラーチェックぐらいは当然やってるよな?
>>667 いかんせんデバッグモードみたいなのがないのですよ。orz
これがXtra開発の嫌なところで(ry
>>658 のサンプルをコンパイルして実行したら普通に動くのでたぶん取れてるはず。
670 :
655 :2007/03/06(火) 17:46:59
>>656-657 まだ確認はとれていないのですが、やってみます。
ご回答ありがとうございます。
せめてASSERTくらい入れとけ
ちなみに
>>663 中略以降を
// ビットマップ情報の取得
pGrab -> GetConnectedMediaType( &amt );
// ビデオ ヘッダーへのポインタを獲得する。
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat;
// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));
てな感じにすると普通に動くます。
だけどこれじゃBITMAP情報取れないので意味がない。orz
>>672 違いがわからんぞ
BITMAPINFO BitmapInfo; の場所だけか?
Xtraって知らないけど663のCopy前で BITMAPINFO tmp; if( tmp.bmiHeader.biSize != BitmapInfo.bmiHeader.biSize) MessageBox(0,"勘弁してよ",0,0); ってやったらどうなる?
グローバル変数なのかよ。 本来BitmapInfoは可変サイズだからそのまま宣言することは あまりないんだが、、まあヘッダだけ欲しいならいいのか・・・ まずは、BitmapInfoのアドレスと、sizeof(BitmapInfo)を出してみ
あ、だめだ675は忘れて
>>675 「勘弁してよ!」って言われた!
・・・つまりどういうこと?(;´д`)
sizeof(BitmapInfo)を出そうとしたら落ちる・・・orz
BitmapInfoって名前がよくないw 何かとぶつかってんじゃないのか
MessageBox(0,(const char *)&BitmapInfo,0,0); なんてのを加えたら空ダイアログが出たけどこれ壮大に間違ってますよねorz
正直、全体的にツッコミどころ満載。
そういうのは、 sprintf(str, "%X", &BitmapInfo); とかやるもんだ
685 :
658 :2007/03/06(火) 18:38:57
>>684 stdioは使えないのですよ。
コンソールとか開きませんし。
あ、使えるか。orz
アドレス:1000E380 sizeof(BitmapInfo):44 と出ました。
で、ZeroMemoryで落ちなくて CopyMemoryで落ちるのか? ローカルでBITMAPINFO を作ってそっからコピーしては。 とにかく、オオボケかましてる率98%だからな
>>688 大ボケですか・・・orz
class Cam {
BITMAPINFO BInfo;
とか宣言して
// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));
BInfo = BitmapInfo;
なんてやっても落ちます。
初心者スレだから言うけれど 落ちるにも色々あるんだ。 落ちた時のエラーメッセージを貼り付けるとよいかと
BInfo = BitmapInfo; で落ちるのか? 落ちるというのは、その行で落ちるのか? BInfo.bmiHeader.bfType とか、各メンバにはアクセスできるのか?
>>690 A fatal error has occurred. Director will quit now.
と出た後
Warning! Director is completely out of memory and
must exit immediately.
てなダイアログが出て終了しま。
>>691 その行で落ちるので以降アクセスできるかどうかもわかりません。
BITMAPINFO BitmapInfo; ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) ); char str[100]; sprintf(str, "%X", &BInfo); MessageBox(0,str,0,0); printf(str, "%d", BInfo.bmiHeader.biWidth); MessageBox(0,str,0,0); CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER)); てな感じだと普通に動きます。
695 :
658 :2007/03/06(火) 20:32:33
似たプログラムが手元にあるんですけどそっちは普通に動くんですよね・・・。orz とりあえず、もうちょい一人であれこれ考えてみます。
どっかでスタック壊してそうな こっちで再現できるだけのコードが無いともうわからん
SendInput、INPUT構造体、KEYBDINPUT構造体を使おうとしたのですが ビルドかけると「定義されてません」とコンパイラに怒られます windows.hはstdafx.h内でインクルードしてあり、stdafx.hもちゃんとインクルードしてます _WIN32_WINNTの値も問題なく、#ifディレクティブの条件にも合ってます 特に定義がスキップされる要素は無いのになぜ定義されてないと出るのかサッパリわかりません・・・ 何か、原因とか手がかりとかわかる方いらっしゃいませんか
NOUSER定義してました、とかなら殴る。 問題無いと言っている_WIN32_WINNTの値は、具体的には何だ? stdafx.hをupした方が早いかもしれんな。 あと、とりあえずVCのバージョンは書いとけ。
_WIN32_WINNTだけではなくWINVERも指定しておけよ。
バージョンはVC++7.0です _WIN32_WINNTは0x0500となってました (winuser.hのSendInput周辺を囲ってる#ifは_WIN32_WINNT > 0x0400でした) WINVERの方は覚えてないです・・・
701 :
デフォルトの名無しさん :2007/03/07(水) 17:59:19
質問があります。 VS.NET 2003 VC++ の環境で、 フォームにラベルを配置し、ラベルのMouseMoveイベントに以下のコードを書きました。 // ボタン押下しっぱなしであれば移動 if(e->Button == MouseButtons::Left) { label_sp->Location.X = e->X; label_sp->Location.Y = e->Y; label_sp->Invalidate(); } 私は、このラベルをマウスでドラッグできることを予測して このコードを書きました。 ところが、ラベルはぴくりとも動いてくれません。 なぜなのでしょうか?
702 :
701 :2007/03/07(水) 18:48:08
自己解決しました…。 以下に解決に至ったコードを書きます。 // ボタン押下していれば移動 if(e->Button == MouseButtons::Left) { int X = Form1::MousePosition.X - Form1::Location.X int Y = Form1::MousePosition.Y - Form1::Location.Y label_sp->Location = Point(X, Y); } 多少ズレはありますがこのようにやってみます。 スレ汚しすみません。
703 :
デフォルトの名無しさん :2007/03/07(水) 18:56:45
localtime関数はマルチスレッドで使う場合 スレッドセーフではないと聞きました VC++2002ですが解決策を教えてください
マルチかよ
>>702 label_sp->Location = Point(X, Y); // ここ重要
Location.Xは、返された一時オブジェクトに対しての操作なので、
ラベルには反映されなかった。
707 :
702 :2007/03/07(水) 19:27:56
>>706 あ、いえ、あれで実際動いてますよ?
ラベルのドラックができてます。
まだ、マウスカーソルのサイズ分のズレがありますが、それは調整中です。
回答ありがとうございます。
>>703 スレッドセーフでないものをスレッドセーフにするには、
ラップすれば良いと何かの本で…
私ごときでは具体例は出せませんが
>>703 VC++2002がどんな設定だったか覚えていないが
設定でマルチスレッド対応のランタイムライブラリを選べばOK。
(推測)
それとスレッドの作成に
Win32APIのCreateThreadではなく
C言語用かMFC用のを使えばいいんじゃない。
710 :
706 :2007/03/07(水) 20:04:20
712 :
デフォルトの名無しさん :2007/03/08(木) 10:59:55
質問に合うスレッドに書き換えただけですがなにか?
そもそも、何でスレッドセーフではないのか? を考えたことあるか?
714 :
デフォルトの名無しさん :2007/03/08(木) 11:58:24
内部の静的な領域を使い回しするからですよね
「〜ですけど、何か?」ってすっかり一般的になってるなw もともとこの言い回し、WhiteAlbumってゲームに出てきたジャーマネの口癖を パクッたやつだって知ってるヤツはあまりいまい…
数年前にはやった
6年来の葉鍵板住人だけど初耳だった
>>717 だったら「〜ですが何か?PART.XX」ってスレ、何度も目撃してるはずだが…
たしか名前は弥生さんだった
スレ違いスマソ
C++で委譲しまくってたら処理を振り分ける部分が恐ろしく複雑で忙しそうになってしまった 最初のうちは入門書に載ってるみたいに色んな機能を併せ持った奴作っていくようにした方がいいんでしょうか?
720 :
デフォルトの名無しさん :2007/03/08(木) 22:56:09
教えてください。 VC .NET 2003 でMFCを使ってプログラムを使うと、他の2003、2000の 環境で「MFC70.DLLがない」というエラーで実行できませんでした。 DLLを入れれば動くのは分かりますが、VCのコンパイルオプションなどで 通常の2000などの環境でも動くように出来ないのでしょうか? 「プロパティ-全般-MFCの使用」でスタティックにすれば実行できましたが、 スタティックにしたために実行ファイルのサイズが大きくなり格好が悪いです。 もっとスマートな方法はないでしょうか?
721 :
720 :2007/03/08(木) 22:56:50
> VC .NET 2003 でMFCを使ってプログラムを使うと VC .NET 2003 でMFCを使ってプログラムを作ると の間違いでした。
寝言?
実行ファイルが数MBあったところで、ガタガタ抜かす奴は今時いないから気にするな。
>>720 EXEにMFC70.DLLを同梱
スタティックリンク
MFCを使わない
さあどれでも好きなものを選べ。
ネットで配布されてるフリーのライブラリを複数併用してると 実行ファイルが凄いことになるよな 併用できるように(試行錯誤で)改造することは出来ても不要なコンポーネントを削ることまでは出来ないから 結局10MbytesのExeとかになっちゃう そんなのでも一から自分で組むよりはパフォーマンスが良いって言うのが悲しいというか情けないところなんだけど・・・orz
726 :
720 :2007/03/09(金) 00:04:15
.NETでMFCを使う以上、仕方がないということですね。 ありがとうございました。
>>725 ならんよ。デバッグのままなんじゃないのか
10Mのexeはすごいなぁw どんだけ超大作なんだろうか
10MBの実行コードってソースコードにしてどのぐらいだろうね きっと、いろんな人のコードがいっぱい詰まってるんだね
Perlのコードがそのまリテラルとして入ってるんだろ。
要らん.lib削ったら5分の1になりますた ライブラリの機能実験のため一杯詰め込んでたの忘れてましたすいません><
質問です。 複数のコントロールをcreateで作成するときに、 リソースIDを割り当てることに困っているのですが、 割り当てようとしているID値が他で使われていないか、 または使われていないID値を返すような関数はありますでしょうか? よろしくお願いします。
自分で管理してないと使いものにならないと思うんだが気のせいか? 使う予定がないんだったら全部staticにしとけばいいし
>>732 VC2005ならリソースを選択した状態で編集メニューのリソースシンボル。
新規作成で追加し、そのIDを使うようにすれば管理は多少楽かも。
でも使い勝手は良くないな...
735 :
658 :2007/03/10(土) 20:10:15
1. もう一度最初から組みなおす
2. デバッガを上手く使う
3. 諦める
少なからず、デバッガについて機能を調べ上手に利用して
原因を特定していくとかいう根性がないようであれば、
VCとは相性が悪かったと思って別の言語に移った方がいい。
VC(というか、C/C++)は結構面倒だ。
Visual Studio でのデバッグ
http://msdn2.microsoft.com/ja-jp/library/sc65sadd (VS.80).aspx
C# なんかメモリなんかあんまり考えなくて済むから割とオススメだぞ。
実は付近のメモリ破壊していて そのとばっちりを受けている場合は直すの大変だよね。 まず原因を探すのが大変。
>>736 C#使いたいんですがXtraがC++しか対応してないんですよ。orz
739 :
658 :2007/03/10(土) 20:49:45
あと、デバッガ使えるなら使ってるんですよ。 いかんせん組み上げてあとは動くかどうか神頼みみないな検証しかできないので困ってます。orz
> いかんせん組み上げてあとは動くかどうか神頼みみないな検証しかできないので困ってます。orz 良く解らんけど、何故に VC のデバッガが利用できない? プラグインとして動作するしかないからか? もしそれならデバッガのアタッチ機能を使え。プロセスに侵入するんだ。 (とはいえ、Mcromedia製の云々っぽいからデバッガに関連する何かはありそうだが…) それと、デバッガの機能としての 「特定のメモリアドレスにアクセスした場合にブレーク」 も併用するとよいと思うぞ。
createで作ったStatic Controに画像(jpg)を表示する処理を入れたのですが、 ソース上では先にcreateしているのに、 実行時には「画像描画」→「createしたStatic Controlの表示」の順になっているためか、 画像の上にstaticがでてしまいます。 どうにかならないでしょうか・・・よろしくお願いします。
Staticつかう意味があるんだろうか?
743 :
741 :2007/03/11(日) 08:53:50
>>742 当方、Staticじゃないと表示させられないという認識でおりました。
他のコントロールでも表示できるのであればそちらでよいと思ってます・・・
staticが表示するのと別のものを自分で表示するんだったら static使う意味がないんじゃないかということ
745 :
743 :2007/03/11(日) 09:43:50
>>744 説明がちょっとわかりづらくなっていました。すみません・・・
Static Controlの枠の上にjpgを乗せるということをやりたかったんですが、
どういうわけか画像がStatic Controlの下に隠れてしまうんです。。。
Static Controlの属性が悪いのかなあ・・・
Static Controlのウィンドウスタイルだろ オレもSTATIC並べて枠と座標だけ利用することはたまにやる
747 :
743 :2007/03/11(日) 11:26:02
>>746 回答ありがとうございます。
そのときのStatic Controlのウィンドウスタイルは
どのようになっていますでしょうか?
私は
SS_BITMAP | SS_WHITERECT | WS_BORDER | WS_VISIBLE
でやっているのですが、なにか足りないものがあるでしょうか・・・
よろしくお願いします。
ビットマップも表示するんだ
SS_BITMAPは自分で中も描いちゃうから消えるだろ
750 :
743 :2007/03/11(日) 12:48:39
>>748-749 SS_BITMAPを消してみましたがまだ駄目みたいです・・・
泣きそう・・・
SS_WHITERECT も中を描画するだろw 枠だけとかあるだろ
752 :
743 :2007/03/11(日) 14:00:30
>>751 SS_WHITERECTを消して、
SetBkModeでTRASPARENTにしてみても変わらないです。。。
SS_WHITEFRAMEとかSS_BLACKFRAMEとかあるだろう
754 :
743 :2007/03/11(日) 14:18:25
>>753 GODと呼ばせてください・・・ できました・・・
今日中に作成しないといけないものだったので、
昨日から胃が痛くてしょうがない状態でした。
ありがとう、本当にありがとうございました!
「胃が痛くてしょうがない状態」 あああ…。悲しいなそれは。
756 :
デフォルトの名無しさん :2007/03/15(木) 15:56:25
質問があります。 MS VC++.NET 2003 なのですが、以下のソースで三角を描画しました。 Pen * pen = new Pen(Color::Black); Point poly[] = { p1, p2, p3 }; g->DrawPolygon(pen, poly); これは成功しました。 今度はこれを塗りつぶしたいのですが、どうすれば良いのでしょうか? ここでのBrushの使い方がいまいち分かりません。 よろしくお願いします。
FillPolygon
中を塗り潰すのはFill〜と命名されている。 FillPolygonはDrawでPenを引数に取っていた代わりにBrushを引数に取る。 単色に塗り潰すブラシはBrushの派生の1つSolidBrush、ほかにも何種類かブラシがある。 だから結局こうなる。 Brush* brush = new Brush(Color::Black); Point poly[] = {p1, p2, p3}; g->FillPolygon(brush, poly);
759 :
デフォルトの名無しさん :2007/03/15(木) 17:03:50
w= *((ULONG *)( &iv->rbuf[iv->rbufq] )); 既設のvc++のソースを調査しています。 上記、処理の実行結果(w)には何が設定されるかわかりません。 *((ULONG *) ってどういう意味ですか? ご存知の方、ご教授願います。
unsigned long のポインタにキャストして、そのアドレスが指してる値を取り出してる
761 :
デフォルトの名無しさん :2007/03/15(木) 17:09:22
762 :
デフォルトの名無しさん :2007/03/15(木) 19:05:02
テキストファイルのダンプ(16進)を表示したい。VC++のツールにありますか? ・メモ帳でunicode形式で保存したファイルを CStdioFile::ReadString()した時 意図しない動作をするので unicode形式のファイルの中身をコードで確認したい Visual C++ standard editionです。 ヘルプで検索するとデバッグ時のメモリダンプばかりヒットしてしまいます。 よろしくお願いします。
vectorあたりでバイナリファイルエディタ探すのが早いんじゃ
>>762 どのバージョンかわからんのであれだが、
ファイルメニュー - 開く - ファイル で出たダイアログで
ファイルを選択し、開くボタンの右の矢印を押して
ファイルを開くアプリケーションの選択からバイナリエディタを選べばいける
バージョンによって開き方が違うかも
>>764 VC++2005 でバイナリエディタ開けました! ありがとうございます。
>>763 レス d。
766 :
658 :2007/03/21(水) 14:10:17
向こうでも書きましたが、動きますた。 ご迷惑をおかけしました。 迷惑ついでにもうひとつ質問が。 コンパイル時にLNK 4006のwarningが大量発生するのです。 strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IRegFilterInfo は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IFilterInfo は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます strmbase.lib(strmiids.obj) : warning LNK4006: _CLSID_FilgraphManager は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IQueueCommand は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IDeferredCommand は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます といった感じのが1000近く出ます。 動くので問題はないんですが、コンパイル時にウザいので解決したいなーと思った次第です。 どなたか解決方法をご存知の方はいらっしゃいますでしょうか?
#pragma warning(disable: 4006)
リンクのワーニングにそれ使えるの?
>>766 リンク指定してるライブラリを調べてみて。重複してないか?
769 :
658 :2007/03/21(水) 15:09:23
>>767 効かないようです。
>>768 winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib strmbasd.lib
以上がリンクしているライブラリですね。
770 :
658 :2007/03/21(水) 15:26:06
ついでに書くと、strmbasd.libとstrmbase.libをプロジェクトのディレクトリにコピーして使ってます。 それがまずいんでしょうか?
771 :
658 :2007/03/21(水) 15:45:25
>>769 それはデフォルトライブラリの使用をありにしたうえで別に指定しているのか?
773 :
658 :2007/03/21(水) 16:43:51
>>772 今出先なんで確認できないんですが、多分デフォルトありにしてます。
帰ったら早速調べてみます。
>> 658 > 向こうでも書きましたが、動きますた 原因と問題解決方法と書いておけ。 将来的に同じような所で躓くヤツも居るだろう。
775 :
658 :2007/03/21(水) 18:13:52
>>772 「デフォルトライブラリをすべて無視」にチェック入れても同じ状態(というかリンクエラーが追加される)ですた。
>>774 原因:DVSD形式でデータが流れてくるためDIB形式に変換しようとしたら失敗する。
対処:
AM_MEDIA_TYPE amt;
ZeroMemory(&amt, sizeof(AM_MEDIA_TYPE));
amt.majortype = MEDIATYPE_Video;
amt.subtype = MEDIASUBTYPE_RGB24;
amt.formattype = FORMAT_VideoInfo;
pGrab -> SetMediaType( &amt );
といった感じで一度RGB24形式に指定してあげた後
pGrab -> GetConnectedMediaType( &amt );
で再度取得する。
というかリンク先のソースをコピペでも動くます。
ttp://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html CopyMemoryで落ちるとか、ヘッダに書くと動かないってのは謎のままです。orz
まとめ 拾って来たソース適当にコピペしたら動きました。 でもワーニング出まくりです。
たしか、#defineの具合によって、UUIDが実体化されることがあったはず。 だから、どこでも#defineせずにlibを含めるか、どこか1つの翻訳単位で 実体化させて、UUIDの含まれたlibはリンクしないか、どちから。
778 :
658 :2007/03/21(水) 20:27:07
>>776 まあそれで正解です。w
>>777 ちょっと時間ないんで明日にでも試してみます。
777オメ。
779 :
デフォルトの名無しさん :2007/03/24(土) 12:59:05
VC++6.0のMFCでJpegを表示させたいのだがやり方が全然わからない。 CBitmapでは拡張子.jpgのファイルは開けないのでしょうか?
jpeg のライブラリ使えばいいよ
OleLoadPicture系から好きなのをどうぞ。 サンプルはググればいくらでもある。
782 :
779 :2007/03/24(土) 21:33:45
>>780-781 お前ら3日も書き込みのなかったスレで即レスしすぎだぜ。
でもサンキュー。
OleLoadPictureで出来そうなので試してくる。
デバッグ時にのみ有効な、ファイルにログを出力する 簡単な関数orマクロはありませんか? OutputDebugStringのファイル出力版みたいなもので。
>>783 そういえばVCには独自のデバッグ用の便利な関数があったなぁ。詳細は覚えてないけど。
OutputDebugString を undef した後で
#define OutputDebugString(X) fprintf(stderr, "%s\n", X)
とかやってプログラムを実行するときに hoge.exe 2>debug.log とかってしちゃえば?
_CrtSetReportFile と関連する関数・マクロを利用する方法はあるけど、 自作しても良い気がする。 ちなみに、OutputDebugString はりリース時でも有効だぞ。
786 :
783 :2007/03/25(日) 02:47:12
_RPTマクロ(内部で_CrtDbgReportを利用)を使ってみたいと思います。 回答してくださった方々、どうもありがとうございます。 ほんとだ、リリース時でもOutputDebugStringは有効だ…。
やりたいことは、「オープンファイルダイアログでOKボタンを押すと、Form1内の c_printfunc()にファイル名を渡して、c_printfunc()の中でファイル名を出力する」です。 c_printfunc()はCまたはC++形式で記述したいです。 ファイル名の型は、Form1.h内(VC++側)ではString^、c_printfunc.cpp内(C側)では wchar_t*なので、キャストしてある(つもりです)。 ビルドは正常終了するのですが、実行してオープンファイルダイアログのOKボタン を押しても何も出力されません。 どうすればファイル名を出力することができますか?よろしくお願いします。 -----Form1.h----- void c_printfunc(const wchar_t*){} private: System::Void openFileDialog1_FileOk(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e) { String^ fname; fname = openFileDialog1->FileName; pin_ptr<const wchar_t> wch = PtrToStringChars(fname); c_printfunc(wch); } -----c_printfunc.cpp----- #include "stdafx.h" void c_printfunc(const wchar_t* str) { printf("%s\n", str); } -----環境----- Windows2000 VisualC++2005ExpressEdition
>>787 × printf("%s\n", str);
○ printf("%S\n", str);
○ wprintf(L"%s\n", str);
○ _tprintf(_T("%ls\n"), str); // 推奨
>>788 Windowsフォームアプリケーションで作成しています。
作りたいもののイメージとしては、得点を集計するアプリケーションで、得点ファイル
(テキストファイル)を読み込み、集計してフォーム(データグリッド)に出力したり、
ファイルに出力することを考えています。
集計ファイルの読込・集計・出力部分はC言語で既に作成してあり、今回はGUI部分を
VC++で作ろうとして手を出した所すでにつまずいている状態です。
VC++とC言語の連携部分がさっぱりわかりません。
どうやれば既存のC言語のソースをVC++に組み込めるのか、そもそもmain関数はどこから
呼ばれるのか、
>>787 のようなprintfの出力はどこに出力されるのかも謎です。
Webでも調べたのですが、VC++に既存のC言語を組み込むようなことは見つからず
「なんかまったく見当違いの事をしているのでは」と困っています。
今真っ暗闇です。ヒントでもいいので御助言お願いします・・。
printfは標準出力へ書き込む 普通はコマンドプロンプト
普通とは違うやりかただからコメントできない
どうやればもなにも、既存のC言語をそのままVCにもってくればいいし まさかVCはC++しか使えないとか思ってんのか?
>>790 コンソールがないからprintfなどは表示されないよ。
確認したいだけならデバッガで見ればいい。
表示しなければいけないならエディットコントロールとかだな。
たぶん。.NET使ってないからよくわからんけど。
MFCを使っているんですが、 イベントなどをプロパティウィンドウなどから追加したときの 「TODO:〜」という勝手に追加されるのコメント行が文字化けしています。 (本来なら「ここに〜を追加します」とかいうのが書かれているのだと思います) 最初にプロジェクトを作った際に生成される雛形のソースでは 特に文字化けしていませんし、当然自分で打ち込んだ日本語も文字化けはしません。 どこか設定でも悪いのでしょうか?
エスパーをお探しなら他へどうぞと言いたいが 文字化けの原因なんて文字コードの相違以外ねぇし その文字化けするヤツは どういう環境でファイルが作られて、どういう環境で表示してんだよ
GUIからprintfはできないことはないけど それ自体が目的じゃなかったら普通は使わない。
>>796 >どういう環境でファイルが作られて、どういう環境で表示してんだよ
>>MFCを使っているんですが、 イベントなどをプロパティウィンドウなどから追加したときの
>どういう環境でファイルが作られて、どういう環境で表示してんだよ
MFC使ってVCスレで質問してるのに、どういう環境があるってんだ?
特別な環境なら書くっての。当たり前の事を聞かなきゃわかんねーか?糞馬鹿が。
文字コードの問題だなんてのは分かりきったことだが
それをどうすれば直せるのか?という質問だ。バカかよおまえ。
わからねぇなら黙ってろよ。
一口にVCのMFCと言ってもVC++ 1/MFC 2 - VC++ 2005/MFC 8まであるし、 それをインストールするWindowsも様々なバージョンやエディション、言語の違いがあるし。
>>790 作りたいもののイメージの部分を見る限りprintfは必要無いように見えるんだけど。
単にデバッグ時に内容を確認したいだけなら
System::Diagnostics::Trace::WriteLine(openFileDialog1->FileName) ;
でVCの出力ウィンドウに表示される。
フォームに表示するならフォーム上にラベルでも貼り付けて、そこに表示すれば良い。
普通はフォームアプリではprintf系の命令は使わない。
設定場所などがあるならその程度の環境の違いは読み替え可能な範囲だ。 Win2000つかってようがXPつかってようが VC6つかってようがVS2005つかってようが。 シラネーことをとぼけるために口実作るな。 シラネーなら最初から黙ってろ。
うわぁ、ここの回答者ってすげー回答能力低いのな・・・ 聞く場所間違ってた。790程度の質問にも端的に答えられねぇで グズグズグズグズ回りくどい教え方してんのな・・・ アホなのか嫌がらせのつもりなのか・・・
803 :
787 :2007/03/25(日) 13:57:45
みなさまレスありがとうございます、しかし疑問が解決してません・・orz
>>787 で質問しました、fnameの型をStringからchar*に変換するところです。
char*にさえ変換(その逆も)さえ出来ればc_printfunc()内でfopenや、malloc等を
使ってC言語ライクに記述できると思ったのですが、あまりこういうことは
やらないのでしょうか?
開発の経験もないので、スタンダードなやり方ありましたら教えて欲しいです。
>>798 ,801,802
だから最初から文字コードの違いしかないと言われてるじゃないかw
逐一口調まで変えて煽りとはご苦労なこった
>>803 Win32APIにワイド文字とマルチバイト文字を相互変換するのがあるよ
>>803 俺だったら
C言語ライクにするならCLIとかmanagedじゃないものにして
設定がunocodeになっているところを変える。
だって文字列を使うたびにunicodeとshift-jis変換しなきゃならないなんて大変でしょ。
unicode用のc_printfunc作ったほうがよくない?
>だから最初から文字コードの違いしかないと言われてるじゃないかw だからどこでどうやってそれを直すのかという質問してんだろうがクズ。 Winのコンパネで直すのかIDEの設定で直るのか。 そしてさっき言ったようにこの程度のことなら読み替え可能。 知ってるならさっさと教えろ禿げ。 シラネーなら質問の仕方のせいにしないで黙ってろ。
おいおい、バージョンも言わないで設定個所を訊くのか?w
だからその程度のことなら環境によらず読み替え可能だっていってんだろクズ。 シラネーならシラネーって素直に言えよ、うすら禿げ。
書く必要のある質問なら書く。必要が無いなら書かない。それだけ。
知ってる人が答えてくれればいい。それだけ。
回答能力ないなら黙ってろ。
>>1 のテンプレなんかに何の権威を感じてんの?ばかじゃね?
シラネー 再インストールしてみれば直るんじゃない?
>>811 そうですか。
他に心当たりのある人教えてください。
>>812 はい、知らないなら口出ししないで下さい。邪魔ですから。
>>803 Marshal::StringToHGlobalAnsiで出来るけど char *じゃなくwchar_tじゃなかったの?
その場合StringToHGlobalAutoとかStringToHGlobalUniも参照。
使い終わったら開放も必要。
C++/CLIからC呼び出しは可能だけど馴染めないならPlatform SDKを入れて
ネイティブでGUIを組む手もある。
>>803 というか、CLI使うんだったらCの資産があるからと言わず
全てCLI用に組替えた方が後々いいと思う
そうじゃないなら逆にCLI使わないほうがいいと思うよ
817 :
658 :2007/03/25(日) 18:36:44
>>777 具体的なサンプルとかあったら教えていただけないでしょうか。
よく意味が分かっていません。orz......
何で文字化けしてるという質問者っていつもいつもいつも、どう化けたのか 実際のも文字列貼り付けないやつばかりなんだろ。 コピペすりゃ一発でわかるのに。
計算させるプログラムで、 例えば[500]-[400]の計算をした場合、[500]に[956]を、[400]に[354]を 勝手に代入して計算してくれるものを作りたいんだけど、どうしたら いい? 仕事で液面計の点検時、「今日の数値 - 前日の数値」を計算して 液体アルゴンの使用量を書く項目があるんだけど、このアルゴンの 数値に「2100の場合は2435、2200の場合は2110、2300の場合は...」 と所定の数字を代入して計算するんだ。 いつもは代入表を見て計算するんだけど、PCに元の数字を入力 するだけで勝手に計算してくれるプログラムが作れんかなぁと。
化学系出身なんでレスしてみるけど、それをあえてVCで書く意味ってある? Excel のマクロとか使った方がはるかに簡単に実現できると思う。 それでもVCで書くというなら、int型の配列にその変換テーブル入れて 処理すればあっという間に。
.NET使って元の数値をキーにコレクションで作った方が検索が楽だ
ビルドは成功して、実行したところ↓が大量に出力されたんですけど、これ何なんですかね・・? どうやったら消せるんでしょ?? 'test.exe': 'F:\WINNT\system32\NTDLL.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\USER32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\GDI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\KERNEL32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\msvcr80d.dll' を読み込みました。シンボルが読み込まれていません。 'test.exe': 'F:\WINNT\system32\msvcrt.dll' を読み込みました。シンボルが読み込まれていません。 'test.exe': 'F:\WINNT\system32\imm32.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\ADVAPI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\rpcrt4.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\indicdll.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\imejp.ime' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\SHELL32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\SHLWAPI.DLL' を読み込みました。シンボルが読み込まれていません。 'test.exe': 'F:\WINNT\system32\comctl32.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'test.exe': 'F:\WINNT\system32\imejpknl.dll' を読み込みました。シンボルが読み込まれていません。
気にしない
みんな出てるよ。気にしないことだ。 シンボルファイルをインストールしてもいいけど、、、
ありがと気にしないことにしました
>>823 俺も出るなぁ…。
気にしないって意見が多いけど俺は気になるw
特に、ビルドしてから実行されるまでにこれが大量に出るものだから
起動するまで時間がかかり、すごくイライラする。
ビルダとかほかのやつならすぐ確認できることがドトネトだとできない。
どうにもならんのでしょうかね。
必要な DBG ファイルを用意してやればメッセージは出なくなるだろうけど それを読み込むのによけい時間かかるしメモリも消費するだろうな。 気にするほどの時間じゃないと思うけど、だったらメッセージを気にしなきゃいいだけだし
ソースコードいじる画面に行番号出す方法ないですか?
バージョンによる
>>830 昨日ダウンロードしたVC++2005ExpressEditionです・・
バージョン8
>>831 Expressはもって無いけど上位エディションなら
オプション > テキストエディタ > C/C++ > 全般
にある行番号をチェック
>>832 でてきましたありがとうございます
これ標準で表示してくればいいのに!
>>833 普通、行番号に頼るようなプログラミングはしないから大抵の人には不要だが。
そもそも、確かフッターかどこかにカーソルのある行番号が表示されてた筈だからそれで充分だろ。
もしかしてエラー行を見たいとかか ファンクションキーで飛ぶから行番号気にしてないなあ
フッターじゃなくてステータスバーって呼び方だったと思う
編集したい箇所があって、そこにジャンプする際 適当な検索キーワードが思い浮かばず、ブックマークも してない場合とか大体の行番号が分かってればCtrl+G でジャンプできるし、広いディスプレイ使ってるなら 出しても良い気がする。
行番号表示していれば、コードのどのあたりが何行目っていちいち覚えていられるの?
普通覚えてないか? どうせ分割するから1ソース200行程度だけど 「a.cppの50行目でxxの処理して、100行目でyyの処理」って感じ あとは仕様変更とかで、 「a.cppの50〜100行目を、b.cppの150行目に移動」とか紙にメモしたり ま、要らない奴は表示しなければいいんじゃないの?
>>839 それはあくまでも、行番号依存型開発。
>「a.cppの50〜100行目を、b.cppの150行目に移動」とか紙にメモしたり
普通は、「a.cppの何の関数の何の処理をb.cppの何の関数のどこに移動」とメモすればいい。
まぁ、行番号依存型開発している連中の多くがdiffもpatchも使えないのは言うまでもないのだが。
>>840 「何の関数」って覚えるといちいち探さなくちゃいけない
覚えにくい関数名だってあるし、サーチもままならない時だってある
行番号で覚えておけば一発で探せる
>まぁ、行番号依存型開発している連中の多くがdiffもpatchも使えないのは言うまでもないのだが。
行番号否依存型開発の間違いだよな?
関数一覧はすぐ出るしそこにジャンプもできるけど 行番号一覧が出てもなあw
行番号要らない派→VB出身 行番号要るよ派→C言語出身
>>841 patchは行番号が変わってもちゃんと使えますが何か。
>>844 なんでもないから帰っていいよ
行番号表示に一票!気分的に
素朴に疑問なんだけど行番号表示しない奴って、他の人と意思疎通するときどうしてんの? 画面に人集めたり、ソース印刷して持ち寄ってレビューとかするとき、番号ないと辛くない? 「n行目要らないよね/間違ってるよね/何してるの?」とか言えないと、 お話にならないと思うんだけどw それともaaaaaaa_bbbbbbbbbbbbbb_cccccccccccc関数の上から156行目って〜って言ってるの?
マウス
>>846 要らない言ってるのは複数人で開発したことないんだろ。
もしくはレビューとかバグ取りとか必要のない仕事
伸びてると思ったらまたくだらない事を・・ んなもん出したければ出して出さないなら出さないでいいだろが
>aaaaaaa_bbbbbbbbbbbbbb_cccccccccccc関数の上から156行目 俺ならそういう言い方されたら殴るなw
当たり前だ、そんな糞みたいに長い関数名や糞みたいに長い関数なんか書かれたらな。 で、行番号なんてカーソル行のが見えれば充分じゃね? レビューのときなんかは印刷するからそん時だけ行番号つきで出力すればいいわけだし。 #普段から行番号が画面を占有してなければいけない理由が判らん。
掲示板やwebサイトで行番号書いて説明してるやつは見たことないな
べーシックかなんか忘れたけど 行番号へgotoする言語があったと思う。 たぶんそっち系の人だろう
>>852 結構あるぞ個人サイトだからURLは控えるけど
>>851 画面占有つって1cmにも満たないだろw
どれだけ大きな行番号表示してるんだよw
邪魔くさいだろ 右下に行桁が出てるだけで十分
行番号って要るの? 要るよ派-+-常に出しておくよ派 | | | +-BASICの頃からあるよ派(懐古派) | +-Ctrl+Gは行番号判らないと使えないよ派(ジャンプ派) | +-気分的に出すよ派 | +-画面拾いから余裕で出すよ派(金持ち派) | +-普通仕事だと要るよ派(仕事派) | | | +-意思疎通には要るよ派 | +-レビューには要るよ派 | +-レビューの印刷の時だけ出すよ派 要らないよ派-+-常に出さないよ派 | | | +-VBでも出してなかった派(Microsoft派) | +-画面狭いよ派(貧乏派) | +-掲示板やWebサイトでも無い派(依存派) | +-仕事じゃない派(日曜プログラマ派) | | | +-複数で開発しないよ派(日曜プログラマ派) | +-集まってレビューしないよ派(日曜プログラマ派) | +-バグ取らないよ派(チンピラSE派) | +-出さないけど替わりに示すものが要るよ派 | +-マウスで指せばいいよ派(屁理屈派) +-指で画面を指せばいいよ(画面に指紋派) +-エラー行にはジャンプで飛ぶよ派 +-右下に行桁が出てるだけで十分(邪魔派) +-aaaaaaa_bbbbbbbbbbbbbb_cccccccccccc関数の上から○行目言うよ派
>>857 がいるよ派だってことはわかった
プッダセー
要らないよ派ってなんなの?
つまりあれだ、要る派でも行番号を全部出さないと気が済まない香具師とカーソル行が表示されていれば済む香具師に分かれると。
プログラム板はまとめをやってくれる几帳面なやつがいないから こういう人材は貴重だな
ちょっと待て、 >バグ取らないよ派(チンピラSE派) これなんだよw
行番号を覚えておいて飛ぶとかいってるクズがいるのかよ…
要らないよ派って必死なんですね
わざわざ要るって言っているほうが普通は必死
行番号表示できるようになったのは最近のバージョン 元は行番号表示はできなかった つまり行番号なしで使うインターフェースになってる
必要だから表示できるようにしたってことか
蛇足
行番号表示した方がいいって結論出てるのに、なんでまだ議論してるの?
Windowsみたいに素人でも使えるようように余分な機能が追加されて だんだん重くなっていく
>>872 ですよね!
行番号表示する/しないのチェックボックス外して
常に表示にすれば少しは軽くなりますよね!
行番号なしがデフォなんだけど
行番号表示してる方がバカって結論出てるのに、なんでまだ議論してるの?
行番号表示派が一人で自作自演してるから笑える
今部署調べてきた。31人中30人が表示してた。これでいいだろ。
>>876 見た感じ表示派の方が一歩上手だよな
表示しない派はコピペで応戦してるけどキレがいまいちで笑える
仕事中に2chを見ていても許されるような 糞会社に勤務してる糞社員乙 糞会社の常識なんか語られてもねえ
>>877 は?こっちの部確認したら全員表示してないですけど?
表示派はなんでこんなに必死なんだ? そんなにgoto使ってるのか?
まとめ:番号表示してるやつは糞
表示厨が泣きながら自作自演して多数派を装うのは構わないけど、
>>863 や
>>878 のような自分マンセー発言はドン引きだからやめた方がいいと思うんだ
ここまで見た感じどっちもどっちだなあ
非表示厨には
>>884 みたいな自治厨くさい発言が多い分、
少しだけ表示厨が勝ってる感じ
| ここまで見た感じどっちもどっちだなあ
| 非表示厨には
>>884 みたいな自治厨くさい発言が多い分、
| 少しだけ表示厨が勝ってる感じ
\___________ ____
∨ カタカタ____ ___
∧_∧ ||\ .\ |◎ |
(.#`Д´) || | ̄ ̄| |:[].|
∧_∧ . ┌( つ/ ̄l| / ̄ ̄/ ..| =|
∧_∧ ( TДT) |└ ヽ |二二二」二二二二二二二二」
( TДT) ( つつ  ̄]||__) | || | ||
(つ つ / / / ./ ̄\ / || / ||
と_)_) (___)__) ◎ ◎ .[___|| .[___||
∧
/ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 孤独な表示厨よ、もういいんだ・・・・・・・
| 本当に良く頑張った・・・もう充分じゃないか・・・
| 楽になっていいんだ・・・
| 忘れるんだ・・・何事もなかったように・・・・・
いらないって言ってる人は食わず嫌いなんだろ。 もしくは、行番号に頼らないコード作りに慣れてて必要がないと。 別にどっちでも問題ないよ。
食わず嫌いされるような大層なものなのか?行番号表示って。 表示させたがっている人は本来の主張を忘れて 勝った負けたに夢中になっているみたいだし、好きにしるで終了だな
だから、全部の行番号が出ている必要はないって結論じゃないのか?w
流れぶったぎるようですみません・・ WM_LBUTTONDOWNはマウスの左ボタンを押された時に、発生するのはわかるのですが、 左ボタンを押しながらドラッグした時にもWM_MOUSEMOVEと共に発生し続けるのでしょうか?
>>891 Down:1回 → Move:複数回 → Up:1回
>>891 MOVEしてる時にもボタンの状態はわかるけど、
通常はDOWNでフラグたてて、MOVEでフラグを見てドラッグと判断
UPでフラグ倒す。という動作をする。
ウィンドウの外に行っちゃうとメッセージ来なくなるからキャプチャーもやる
>>892-893 レスどもです、UPの時にも発生するんですね
そんなのどこにも書いてなかった・・・・
Spy++とか、メッセージをフックして表示してくれるソフトは常備しておくべき 何かと便利だから
>>894 WM_CREATEはフォーム作成時、
WM_RBUTTONDOWNボタンは右ボタン押したとき、
WM_MBUTTONUPはミドルボタンを離したとき、
WM_LBUTTONDBLCLKは右ボタンをダブルクリックしたとき、
などなど・・・
もっとあるけど、本領を発揮するのはイベントを自作するときや
OLEなんかでプロパティを引き渡すときに使う場面かな
>>894 いやいや、発生しないよ
UPの時にDOWN発生したら困るだろw
常備しておくべきってか、VS使ってるならあるだろ、Spy++ EXPRESSとかにはなさそうな気もするが・・・
>>897 たぶん
>>894 は、「UPの時にも(イベントが)発生するんですね 」と
言いたかったんだろ
WM_LBUTTONUP は何のためにあるんだ
離したときに処理されるものの方が圧倒的に多いのに
>>900 は何を言っているんだ
>>902 いや、
>>891 はこういう意味かと思ったんだけど違うのか?
WM_LBUTTONDOWNはマウスの左ボタンを押された時に、
【WM_LBUTTONDOWNが】発生するのはわかるのですが、
左ボタンを押しながらドラッグした時にもWM_MOUSEMOVEと共に
【WM_LBUTTONDOWNは】発生し続けるのでしょうか?
それじゃ、
>>894 は勘違いしたままなのか・・・
うーん・・・
まあやってりゃわかるからいいかw Spy++もそうだが、サンプルソースを見るほうが早いのにな
>>892 は俺のレスだけど、
Down:1回 → Move:複数回 → Up:1回
は、
WM_LBUTTONDOWNイベントは1回発生する
WM_LBUTTONMOVEイベントは複数回発生する
WM_LBUTTONUPイベントは1回発生する
って意味だよ。
まさかボタンアップしたときにもWM_LBUTTONDOWNが発生するなんて思ってないだろ。
まさか・・・ね。
で、ドラッグ中にってWM_LBUTTONDOWNイベントは発生するのか?
>>906 通信簿に話を良く聞かない子って書かれただろ
なんというグタグダ
これだけスレが伸びて
>>891 にまともに答えてる奴はいない
調べてきてやったぞ なんつーかあれだ、調べればわかる マウス左ボタンDOWN時: WM_LBUTTONDOWN発生 マウス移動時(ボタンDOWNなし): WM_MOUSEMOVE発生 マウスドラッグ時(左ボタンDOWN): WM_MOUSEMOVE発生 マウス左ボタンUP時(左ボタン押下): WM_LBUTTONUP発生 WM_MOUSEMOVE発生
911 :
910 :2007/03/27(火) 21:11:01
ちょっと間違ってた (1)の方はUP時にもMOVEが発生する (2)はUPだけ (1)左ボタンDOWN→ドラッグ→左ボタンUP WM_LBUTTONDOWN→WM_MOUSEMOVE発生→WM_LBUTTONUP発生WM_MOUSEMOVE発生 (2)左ボタンDOWN→左ボタンUP (同じ場所) WM_LBUTTONDOWN→WM_LBUTTONUP発生
>>911 単にお前がボタンアップ時に手がぶれたとかじゃないよな?
>>912 ぶれてないと思うけど更に衝撃の事実
>>911 はJaneで確かめたんだけど、今IEでやってみたら
(1)左ボタンDOWN→ドラッグ→左ボタンUP
WM_LBUTTONDOWN→WM_MOUSEMOVE発生→WM_LBUTTONUP発生
(2)は同じ
Winspectorで確認した
あああわけわからん 誰か正解教えてくれ
左ボタン押す(押したまま)WM_LBUTTONDOWN まずこれがあってからドラッグだ。 左ボタン押していないのにドラッグということはない。 左ボタン押したままだからといってWM_LBUTTONDOWNが連続で送られてくることはない。 押したときに一度だけだ。キーボードのようなリピートはない。 左ボタンUPでドロップだ。 ドラッグアンドドロップ終了。 そのあとのWM_MOUSEMOVEはドラッグアンドドロップと関係ない。 手がぶれたか、ウィンドウの方が動いたとかか? <余談> 新しくウィンドウを作成したときもマウスカーソルがたまたまそこにあれば マウスを動かしてなくてもWM_MOUSEMOVEが送られてくると聞いたことがある。 確かめたことはない。 </余談>
ボタン押してないMOVEは何の影響も受けないだろ 通常状態でカーソルが通過するのと変わらん
919 :
デフォルトの名無しさん :2007/03/28(水) 02:08:36
グダグダに更に磨きをかけようか・・・
>>918 クリックするしないに関わらずMoveイベントが発生する、ということを
>>917 は
言いたいんじゃないかな
>>908 お前さ、人にどうこう言う前に、自分の読解力をどうにかしろ
IDないから誰がいつなにを言っているか掴みづらいだろうけど
とにかく一回でもコード書いて動かしてみりゃわかると思うんだがな。 やるこたかわらん。 途中メッセージの抜けがあっても何とかなるもんだし。
結論: MSDN読め
MSDNを読んだところでロクに理解なんかできんわ。
初心者は特に。
まず単語が分からない。
言ってることは確実に正しいんだろうけど何のことを言っているのか
理解できない。
理解できるように膨大にある理解不能な単語の勉強からまずはじまる。
それがイヤだからこういうスレの存在意義があるのではないだろうか?
>>922 の結論でFAならこの板の半分くらいのスレは必要がない。
本買って勉強
>>923 みたいな奴って定期的に現れるよな。
何から手をつければいいかわからないとか、
自分が知っている手法よりもっといいものはないかを知りたいとか、
そういうときにはスレで聞くのがいいだろうけど、
>>891 みたいな質問の場合はMSDNを見たり本を見たり
自分で調べるプログラムを書いたりした方がいい。
単語の意味なぞそれこそググりゃわかる。 こういう場所の存在意義はエスパー逆引きだろ。 「これこれこういううだうだぐだぐだ」に対してググるべき単語を示してやる。 元の「これこれこういう〜」にそれが含まれてることは多々あり、それには>922でおk。 >891クラスなら「実際にやってみろ」で十分すぎる。
答えてやってることで誰かが喜んでるならそれでいいんじゃねーの? 俺も助かったことあるし
あんまり基本的なことは掲示板で教えるのは無理
929 :
デフォルトの名無しさん :2007/03/28(水) 20:18:08
3月26日はボクの41歳の誕生日 でも祝ってくれる人もいない 21歳も 31歳も 一人きりの寂しい寂しい誕生日だった いったい誰が人間の形をした41歳の肉槐を愛することができるだろう だから これからもずっと一人 醜くも膨れ上がった豚のような体つきでは 若い部下たちが楽しい夜をすごすために帰るのが悔しくて デブ特有のキンキン声で嫌がらせ でもやっぱりむなしくなって家では一人涙を流す毎日 そんなあまりに惨めな脂肪の塊 一山いくらの屑肉、 豚松、あらため、台帳デブの 哀れな哀れな哀れな 一日が今日も過ぎてゆく
>>929 鬱陶しいからその日々に終止符を打ってください。
方法は問いません。
オレに死ねと
他の手段を思いつけないのならどうぞ。
Visual C++ 2005 Express Editionです。
ttp://www.morikita.co.jp/soft/84142 にあるVisual C++ .NET用のCG_NET.exeというファイルを落として解凍しprjフォルダにある
EX2_1.slnをビルドしようとしましたがエラーが出てできません。
具体的にはファイルを開くと出る変換ウィザードで変換したあとビルドして見ると、
いくつかエラーが出てmain関数にvoidを指定してfor文にintを指定していくと最終的に
「LINK : fatal error LNK1104: ファイル 'LIBC.lib' を開くことができません。」というエラーが出ます。
これはどうすればいいんでしょう?
追加の依存ファイルにlibc.libを指定してもだめだし、特定のライブラリの無視に指定したら
「win.lib(win.obj) : error LNK2019: 未解決の外部シンボル "int __cdecl g__main(int,char * * const)" (?g__main@@YAHHQAPAD@Z) が関数 "unsigned long __cdecl u__Tproc1(void *)" (?u__Tproc1@@YAKPAX@Z) で参照されました。
..\obj/EX2_1.exe : fatal error LNK1120: 外部参照 1 が未解決です。」
に変わりましたが相変わらずビルドできません。
よろしくお願いします。
適当に見てみたけど 追加でリンク指定している win.lib が、 シングルスレッド用である libc.lib を利用しているんじゃないか? もしこれが正しければ、win.lib をマルチスレッド用ライブラリリンク版 (/MT オプション) を作らないといけない。 VS2005 からはシングルスレッド用のライブラリがなくなってしまったからなぁ。 あと、main の戻り値は int だ。
恐らくはソリューションファイルとプロジェクトファイルだけコンバートしてビルドしてみてもいないんだろうなぁ。 ページ自体は今月にも修正が掛かっているみたいだから、(書籍を購入しているなら)クレームつけてみたら? マルチスレッド版のwin.libを作ってくれるかもよ。
936 :
933 :2007/03/31(土) 03:37:53
いけました。 mainにint指定してreturn 0;を関数の最後に入れて、リンカの設定の特定のライブラリを 無視のところにlibc.libを指定したらビルドできました。 mainの戻り値intってちゃんと決まってるんですね。慣例かと思ってました。 ありがとうございました。
質問があります。 MS VC++ .NET 2003 なのですが、 CFont font; label1->Font = font; これをやると Form1.h(676): error C2664: 'System::Windows::Forms::Control::set_Font' : 1 番目の引数を 'CFont' から 'System::Drawing::Font __gc *' に変換できません。 と出ます。ラベルのフォントをこの方法で変えたいだけなのですが、どこがおかしいのでしょうか。
938 :
デフォルトの名無しさん :2007/04/03(火) 18:53:59
上げ忘れましたので上げます。
CFont はMFCのような気がするけど .netにもそういうものがあるのか?
940 :
937 :2007/04/03(火) 19:16:10
色々調べているのですが、 なんか根本的な勘違いをしているような気がしてきました・・・
941 :
はじめてのはじめての人 :2007/04/05(木) 00:04:55
本かって、VC開いても呆然としちゃう(´;ω;`)
まずは書いてある通りにやってみろ 話はそれからだ
943 :
sage :2007/04/05(木) 21:21:24
VC++.NET 2005 CLRプログラミングで ボタンなどのコンポーネントを プログラム上から追加したいのですが、 どのようにすればいいですか?
944 :
デフォルトの名無しさん :2007/04/05(木) 21:54:36
UTC の年月日時分秒から __time64_t 値を作るにはどうしたらよいでしょう?
945 :
nori :2007/04/05(木) 22:38:20
今晩は。 Visual C++.NET 2003 の Windows Form Application で作ったアニメーションに、 Directsoundで音を付けたいのですが、どなたかご存知の方、教えてください。 複数音を同時に鳴らしたいので、Soundplayは使えないのです。 いろいろ調べて見たのですが、Visual Basic、Visual C# または Windows Console Application では、資料は 見つかるのですが、Visual C++.NET では、見つけられなくて困ってます。 よろしくお願いします。
>>944 どうやってって、年月日時分秒が判るんなら、1970年1月1日の0時0分0秒からの秒数を算出すればいいじゃないか
凄く初歩的な質問ですが、bool型からwchar_t型への変換を するにはどうしたらよいのでしょうか?教えてください。
bool a; wchar_t b; b = (wchar_t)a;
多分、
>>947 が知りたいのは
bool a;
const wchar_t * b = a ? L"True": "False";
みたいなことじゃないかと思うんだがどうだろう?
951 :
947 :2007/04/06(金) 02:30:58
>948-950 返信遅れました。 質問が漠然としすぎて混乱させてしまったようで申し訳ありません。 私が知りたかったのはまさに>950さんのコードです。 ありがとうございます。
952 :
雨とむり :2007/04/06(金) 10:22:52
VC++5.0で開発したEXEを WindowsVistaに入れて起動させようとしたら、 動きませんでした。 どうすれば動くのでしょうか。 ※ちなみにXML形式でファイルの保存等を行っています。
>>952 動かないというのはこんな感じ?
>C:\>hoge
>'hoge' は、内部コマンドまたは外部コマンド、
>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
954 :
雨とむり :2007/04/06(金) 10:57:09
>>953 お返事ありがとうございます。
↓こんなメッセージが出ます。
問題が発生したために、プログラムが正しく動作しなくなりました。
プログラムは閉じられ、解決策がある場合はwindowsから通知されます。
ちなみに通知らしき物は来なかったです。
>>954 詳細見てエラーの起きたアドレス調べて
元の開発環境でそのアドレスがどこか調べるとか
リモートデバッグするか、Vista上でデバッグするとか
957 :
雨とむり :2007/04/06(金) 11:49:26
>>955 >>956 ありがとうございます。
よくよく調べてみたら、
manifestファイルという物を使ってGUIの画面をXPっぽくしてました。
このファイルを取り除くと動きましたが、画面の形式は
変えたくないので何か方法はないのでしょうか?
vcのCStringT型からchar[]にするにはどうしたらいいの?
>>958 CString bar = "abcd";
const char * foo = bar;
知ってたら教えてください。 環境は VC++2003.NET です。 GDI+にて、描画部分だけ色を反転させた線を引きたいと思っています。 pen>SetDashStyle(DashStyleDash); pen->SetColor(Color::Black); pen->SetWidth(1.0f); などとペンを定義して描画することはできるのですが、 どうやったら反転させることができるのでしょうか? おながいします。
Color::Whiteで線を引くだけ
962 :
960 :2007/04/06(金) 16:50:31
>>961 ありがとうございます。
白で線を引くということでしょうか?
反転されるためにXOR指定などがあるのではないか、と予想していましたが・・・。
ちょっとやってみます。
964 :
960 :2007/04/06(金) 17:06:43
>>961 白で線が引かれるだけで反転しないようなのです・・・
965 :
960 :2007/04/06(金) 17:08:55
>>963 すいません、書き込んだ後に気づきました。
ありがとうございます。
確認&試してみます。
ってGDI+か。そっちはわからん、すまん。
GDI+じゃラスタオペレーションはサポートしてない。 というのがGraphicesが対象とするImageはBItmapであることを限定してないため、 Bitmapであることを前提にしたラスタオペレーションは無くなった。 もしこれをサポートするとなるとBitmapオブジェクトに直接描画メソッドを追加することになるだろう。 自作したいならBitmapを生のイメージで操作する必要がある。 GDI+の範囲でやりたいなら反転とは違うが半透明色で線を引いてみたらどうだろうか。 ただ2005から追加になったCopyFromScreenのCopyPixelOperationにはなぜかラスタオぺの香りが漂っていたりする。
968 :
960 :2007/04/06(金) 17:41:51
>>967 分かりやすい解説ありがとうございます。
更にお聞きしたいのですが、ビットマップの描画ではラスタオペレータは
困難のように読めますが、反転した線を引くだけでも同様でしょうか?
簡単な(プロパティを指定して終わりみたいな)方法などが
あれは教えてもらいたいのですが・・・
VC++EEを使っているのですが、ブレークポイントつけてウォッチしようとしたところ、 「ブレークポイントは現在の設定ではヒットしません。このドキュメントのシンボルが読み込まれていません」と 赤い丸のところに表示されて、ウォッチができません。どうやってらウォッチできるようになりますか?
970 :
エボニー :2007/04/09(月) 12:45:28
VC++で作ったヴュー画面に文字列を表示させた場合 VISTAとXPでは行間隔に違いがでます。 XPは隙間無く次の行(改行コード入れてます)の文字列が表示されますが、 VISTAの方は変な隙間が出ます。 この違いを解消する方法を教えてください。
とりあえずフォントあたりから
VISTAの仕様だから気にしない
973 :
エボニー :2007/04/09(月) 13:03:59
>972 VISTAの仕様という事はコーディングで直せる物ではないとう事でしょうか?
ユーザーにまかせる
976 :
バリバリ :2007/04/10(火) 16:41:35
>>975 改行コードを入れないと文字が横一列に並んでしまいますので
必要なんですよ。
978 :
デフォルトの名無しさん :2007/04/11(水) 22:51:30
プログラムなにもしらないけどvisualstudio買ってみたよ。 ぽっか〜ん(´・ω・`)このあとどうすればいいんだろ
>>978 使い倒して世界一のプログラマになるに決まってるだろ?
982 :
デフォルトの名無しさん :2007/04/12(木) 12:30:36
VC++7.0 Windows2000 MFCマルチスレッドプログラミング UIスレッドワーカースレッド両方使用 スレッド数40ほど デバッグモードでは動作は正常だったのですが デバッグ無しモードだと動作が不安定になります 他スレッドの変数を変えて制御してますが 同じスレッドに同時に変更するようなところは見当たりません デバッグモードでやるとブレークポイントをつけているわけでもないのに 正常に動作します このような場合の原因はどんなことがあるのかわかりますか?
983 :
デフォルトの名無しさん :2007/04/12(木) 13:17:34
何がどう不安定なのかわからないと回答しにくいと思うZO あと、どんな処理をしてるかとかあればもっと答えが出やすいかもよ? お前が人に聞かれて答えるのに別の質問で似たような表現されてわかるか?
984 :
デフォルトの名無しさん :2007/04/12(木) 13:32:47
どんな処理かはマルチスレッドの制御です スレッドAがループで止まっていてスレッドBが各スレッドの変数を変えに 行っていますスレッドCが条件を充たすとスレッドBにスレッドAのループを 抜けるように変数の値を変えにいきます ループを抜けたいのに抜けなかったり抜けたくないのに抜けたりします ループを制御してる変数を 他スレッドから変数を変えにいってるはずが変えられてなかったりしてます デバッグモードだけで成功するような状況はどういうことなのか教えてください
volatileがなくて最適化でメモリアクセスがどっかに消えているとか。 同期はメモリを直接参照するのではなく、ちゃんと同期オブジェクト使わんと遺憾よ。
>>978 同士よ、とりあえず自分は「質問が出来る」ようになる事を
第一の目標としてるorz
987 :
デフォルトの名無しさん :2007/04/12(木) 15:43:40
>>985 volatileをつけてみましたが一緒でした
同期オブジェクトはCCriticalSectionでいいのでしょうか?
CCriticalSectionのオブジェクトを作ろうとしたのですが
error C2501: 'CCriticalSection' : 識別名を宣言するのに、型が指定されていません。
とでます
>>984 DebugでうまくいってReleaseでうまくいかないケースは
最適化の影響か、領域破壊バグの可能性が高い。
まずは
>>985 のvolatileを入れるべきとこ探してみたら。
volatileの付け場所間違ってるかもしれんが、、、 Releaseで最適化切ってリビルドして実行してみたら
990 :
デフォルトの名無しさん :2007/04/12(木) 17:25:38
>>978 俺はVisualC++6.0買った時、1年位手をつけずに放置した。
VC2005で // TODO: この場所にネイティブ データ用の描画コードを追加します。 の後に pDC->MoveTo(100,100); pDC->LineTo(300,300); と書いてもコンパイルできません。 pDC->TextOut(0,0,"ようこそ"); と書いてもコンパイルできません。 本ではそう書いてあるのですが何故でしょうか? プロジェクトはMFCアプリケーションのデフォルトで作りました。
すいません自己解決しました。 /*pDC*/のコメントを外さないといけないようです。
>>987 CCriticalSectionを使うためのヘッダファイルが指定してないんだろうな。
でも、この場合CCriticalSectionは適さない。
だって排他制御したいわけじゃないよね。
俺も変数の初期化とvolatile関係と思う。
volatileがどうしても駄目ならそこの関数の最適化を制限するとか。
#pragmaで指定でできるはず。
変数じゃなくて同期オブジェクトを使いたいなら、同期イベントがいいんじゃない。
MFCならCEvent。
ところでスレッドをたくさん使うんですね。
VC++ 2003を使っているのですが ウィンドウズフォームアプリケーションで MainMenuが表示されません Formのデザイン画面でもFormの下の方に ちょこっと表示されるだけで デバッグ開始すると消えます。 どうすれば表示されるようになるのでしょうか
VC++2005のExpress版をつかっています。OSはWinXPです。 コマンドラインコンパイラを使いたくて、 使用前に必要な手続きであるらしい下のバッチファイルを一発かましています。 C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat ところでこの手続きPCを起動するたび(?)にやり直しになるんですが、 効果を持続させる方法はないでしょうか。 というかこの手続きは何をしているのでしょうか。
>>997 内容についてはvcvars32.batの中身を見ればいいさ。
いいやり方は知らない。
いまちょっくらためしたら出来た。
適当にショートカットを作って、そのプロパティで
リンク先を
%windir%\system32\cmd.exe /k "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
作業フォルダを
E:\work2
としたらできてるっぽい。
当然スペルは適当に直せよ。
無論コマンドプロンプトを出すときはこのショートカットを使え。ショートカット
実際にコマンドラインコンパイラが動くかは試してねーけどよ。
>>997 コマンドプロンプトの起動を、
スタート→プログラム→Visual C++ 2005 Express Edition→Visual Studio Tools
→Visual Studio 2005 コマンド プロンプトから行うようにしろ。
>>999 VC++2005のExpress版持ってないから知らないけど既に同じものがあるのか。
あははh
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。