★初心者にVisual C++を教えるスレ★ Part37
VC2008です。 C++で、スタティックライブラリをリンクさせているのですが、 ヘッダの関数宣言で、extern "C" {}でくくっているのにも関わらず、 error LNK2001: 外部シンボル "__imp__*(関数名)*" は未解決です。 となり、名前修飾が行われてしまいます。 どのように解決すればよろしいのでしょうか? プロパティでは、呼び出し規約が__cdeclになってします。
7 :
デフォルトの名無しさん :2011/03/14(月) 00:09:16.91
>1 おつ あと引越しは995過ぎてからでも十分だぞよ。
Visual C++ 2008 EE なのですが、 class Test { private: union { struct { int a; }; int b; }; }test; このようなクラスを作ったところ、 test.a = 100; // コンパイルエラーにならない test.b = 20; // コンパイルエラー という結果になったのですが、どうしてなのでしょうか
10 :
6 :2011/03/15(火) 10:03:17.94
>>7 リンカディレクトリにおいて、特に参照エラーも出ていないのですが…
他のc++名前修飾ライブラリでも試してみます。
数日前に他掲示板に書き込みましたが、返信がないので質問します。 keybd_event関数を使いましたがvisualstudio2003proではSendInputが使えません。 VS2008ExpressVS・2010Expressではビルドは出来ましたがうまく動作しませんでした。 これについて詳しい方いらしゃいますか?
>>11 2003でビルド時にエラーになる件は#define _WIN32_WINNT 0x0400か何か書いておけばいいと思う。
実行してうまくいかないのは、お前のSendInputの使い方に問題があるだろうとしか言えない。
ソース貼れ。
>>9 VC6 だけど、そのままだと両方エラーになるよ
あんたの環境で片方だけエラーになるのが意味不明だけど、private: とか書いてるのがいけないんじゃない?
public: に直したら両方ともエラーにならない
そもそもエラーって、何てメッセージが出てるの?
14 :
9 :2011/03/16(水) 02:42:26.25
>>13 すみません説明不足でした、エラーは
error C2248: 'Test::b' : private メンバ (クラス 'Test' で宣言されている) にアクセスできません。
本来なら Test::a に対しても同じエラーがでると思っていたのですが、
コンパイルが通ってしまい、test.a にアクセスも代入もできてしまいましたので、
不思議に思い質問いたしました。
>cl /c /W4 test.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. test.cpp test.cpp(6) : warning C4201: 非標準の拡張機能が使用されています : 無名の構造体または共用体です。 test.cpp(14) : error C2248: 'a' : private メンバ (クラス 'Test' で宣言されている)にアクセスできません。 test.cpp(5) : 'a' の宣言を確認してください。 test.cpp(15) : error C2248: 'b' : private メンバ (クラス 'Test' で宣言されている)にアクセスできません。 test.cpp(7) : 'b' の宣言を確認してください。 >cl /c /W4 test.cpp Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. test.cpp test.cpp(6) : warning C4201: 非標準の拡張機能が使用されています : 無名の構造体または共用体です。 test.cpp(15) : error C2248: 'Test::b' : private メンバ (クラス 'Test' で宣言されている) にアクセスできません。 test.cpp(7) : 'Test::b' の宣言を確認してください。 test.cpp(1) : 'Test' の宣言を確認してください。 確かにバージョンによって結果が違うな
16 :
11 :2011/03/16(水) 19:04:35.54
#define _WIN32_WINNT 0x0400 を書き足しましたが、2003では同様のエラーが出ます。 以下詳細 error C2065: 'LPINPUT' : 定義されていない識別子です。 VS2008・2010Expressについては、詳しくいじっていないので私のミスの可能性もあります。
それのどこが詳細だ・・・
VS2002が.netframeworkインストールエラーでインスト出来ないんですが、 多分初期化して.netframeworkをインストールする前にVS2002をインストすれば動くと思われるんですが詳しい方いますか?
ものすごく初心者な質問なのですが、 書かれているソースが、CLIなのかCLRなのかMFCなのかとかどうやって判断するんでしょうか? 最近勉強し始めたのですがイマイチ違いが分からなくて。。
慣れるまで色々見るしかない
>>19 とりあえずCLIはかなり異端だし、MFCもそれなりに特徴的な構文だから、
ちょっと慣れればすぐにわかる。
CLIなら
using System::String;
とかString^ stringVar;とかかなり異色で別言語
MFCは単にライブラリをC++から使っているだけ
勉強としてはとりあえず普通のC++をやってけばよろし
22 :
19 :2011/03/17(木) 19:40:29.22
なるほど、ありがとうございます。
23 :
デフォルトの名無しさん :2011/03/18(金) 15:37:22.99
CreateProcessでwscriptを実行して引数でVBSを実行させようとしているのですがうまくいきません。 設定ダイヤログがなぜか出てきてします。なぜなんでしょうか if ( !CreateProcess( _T("C:\\windows\\system32\\wscript.exe"), _T("C:\\tst.vbs"), NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi ) ) { }
24 :
23 :2011/03/18(金) 16:49:05.39
パラメーターに//E:vbscriptを追加することで自己解決
25 :
デフォルトの名無しさん :2011/03/19(土) 16:14:11.64
_tWinMainで書いているのですが 外部から受け取ったバッファをMultiByteToWideChar、WideCharToMultiByteといったもので 変換する時に_Tのように自動で変換をさせるにはどうしたらいいのでしょうか?
>>25 #ifdef UNICODE
...
#else
...
#endif
wchar_tとかまあぶっちゃけ決め打ちでいいと思うがなー
29 :
デフォルトの名無しさん :2011/03/20(日) 21:54:33.84
VC++2010, Win32, ダイアログベースのアプリを作っています。
■やりたいことWindows標準の警告アイコンをダイアログに配置したい
・
http://msdn.microsoft.com/ja-jp/library/aa511277.aspx ・MessageBoxでは MB_ICONWARNING により表示可能ですが、
MessageBoxではなく、CreateDialog APIで作る自前ダイアログです。
・タイトルバー部分ではなく、(何と呼ぶのか分かりませんが)
ボタンコントロールなどを配置する領域に、警告アイコンを配置したい
調べていますが、解決できませんでした。
上記の実現方法がありましたら、ご教授願います。
よろしくお願いします。
loadicon
>>29 ダイアログにPictureControlを貼り付ける
貼り付けたコントロールのプロパティを開き
Type を アイコン
ID を IDC_PICT1(便宜上)
に変更する
DialogProcのWM_INITDIALOGで
SendMessage( GetDlgItem(hDlg,IDC_PICT1), STM_SETICON,(WPARAM)LoadImage(0, IDI_QUESTION, IMAGE_ICON, 0, 0, LR_SHARED),0);
を送る
32 :
29 :2011/03/21(月) 23:58:39.02
質問です。 Win32 Windows アプリケーションでリソースビューからメニューで 新しく項目を追加してその項目を右クリックをしてイベントハンドラを追加しようとしたら 無効になっていて追加できませんでした。 プロパティも見て追加できるところはないか探したんですがありませんでした。 どのようにしたら追加できるでしょうか。ご教示願います。 Visual Studioのバージョンは2010 Premiumです。
exeから、コンパイルに使ったVC++のバージョンを調べることはできますか。
予想することはできるな
HWND型からアプリケーションが終了したかかの情報を取得することはできるのでしょうか? できるのでしたらどのようにやるか教えていただけませんでしょうか?
少し書き方が間違っていました。 アプリケーションが終了したかというよりウィンドウが閉じたかという情報です
ウィンドウプロシージャでWM_CLOSEイベントでも来るのを待ってみては?
すみません言葉足らずでした 他プロセスのhWndを取得してメッセージを送っているのですが そのプロセスのウィンドウが終了した場合にその処理をやめたいとおもっています そこでhWndもしくはPIDでウィンドウが閉じたかを確認したいのです
もうしわけない そういえばGetMessageすればよかったんですね お騒がせしました。
>>38 IsWindowっていうAPIがあるけど。
ただ、IsWindowだろうが他の方法だろうが、ウィンドウが閉じられた後に
すでに別の新規ウィンドウにそのHWND値が再利用されちゃっている
という可能性があるかもしれない。
>>38 他プロセスのWM_CLOSEメッセージをフックするという手もある
2010でもうC++0xのregex使える?
使えますん
どうもで〜す
VS2008を使っているのですが、クラス内クラスや、関数内クラスを作った場合、 そのクラスのインスタンスに対してコード補完(.を押した時に、メンバー関数やメンバー変数が一覧で出る)がかかりません。 クラスや関数の外にコピペすれば、コード補完がきくのですが・・・ これは、何か設定が悪いのでしょうか? それともVSの仕様でしょうか?
コンソールとかで進行状況をパーセントで表したりしたいのですが 文字の○○%の部分だけ更新させるにはどうすればいいのでしょうか?
>>48 int i;
printf("start\n");
for(i=0;i<=100;i++){
printf("\r%3d%%",i);
Sleep(100);
}
printf("\nend\n");
¥r がきもね
52 :
デフォルトの名無しさん :2011/04/06(水) 16:49:57.19
Visual C++2010 Exp版を使用しています。 テキストエディタ上でリアルタイムにエラーなどを教えてくれる 赤の波線を表示しない様にするにはどうすれば良いでしょうか? PCが非力らしく動作がカクカクするので止めたいとおもっています。
設定→テキストエディタ→C++ →詳細 うろ覚えだけど、このあたりでインテリセンスやらの設定ができる
質問よろしいでしょうか? ビット演算が苦手なのですが 4バイトのlong型から1バイト分だけ抜き出すにはどうすればよいのでしょうか?
すみません 事故解決
union{ unsigned char b[4]; long l; } bl;
>>57 エンディアンを考慮するのは
ビット演算でも同じでは?
フォームアプリケーションのイベントハンドラというのは何なのでしょうか? フォームの閉じるボタンが押された場合に処理を噛ませたいのですが なにぶんフォームアプリケーションをあまりいじったことがないのでよくわからなくて。 よろしければ処理の加え方も教えていただけないでしょうか?
右下の雷ボタンを押すとイベント一覧が出るから FormClosingをダブルクリックする。
>>61 除算使えばいけるけど
論理演算とシフトだけでのビット演算だと
ちと分からないなぁ
回答よろしく
union{ unsigned char b[4]; long l; } bl; bl.l = 0x12345678; if(bl.l & 256 == bl.b[0]) return bl.b[n]; else return bl.b[3 - n];
0x12345612; だったらバグるでしょ
65 :
64 :2011/04/09(土) 12:56:38.77
あぁ、劣化#ifdefか
質問よろしいでしょうか? クリップボードで取得した文字列型のIPをクリップボードに移したいのですが、 下の処理でやったところ、最初の1しかコピーされませんでした。 なにか悪いところがあるのでしょうか? wchar_t _tempwchar[max(NI_MAXHOST, INET6_ADDRSTRLEN) +1]="192.168.0.1"; //実際には関数から代入 HGLOBAL hMem = GlobalAlloc(GHND | GMEM_SHARE , sizeof(_tempwchar) + 1 ); LPWSTR lpstr = (LPWSTR)GlobalLock(hMem); lstrcpy( lpstr, _tempwchar ); //この部分でlpstrと_tempwcharは正常値 GlobalUnlock(hMem); if( OpenClipboard(NULL) == 0 ) return; //クリップボードのオープン EmptyClipboard(); // クリップボードの中身を空にする SetClipboardData(CF_TEXT, hMem); CloseClipboard();
× CF_TEXT ○ CF_UNICODETEXT
>>67 なるほど そこでしたか。ありがとうございます。
連続で申し訳ないです。
>>67 無事出来ました。
ありがとうございます。
fprintfで " を書き込みたいときは \" を使いますが、 fscanfで " の入っている文字列を扱いたいときはどのようにすればよいのでしょうか?
>>70 文字列定数に " を書き込みたいときは \" を使う。
>>71 エクセルデータなどで, ="0", ="1" のような値を取り出すときに、
fscanfではどのようにすればよいのでしょうか?
73 :
70 :2011/04/11(月) 23:43:25.84
すみません。 ="0", ="1", 上記のデータからfscanfをもちいて%dのint型で0と1を取得する方法を知りたいという意味です。
>>73 「="%d",="%d",」という文字列を記述すればいいから、
"=\"%d\",=\"%d\","
って書けばいい。すでにそう書いていて、うまうできない
なら、どんなコードを書いたかソースを晒せ。
75 :
70 :2011/04/12(火) 00:35:26.60
>>74 fscanfの引数に直接その文字列を書くと取得できず困っていたのですが、
char型の配列にその文字列を格納してから引数で渡したらうまく取り出せました。
回答ありがとうございました。
MFCのデバイスコンテキストで線を描画する際に、 リストボックスなどの上に線を描画することはできますか? 描画してもリストボックスが前面に出てきて隠れてしまいます。
リストボックスよりも上に書けばいい
>>77 コードの順序のことでしょうか?
ボタンなどの上にはあとから描画することで上書きできるのですが、
リストにはなぜかできません。
そのあとにどこかで更新しているのでしょうか…
>>78 それ本当にボタンの上に描けてる?
ボタンにフォーカスを移したりしたときに消えない?
>>79 フォーカスというのがちょっとわかりませんが、
ボタンを押している間以外は、上に描けています。
あまり関係ありませんが、2つボタンがあり、
片方のボタンを押すと4回に1回くらいは、
押している間もう一つのボタンの上の描画も消えます。
81 :
デフォルトの名無しさん :2011/04/14(木) 20:34:40.76
初歩的な質問すみません。 vc++2010を使っています。 逐一新しいプロジェクト作るのが面倒で、 一つのプロジェクトにソースファイルを複数作ったのですが、 エラーが出てしまいます。 一つのプロジェクトにa.cpp と b.cpp があった場合、 b.cppだけを走らせることは出来ますか? 教えてください。おねがいします。
>>81 main関数が2つあるんじゃね?
関数名変えるか、プロパティ開いてビルドから除外すればいい
windowsXP VisualStadio2005です。ダイアログベースのプログラムを作ろうと思います。 で、リソースビューからもう一個ダイアログを作りました。 そのプロパティーを見ると、Styleという項目で 「ポップアップ」「オーバーラップ」「子」という選択ができるのですが、それぞれどう違うのでしょうか?
>>80 > フォーカスというのがちょっとわかりませんが、
キーボードの入力を受け付けている状態。
ダイアログ上でTabキーを何度も押していけば移動する。
> 押している間もう一つのボタンの上の描画も消えます。
ということは、ボタンの再描画が走ったときに消えてしまっているのだから、
原理的にはリストボックスと同じ問題が発生しているのでは?
それでもボタンは大丈夫というのであれば、
どのタイミングでどのように描いているのかを提示してみては?
VC++でXPSファイルを印刷したいのですが、可能でしょうか? 参考になるサイトとかあれば教えてほしいです。
87 :
デフォルトの名無しさん :2011/04/19(火) 14:32:06.77
vc++でC言語を扱いたいのですが どのようにすればC言語使えるのでしょうか?
拡張子をcにする
たとえば、C言語の入門書に書いてあるプログラムを 動かすには?という質問であれば、Win32コンソール アプリケーションを選べば、だいたい合ってる。
それはない
91 :
デフォルトの名無しさん :2011/04/20(水) 01:09:39.05
hoge.cppに namespace Hoge{ クラス定義 } があります。 main.cppで using namespace Hoge:と宣言し、Hogeないのクラスのオブジェクトを使いたいと思っているのですが、 この名前を指定された名前空間は存在しません。というコンパイルエラーが出て、名前空間を使う 宣言ができません。どういう方法が正しいでしょうか?
まずusingせず使う所から始めろ
>>91 インクルードはちゃんとしてる?
ソース公開したらおそらく一発で回答がつきそうな質問だ
>>91 hoge.hで
namespace Hoge{
クラス宣言
}
して
それをインクルードしてください
95 :
デフォルトの名無しさん :2011/04/22(金) 16:56:35.33
ユーズィングなんです(><;)
気のせいか using の部分が セミコロンではなくコロンなのは、書き込みの間違いなのか?
97 :
デフォルトの名無しさん :2011/04/24(日) 17:29:23.91
char型の文字をテキストボックスに表示させるのはどうしたら いいのでしょうか? #pragma once char code[1]; -----------------省略------------------------------------------------------------------ private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { code[0]='a'; textBox1->Text=code[0].ToString(); } これをするとテキストボックスに「a」じゃなくて「97」と表示されてしまいます。
wchar_t code[2]; code[0] = L'a'; 参考まで
charは数値。 だいたいそれC++じゃないから、まだわからないならC#スレで訊いてね。
100 :
デフォルトの名無しさん :2011/04/24(日) 20:34:01.29
WCHAR [32]' から 'System::Object ^' に変換できません というエラーがでた場合、どういう変換処理をかいたらいいんでしょうか??
だから、C#スレで訊けよ。
C#てかC++/CLIじゃね? C++/CLIはC++じゃないからスレチ
じゃあCもスレ違いなわけだな
Cは許す だがCLIてめぇだけはダメだ
106 :
デフォルトの名無しさん :2011/04/24(日) 21:18:32.81
>>98 のものです。問題解決しました!
ありがとうございました。
charではなwchar_t型ではなければならなかったのですね。
ちなみに自分が使っているのはVisualC++ CLR Windowsフォームアプリケーションです。
visual studio2008 MFCを使っています。 ファイルをEXEに内包するにはどうすればいいでしょうか? また、内包したファイルの取り出しのパスはどういう指定をしたらいいんでしょうか?
いくらでも方法ありそうだけど 特に隠す必要なかったらリソースとか
内包などしなけりゃ悩まなくていいしその処理も書かなくていいのに
110 :
デフォルトの名無しさん :2011/04/27(水) 17:29:46.71
パソコン昨日買いました 教えてください
112 :
デフォルトの名無しさん :2011/04/27(水) 18:47:09.55
textBoxの文字を分割して配列にする方法がわかりません
114 :
110 :2011/04/28(木) 15:54:00.60
DirectXの参考書の中に CEffect::CEffect( float vy, float max_xz, float max_y, float min_size, float max_size ) : VY(vy), MaxXZ(max_xz), MaxY(max_y), MinSize(min_size), MaxSize(max_size) { } というclassのコンストラクタ関数があったのですが 中段の : VY(vy), MaxXZ(max_xz), MaxY(max_y), MinSize(min_size), MaxSize(max_size) という関数内部と宣言の間の:(コンマ)の部分は どういう仕組みなのでしょうか? 変数などの処理ではなく宣言的な意味の部分が知りたいのですが
初期化リストでぐぐる
>>116 了解です、少佐殿。
ありがとうございます。
119 :
デフォルトの名無しさん :2011/04/28(木) 21:24:19.19
textBoxに入力された文字列 ABCを A B C という感じに一文字に分解したいです。 array<String^>^ abc=textBox1->Text->Split(','); textBox2->Text=abc[0];
C++/CLIはC++じゃねぇつってんだろが
ここ C++スレじゃないよ
VC++で扱える言語(C, C++, C++/CLI)全部が対象だろうな C++/CLIは専門スレ行った方が適切な回答を得られやすいだろうけど
^>^
ShellExecute(NULL, "open", "index.html", NULL, NULL, SW_SHOWNORMAL); これを実行したいのですが、 error LNK2028: 未解決のトークン (0A000011) "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PBD111H@Z) が関数 "private: void __clrcall buildpropeditor::Form1::button5_Click(class System::Object ^,class System::EventArgs ^)" (?button5_Click@Form1@buildpropeditor@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 error LNK2019: 未解決の外部シンボル "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PBD111H@Z) が関数 "private: void __clrcall buildpropeditor::Form1::button5_Click(class System::Object ^,class System::EventArgs ^)" (?button5_Click@Form1@buildpropeditor@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 とコンパイルエラーが出てしまいます リンカーの設定だとは思うのですが、いまいち解決方法が分かりません 解決方法を教えてください Visual C++ 2010
Win32アプリケーションでフォームなどを使わずに 変換等々もできる入力部分を作るにはどうしたらいいのでしょうか?
127 :
デフォルトの名無しさん :2011/05/01(日) 11:00:15.62
new/deleteに関して質問します。 new[]で配列を確保した場合delete[]で解放しなければいけませんが 以下のようにするとやっぱり不味いでしょうか。 デバッガで追ってみた感じ違いがないのですが。 char* lpsz = new char[10]; strcpy(lpsz, "test"); void* p = lpsz; delete p;
テストアプリでメモリ転送を計測するアプリを作りました。 環境はVisual Studio 2008 Pro SP1(VC++、MFC、ダイアログベース) 32ビット版アプリと64ビット版アプリでメモリ転送の違いがありました。 64ビット版が遅いのはどうしてでしょうか。 64ビット転送が32ビット版の約半分です。 32ビット版と64ビット版で同じなら良いのですが。 OS:Windows7 Ultimate 64ビット版 メモリ4GB(2GB x 2, DDR3-10600) 32ビット版メモリ転送アプリ 8ビット転送:1.1GB/sec 16ビット転送:3.1GB/sec 32ビット転送:6.4GB/sec 64ビット転送:12.0GB/sec 64ビット版メモリ転送アプリ 8ビット転送:0.8GB/sec 16ビット転送:1.6GB/sec 32ビット転送:3.3GB/sec 64ビット転送:6.3GB/sec
誤爆か?
>>127 VCの実装だと結局同じ関数に投げるから問題が出ないってだけだ
131 :
デフォルトの名無しさん :2011/05/01(日) 11:19:56.36
>>130 なるほど、VCなら問題ないけど汎用性持たせようとするならダメってことですね。
了解です。
POD/非PODの線引き(だよね?)よりも 配列か否かの線引きのが楽じゃね?
134 :
デフォルトの名無しさん :2011/05/01(日) 22:54:54.82
ゴーれデ0えィーけ中や、ぬさぬさひ毎日うベ0な盛るだけし0!いぬも、 音楽りうブ、きへェではうベ0なにど充実はHXん過ごすみすょえ♪ この文章解読できたらすごい
鳩山氏の演説草稿
>>134 宣伝乙
ゴールデンウィーク中も、ニコニコは毎日イベント盛りだくさん!
アニメ、音楽ライブ、カフェでのイベントなど充実のGWを過ごしましょう♪
と、隣の主婦にコンパイルエラーが出てしまいます・・・
138 :
デフォルトの名無しさん :2011/05/02(月) 18:27:57.16
ある程度意味のある言葉が散見してるから暗号としては楽な部類 と知ったかぶってみる
>>138 母音の発音は曖昧でも、子音だけでだいたいの意味はわかる。
変数名の付け方とか、プログラマなら分かるだろ?
実際に声に出して読んでみると、「ゴールデンウィーク中」とか
「過ごしましょう」とかは、変換の前後でほとんど発音は
変わらない。
そこから、
漢字・拗音・濁音・記号そのまま
0 →ん
あ→お
い→あ
う→い
え→う
お→え
というルールがあるらしいのが分かるので、全文変換してみたら、
ゴールデンウィーク中よ、にそにそは毎日いべんの盛りだくさん!
あにめ、音楽らいブ、かふェでほいベんのなど充実ほ 過ごしましょう♪
…あたりまでは分かった。
変則的な変換ルールもあるようなので、細かいルールは
よく分からないが、あとは、ニコニコ動画のトップページに
書いてあった文章をコピペしておいたw
単純に1文字進めただけだろ 得意げに解読してみたとか恥ずかしいヤツだな というかスレチ
142 :
デフォルトの名無しさん :2011/05/02(月) 22:29:19.70
初心者っちゃあ初心者なんだけどさ VC++ってプロジェクトのファイルを別ウィンドウで開けたりしないの? 多重起動とかタブとかじゃなくて
vc2010なら可能
さあ早く2010に移行するんだ
コード何個かフローティング表示にしたら重くなるな・・・いや便利だから良いんだが
ウィンドウを最大化したいのですが、ShowWindow+SW_MAXIMIZEでは 位置とサイズだけ最大化して、いわゆるシステムメニューでいう「最大化」になりません。 タイトルバー上の最大化ボタンを押すのと同じことをコードからできないものでしょうか? 何か変なことを言っていたらすみません。
コードから最大化ボタンを押すだけ
>>151 すみません解決しました。
OnCreate内でShowWindowしていましたが、ここで最大化はまずいようです。
結局
>>151 さんのレスを参考にPostMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0)したら一応希望通りになりました。
ありがとうございます。
154 :
デフォルトの名無しさん :2011/05/04(水) 13:17:05.27
String^ str = "シフトJISへ変換"; Encoding^ sjisEnc = Encoding::GetEncoding("Shift_JIS"); Byte[] bytes = sjisEnc->GetBytes(str);← どうしても←の部分で型が合わないとかいうエラーがでます。 どうしたらいいか教えてください。
配列の使い方も知らないのか
156 :
デフォルトの名無しさん :2011/05/04(水) 13:32:13.45
>>155 '初期化中' : 'cli::array<Type,dimension> ^' から 'unsigned char []' に変換できません。
157 :
デフォルトの名無しさん :2011/05/04(水) 20:52:48.70
VC++初心者です。大学時代にC++は書いてたので、なんとなく覚えています。 Mac用のアプリを開発しており、 それをWindowsに移植しようと考えております。 カスタム形式のViewを作って、それをいくつも Window(ルート的なView?)に 貼り合わせる処理をしたいと思っています。 そのような処理を行うには、 1. 完全にコードベースで作成し、貼り合わせる 2. 「GUIでViewを作成 + 細かな処理を書く」でコンポーネントを作成し、それを張る という2つの手法がありそうな気がするのですが、 もしよろしければ、やりかたを教えていただけないでしょうか。 よろしくお願いします。
158 :
デフォルトの名無しさん :2011/05/07(土) 16:05:43.23
array<unsigned char>^ GetByteCount(array<wchar_t>^ chars); のGetByteCountに代入したものをtextBoxに表示させるのは どうしたらいいのでしょうか?
159 :
デフォルトの名無しさん :2011/05/08(日) 16:31:35.20
VS2010EEでC言語の勉強してるんですけど、ファイルを読み込むって奴が出来ません。 コードは以下の通りです。 プロジェクトの実行ファイルがあるフォルダにpassword.txtというファイルを作って、 それを開くつもりでコマンド引数に同じくpassword.txtと設定したんですけど何が間違っていますでしょうか・・・。 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fp; char ch; if(argc !=2) { printf("ファイル名の指定がありません。\n"); exit(1); } if((fp = fopen(argv[1], "r"))==NULL) { printf("ファイルを開く事ができません\n"); exit(1); } while((ch=fgetc(fp)) !=EOF) putchar(ch); fclose(fp); rewind(stdin);getchar(); return 0; }
>>159 カレントディリクトリは必ずしも実行ファイルの位置じゃない
F5で実行ならプロジェクトの位置だった気がす
161 :
デフォルトの名無しさん :2011/05/08(日) 17:51:44.90
>>160 出来ましたああああああああああああああああああああああああああああああああああああああ
ありがとうございます、本当に助かりました!
いいってことよ
newとdeleteはスレッドセーフですか?
ランタイムライブラリの種類がマルチスレッドかマルチスレッドデバッグかマルチスレッドDLLかマルチスレッドデバッグDLLなら
ありがとうございます
VC++ でコンソールプログラムを作る場合、 プログラムが Ctrl+C を検知するにはどうしたらいいんでしょうか。 中身の都合上、いきなり中断されてしまうと困るので、 自分で中断処理を行なって終了するようにしたいのですが、どうしたものかと。
SetConsoleCtrlHandler
ありがとう。
電源引っこ抜けよ馬鹿
using namespace std; はつかえないのですか? 名前は名前空間である必要があります とのエラーがでます
>>170 何もインクルードしないでそれ書いてない?
173 :
デフォルトの名無しさん :2011/05/11(水) 22:49:35.52
VC++ .netにて String^型などの変数に代入された文字列の順番を入れ替えたいのですが どうやるのか教えてください。 例 Strng^ temp; temp="ABC"; ここで何らかの処理をして temp="CBA"; としたい
174 :
デフォルトの名無しさん :2011/05/12(木) 01:25:42.76
VB2010Expressにて リストボックスの選択した項目だけ削除するボタンを作りたいのですが、うまくいきません。 プログラミングコードのPrivate Sub btnDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDel.Click の続きの部分です。よろしくお願いします。
ウィンドウを持たないプログラムでビットマップイメージの伸張を行ないたいです。 ウィンドウを持っているプログラムであれば、デバイスコンテキストと StretchBlt を使って 伸張を行なう方法を思いつくのだけれど、よい方法はないでしょうか。 非表示のウィンドウを作るというのも出来れば無しの方向で。
自分が表示してる以外のウインドウにも書けるから 自分がウインドウ持ってるかどうかは全然関係ないように思えるけど やりたければ単純にビット列として自分で処理してもいい。
>>175 何がしたいのか分からんがイメージのスケーリングを行いたいってこと?
178 :
175 :2011/05/12(木) 14:43:02.72
失礼。目的を書いてませんでした。 画像のリサイズを行なうプログラムを作りたいのです。 最初は自分でビット列から計算することも考えたのですが、 時間が掛かりそうなのと、素人の自分では綺麗に出来そうもなかったので、 既存の API などを利用できないかと考えてて StretchBlt を思い出した次第です。
web用に画像を自動生成するライブラリ使ったことあるし、 探せば画像用のいろんなライブラリあるだろ
本当だ 探せばいくらでも見つかるな
>>178 ビット列に対して線形変換を行えばいいだけだけど
正直既存のライブラリで十分だと思う
StretchBltもそんなに綺麗じゃなかったような
OpenCVを使うべき
184 :
175 :2011/05/13(金) 17:12:34.42
ありがとうございます。 出来れば標準で使えるものだけで済ませたかったのですが、ライブラリもあってみることにします。 StretchBlt は確かにきれいではなかったと思うのですが、お手軽かな、と。 線形変換‥‥勉強してきます。
VC++2010expressの質問ですが Xcodeの過保護なインテリセンスみたいにifやforの後の記述を表示したり 対応する()をそれぞれ色で分けることはできませんか?
186 :
デフォルトの名無しさん :2011/05/18(水) 23:46:17.15
VisualStudio2003つかってます。 ビルドして一回は成功するんだけどリビルドするとコンパイル中にとまってしまいます ずっと帰ってきません。 雛形のダイアログべースMFCアプリすらビルドできない。 たぶんIDEのバグだとおもうんだけど久々に使ったからなにが原因かさっぱりわからない。 CPU使用率は0。 IDEがコンパイラからのプロセス終了通知を受け取れないとか、そんなような不具合が最近出たりしました?
バカほどコンパイラの所為にする
188 :
186 :2011/05/18(水) 23:57:37.54
じゃあ何のせいよ
>コンパイラの所為にする 誰もが一度は通る道だろうに。
190 :
186 :2011/05/19(木) 00:00:49.43
大体、閉じるボタンを押しても反応しないし、どうみてもIDEのバグだろう。 初心者スレに書くとこれだからなぁ。。 そういう現象が出ていたかどうかを聞いているんだからそこを答えてくれよ。
>>190 一番の問題は
質問する態度じゃないことだな
192 :
186 :2011/05/19(木) 00:09:33.56
もういい。直った。 中途半端なスキルで先生気取りのおこちゃまども。 原因はカラースキームを代えた事だった。「Windows XPスタイル」に戻してリブートしたらいけたよ。 ぐぐったら英語の掲示板でgrepするとハングするって話題があって、そこにカラースキームを戻せって書いてあったのが決めて。 お前らほんと役立たずだね。 そのくせえらそう。 たぶんお前ら雑魚が絡まなかったらそのうち知ってる人が書いてくれたと思う。 それをつぶしてるだけのくずだね。 IDEがハングしてるのにIDEのバグじゃないって。 こんなやつらにソフトかかせてて大丈夫?w
荒れる前に書いておこう >・ネタや煽りは軽く流しましょう。
194 :
186 :2011/05/19(木) 00:13:40.35
なんか日本の掲示板で特にソフトとかコンピュータ系ってさぁ やたら回答者が偉そうだよな 外国の掲示板はみんな親身になってくれるのにさ。 ちょっと教えてやる代償として偉ぶりたいんだろうね。 低い志だ
なんか日本の掲示板で特にソフトとかコンピュータ系ってさぁ やたら質問者が偉そうだよな
197 :
186 :2011/05/19(木) 00:29:40.05
英語もわからんくせにw
質問からの流れが神風すぎる 掲示板なんだから催促せずもう少しゆっくり待てよ だから小学生って言われるんだよ(-。-)y-゜゜゜
VS2010はバグバグでさらに楽しいワールドになってて不具合見つけても誰も興味を示さないぐらいになってる やっぱりIDEはこうでなきゃねw
なら日本の掲示板なんか使わずに外国の掲示板を使えばいいのに マゾなの?死ぬの?
とりあえず開発環境はデフォルトで使わないと
202 :
デフォルトの名無しさん :2011/05/21(土) 13:35:55.48
なんか、バッチプログラムよりもつまらんね。
203 :
デフォルトの名無しさん :2011/05/21(土) 13:56:21.99
お世話様です。 バイト配列同士を結合する方法する方法を教えていただきたいのですが。 +演算子を使ったりConcatを使ったりしましたが、うまくいきませんでした。 方法はあるのでしょうか?
VC++2008Explessを使っています。 WinInet.lib を使用してHTTPヘッダーを表示するプログラムを作っているのですが 帰ってくるchar が1文字飛ばしでNULLが入っていてTextBoxに表示させようとすると1文字で終わってしまいます。 どうしたら良いでしょう? ちなみにdwByteReadの中には読み取った文字数みたいなのが入ってました。 文字数分だけTextBoxの変数に強制的に入れられたらいいんじゃないかと思うのですが char lpBuffer[102400+1]; DWORD dwBytesRead = 102400; bool inetread = HttpQueryInfo( hService, HTTP_QUERY_RAW_HEADERS_CRLF, lpBuffer, &dwBytesRead, NULL); if( inetread == false || dwBytesRead == 0 ) break; textBox2->Text = textBox2->Text + gcnew String(lpBuffer); WinInet.dll はSystem::stringとか使えないので型変換が非常に面倒ですね。
char -> WCHARでおk
HttpQueryInfoもAとW有るんだな なのにLPVOIDなのかよ
そりゃ文字列以外を返すこともあるから当然
208 :
デフォルトの名無しさん :2011/05/21(土) 23:19:34.03
1>------ ビルド開始: プロジェクト: NimotsuKunFinal, 構成: Debug Win32 ------ 1>コンパイルしています... 1>Parent.cpp 1>d:\gamelib\src\nonfree\nimotsukunfinal\sequence\parent.cpp(1) : fatal error C1083: include ファイルを開けません。'GameLib/GameLib.h': No such file or directory 1>StageSelect.cpp 1>d:\gamelib\src\nonfree\nimotsukunfinal\sequence\stageselect.cpp(1) : fatal error C1083: include ファイルを開けません。'GameLib/GameLib.h': No such file or directory 1>Title.cpp 1>コードを生成中... 1>ビルドログは "file://d:\GameLib\src\NonFree\NimotsuKunFinal\Debug\BuildLog.htm" に保存されました。 1>NimotsuKunFinal - エラー 11、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== こんなのが出るんですけど、パスをいじればいいのでしょうか?環境変数もいじったけど、うまく読んでくれません。 どうしたらいいのでしょうか? そのファイルがあるのは D:\GameLib\2DGraphics1\include\GameLib です。
>>208 #include してるところにフルパスで書いてみたら?
または、プロジェクトのプロパティの「追加のインクルードディレクトリ」に
D:\GameLib\2DGraphics1\include を入れるか、
D:\GameLib\2DGraphics1\include\GameLib を入れて、#include のところで、GameLib/ を外すか。
>>209 HTTP_QUERY_STATUS_CODE指定すればDWORDでくれるよ
213 :
デフォルトの名無しさん :2011/05/22(日) 00:43:26.06
>>205 うまくいきました!!ありがとうございました
今まではメモ帳などでプログラム書いてプロンプトのmakeコマンドでコンパイルをしていました。 プログラム環境を整えるためにvisualC++を導入しましたが、プロジェクトやファイル操作が巧く出来ず困っています。 visualC++の操作方法について詳しい解説サイトをご存知ないでしょうか? 自分が探した範囲ではhalloWorldを新規作成する程度の例しか見つけられませんでした。 見当違いの質問ならすみません。
>>216 有難うございます。参考にさせていただきます。
VC++2008で構造体を配列的に持つ変数をつくろうとしているのですが、どうもうまくいきません。 ref struct ireko{ int link1; int link2; int link3; int next; } array <ireko > ^saraA = gcnew <ireko>(1024); これでビルドしようとすると error C3149:トップレベルの '^' なしに、この型をここに使用することはできません と言われてしまいます。 何を言っているのかさっぱりわからない上に 構造体、配列の使い方が 高校時代に勉強していたものと全く違って戸惑っています。 C++/CLI ではマネージと呼ばれる方式に変わったそうですが、私が知っているのはアンマネージの時代の技術なんですね ググってもアンマネージのことばかり出てきて、頭が沸騰しそうです。 構造体を配列的にもつにはどうしたらよいのでしょう
cli::array<ireko^>^ saraA = gcnew cli::array<ireko^>(1000); じゃねーか? すんごく簡単に言うと、C++/CLI では各オブジェクトはネイティブでいうところのポインタみたいなモンで管理されてる。 それは配列の中身も同じなのな。で、その「ポインタみたいなモン」はハンドルっていうんだっけ? その型を示すのが ^ なワケだ。 しばらく触ってないから適当なこと言ってるかもしれん。詳しくは自分で調べれ。
そういうことで、Cと違うものやるぐらいならC#やったほうがいいと考えるわけ
221 :
218 :2011/05/24(火) 15:27:19.62
>>219 ありがとうございます。 そのように記述したらcli::は不要でしたがビルドできるようになりました。
ただ、実行しようとすると
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
というエラーが発生するようになり、実行できなくなってしまいました。
どうやらsaraA[] はLength=1024 確保しているようですが、その中の
saraA[0],saraA[1],saraA[2]・・・ がすべて未定義となっているようです。
これらはすべてひとつづつgcnewをしていくのでしょうか。。
ちなみに、arrayは毎回データを失いたくないので、Form.hの上の方に
private: static array <ireko^> ^saraA = gcnew array <ireko^>(1024);
と記述しています。
222 :
218 :2011/05/24(火) 15:37:26.68
コンストラクタで saraA[0] = gcnew ireko(); とすることでエラーはでなくなりました。 が、これってforかなんかで全数gcnewする必要があるんでしょうか。 一気に全部使えるようにはならないんでしょうか
そもそも >private: static array <ireko^> ^saraA = gcnew array <ireko^>(1024); こういう初期化のやりかたは無理でしょ
テスト
>>223 無理でしょ という事が理解できなくて困ってしまうのですが、
>>222 の方法でひとまず動くプログラムになりました。
226 :
218 :2011/05/24(火) 21:28:10.35
次に自作関数をつくって再起をかけたいのですが、 「error C3861: 'myfunc12': 識別子が見つかりませんでした」 と言われてしまい、関数が作れなくて壁に当たってしまいました。 識別子が見つからない、というのは関数自体が見つけられていないということだと思うのですが、なぜ見つけられないのでしょうか 試しに Void myfunc1(){ Me... } 自体をForm1.hの上の方の namespace app{...} 内に置いてみたところ動作するようになりました。 関数は呼び出すところよりも上で定義しないといけないのでしたっけ。 どうも私のイメージでは 下の方にまとめて記述するようなイメージがあるのですが。 以下がテストプログラムです。 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { myfunc1(); }; void myfunc1(){ MessageBox::Show("テスト"); };
>>226 関数プロトタイプ宣言とか初歩だと思うの
228 :
親切な人 :2011/05/24(火) 21:55:22.60
>>226 関数はその関数を使う前に記述するようにする。すべての関数を一つのファイルに
いれることで可読性がよくなる。
また、関数が多くなりすぎるとわかりづらいので、一つ一つの関数はできるだけ大きくする。
関数間でデータをやりとりするのをわかりやすくするためにグローバル変数を各関数で
共有するようにする。
初心者ままずこれぐらいを気を付ければOK.
がんばって。
すげー親切なヤツだな。w
>>222 ネイティブでやるところの int** a = new int*[16]; みたいなモンだから。
かなり基本的なことで申し訳ないのですが、このスレでも C++、CLR、CLI、.NET、MFC等名前が出てきて、 それぞれ似た系統の微妙に別の言語っぽいというのはなんとなく分かるのですが、 ・それぞれ何が違うのでしょうか ・VC++2010で新しいプロジェクト→Win32→Win32プロジェクトを選んだ場合、 記述しているのはどれにあたるのでしょうか 入門書を買おうにも、自分がどの言語をやっているのか分からないという不思議な状況に…… MFCと書いているのが役に立つのか、最初にCLR選べって本がいいのか……
その用語一つずつここで全部説明してもらおうっていうのがバチあたりというか、 ググればわかるだろ、という話だな。 VC++プログラム入門みたいな本を一冊買ってこい。
一つづつググっても関連がわからないのです 本を買いたいのですが、少し立ち読んだ限りでは、 「とりあえずコレを選んでこうしろ、ほら動いたろ」 みたいな形で、ネットのVC++講座も似たような感じ 今やっているものが何にあたるのか分からない状況です
C++ そう言う名前の開発言語。およびその仕様。 CLR 共通言語ランタイム。マイクロソフトによる.NET Frameworkの動作環境の一つ CLI 共通言語基盤。.NET Frameworkの動作環境についてマイクロソフトが定めた仕様。 .NET マイクロソフトが開発したアプリケーション開発、実行環境。 MFC WindowsAPI をラッピングしたクラス群。 軽くググった程度でこんだけわかるんだが。 「わからない」と思った場合はなにがわからないのか。なにをわかりたいのか。 それをちゃんと整理してから聞かないとアホの子扱いされるだけだよ?
>>233 それぞれの関連、特にVC++との関連がわかりません
C++ 言語 VC++立ち上げて新規→Win32コンソールで書くのがこれ
CLR VC++立ち上げてCLR選べばこれを書ける CLR独自の命令が使える?
CLI .NETと関係あるっぽい VC++との関連が不明
.NET CLIと関係あるっぽい VC++との関連が不明
MFC なんか機能 VC++ならどのプロジェクトでも使える、
ただし使ったら他のコンパイラではエラー
わからない部分を明確にしてみました
間違っている部分を補足してもらえないでしょうか
・VC++2010で新しいプロジェクト→Win32→Win32プロジェクトを選んだ場合、
記述しているのはどれにあたるのでしょうか
これも教えていただけると助かります
とりあえず上記のように考えているのですが、
この解釈で合っていれば「CLRでCLIとMFCを使ってプログラムを書く」なんてのも出来るはずですが、
>>19 なんか見るとそれぞれ独立しているっぽいですね
分かっている人には当たり前すぎるのでしょうが、何がなにやら
こういう手合いは「なにがなにやら」とか言いたいだけで理解する努力しないんだろうね。
>>234 >>233 に追加でWin32API、Win64APIも追加で考えないとな
Win32を選んで出来るのは、Win32APIを直接使ったプログラム
他にもMFCとかも選べるだろ?
ATL・・・
>>237 ありがとうございます
>Win32を選んで出来るのは、Win32APIを直接使ったプログラム
なるほど、結局それぞれ独立しているのかな
CLRを選ぶとWin32APIは使えないと
>他にもMFCとかも選べるだろ?
VC++2010Expで新規プロジェクトの選択肢にMFCとやらは無いようです
ということは、とりあえず今は考えなくていいようですね
WTL・・・
>>239 いや、Win32API(64bitWinならWin64も)だけは、どれからも呼び出せる
WindowsAPIの上に、MFCが乗ってるか、.netFreameWorkが乗ってるかだけ
(厳密には.netは単純に乗ってる訳じゃ無いが)
あと、C++と、.netで使うC++/CLIは全く別の言語と考えた方が良い
>>231 手元に二冊入門書あるけど、
片方は何の説明もなく「CLR選びましょう」と書いてある
もう片方も説明無しでVC++=MFCみたいな前提で書いてある
入門書に求める内容じゃないだろ
>>241-242 Win32を選んでできるのが基本的なC++
CLR(=CLI?)を選べばCLRの機能が使えるけど全体的にC++と別物
MFCを選べばMFCの機能が使えるけどやっぱりC++と別物?
てな感じでしょうか
>>244 MFCはその名の通りクラスライブラリだぞ?
>>244 MFCも普通のC++を使います
そもそも、C++/CLIはC++を.net用に拡張した、.net専用C++とでも言うべき言語です
.netで使う場合、ほとんど拡張部分を駆使する形になります
まったくの初心者がVCで.netは苦労するだけで何のメリットもないから .netやるつもりならC#やっとけ
もうペゾルド本でもC#の時代だもんね。 でもこの質問者、熱心に見せかけて人の言うこと聞かない伸びないタイプだから すぐ放り出すに1000ぺリカ。
もう少し掛けろよ
>>247 うむ、vcはネイティブアプリ専用だーね
.net書く時はc#どころか、普通のc++に比べても余計な記述が増えるだけだもんよ
プロでもやってらんね
>>294 私が新たに1億ペリカ掛けよう
。。。ペリカってどこの通過?
ゴールドとかルピーの世代なんだが
VC++2008 で RichTextBox を使用しています。 文字の色を変えることはできたのですが、太字にすることが出来ずに困っています。 色はColor::Redなどをそのまま代入すればよさそうですが、Font関係はインスタンスをつくってそれを入れる必要があるイメージでしょうか。 以下のようなプログラムを作ったのですが、 「error C2664: 'System::Windows::Forms::RichTextBox::SelectionFont::set' : 1 番目の引数を 'System::Drawing::Font' から 'System::Drawing::Font ^' に変換できません。」 と言われてしまいました。 MDSNを見てもいまいち1番目の引数が何なのかよくわかりません。 textBox1->SelectionStart = start; textBox1->SelectionLength = 1; textBox1->SelectionFont = System::Drawing::Font(textBox1->SelectionFont,FontStyle::Bold); サンプルプログラムはVBかC#が多いですね。。 関数名などは似ているようですが今回のような件にはあまり参考になりません
g++では-std=c++0xを指定すると使えた配列の指定をVisualStudio2010で使うにはどうすればいいでしょうか。 int* array = new array[3] {1,2,3}; という書き方です。スタンダードに書くとこうですが、 int* array = new array[3]; arry[0] = 1; array[1] = 2; array[2] = 3; 要素の数が多くて新しい書き方でかきたいです。
間違えたので訂正。 g++では-std=c++0xを指定すると使えた配列の指定をVisualStudio2010で使うにはどうすればいいでしょうか。 int* array = new int[3] {1,2,3}; という書き方です。スタンダードに書くとこうですが、 int* array = new int[3]; array[0] = 1; array[1] = 2; array[2] = 3; 要素の数が多くて新しい書き方でかきたいです。
Initializer Lists未サポート
255 :
253 :2011/05/25(水) 18:36:05.31
ありがとうございました。死ねバルマー
初心的な質問宜しいでしょうか? 時々他人のコードを読ませていただいていると if( a = Func() == 0 ) { } こんな感じの処理を見かけるのですが これは処理の流れはどうなるのでしょうか? Func()と0を比較した後 aにFunc()の返り値を入れているとかそんなかんじなのでしょうか? 見ていてどう処理されるのかがわからなくて凄く気持ち悪いのですが
失礼しました。 a = Func()の間に括弧がありました。 この場合、 a(Func()の返り値代入済み)と0の比較になるのでしょうか?
>>256 if ( a = Func() == 0 ) 〜 なら先に Func() == 0 を評価して
その値を a に代入し、 a の値が真ならば〜
if ( (a = Func()) == 0 ) 〜 なら Func() の値を a に代入してから a == 0 ならば〜
…かな。間違いが起きにくいように分けて書くほうが良いとおもいます
a = Func();
if( a == 0 ) 〜
注釈 >その値を a に代入し、 その値というのは Func() == 0 の評価値なので 真か偽を a に代入ということになるとおもいます
>>261 そのサイトひっでぇな
C++って書いてるのにC++/CLI教えてるのか
詐欺ってレベルじゃねーな
すんごくおおざっぱに言うと、
CLI は動作環境に対する仕様で、.NET Freamework はそれに基づいた実行環境。
CLR は .NET を動かすためのランタイムライブラリのようなもの。
この環境で動作するプログラムを書くための開発言語が、C++/CLI や C#、VB.net 。
これらはコンパイルでは中間コード?に翻訳されてて、仮想マシン上で動作し、マネージコードとも言う。
C や C++ などはこれらとは違ってコンパイル時に直接実行コードに翻訳される。
VC で Win32 プログラムと言われるのはこれ。
Windows 上でプログラムを組むなら普通は WindowsAPI を併用して書くことになる。
WIndowsAPI とは OS のシステムコールのこと。
MFC はマイクロソフトが作った主に WindowsAPI などをラッピングした追加ライブラリのようなもの。
マネージコードに対してアンマネージとかネイティブとか言ったりする。
ちなみに C++/CLI はマネージもアンマネージも両方とも扱える。
だからデバイス制御などの OS やハードよりのコードを C# などから参照できるライブラリとして書いたり出来る。
間違ってる箇所もあるだろうけど、自分で調べれ。
>>261 入門書なんか大抵の物ならなんでもいい。
そこに書いてあることを反復して取り込んで自分の物にしていく。
今の時代ならネットがあるから、疑問に思ったら徹底的に調べることも出来る。調べることが重要。
同じ理由でべつに本でなくてもいい。
ってかこんな糞サイトよく探してきたな
>>261 やりたいことは決まってるの?
ぶちゃけ最初からGUIだとわからないままおまじないだらけになるぞ
CUIでアルゴリズム構築できるようになれ
あとCは理解してるの?
C++とC++/CLIが別物とかオタが言ってるだけだから真に受けるなよ 公式的には拡張だからその本も初心者向けに説明省いてるだけで騙す気はないはず 実質別物なんですけどね
拡張とかほざくのはマネージ拡張までにしておけよ
>>261 >>246 をもう一回嫁
.netFreameWorkってのは、CLRと言うランタイム(VM)の上で走るプログラム用のクラスライブラリ
CLIは色んな言語で共通のクラスライブラリ(.net)を使うためのインターフェイス(取り決め)
対応言語はvbやc#、f#など
.netで楽にプログラミングしたいなら、c#にしとけ
vc++の、それもEEを選ぶ理由は、c/c++で、win32を直接書いてアプリ作る事ぐらいしか無い
まあ、OSがどんな風にアプリとやり取りしてるかの勉強にはなるので、やりたいなら止めないが
>>265 やっぱ別物じゃんw
ってか、自分の説明と言ってる内容同じなのにオタ扱いかよ
(
>>246 )
VC++ EEでネイティブでGUIするのにいいライブラリないかね
EE でも自分でリソースファイル書けばすむことじゃん。
なんかC++/CLIでいい気がしてきた。
と思ったけどインテリセンスがきかねぇ だめだこりゃ
>>273 それで良いならc#行けよ
そもそも、vc++EEには価値が無いのが気づかないのか
>>263 ありがとう もう少し理解が進んだ、気がする
同じVC++入門でも扱ってる言語が二種類あって、
前知識必要な上に内容見ないとわからないとかスゴイ話だ
>>264 「VC++ 入門」でトップに出てくるんよ
やりたいことは、C++で書かれたソースで、流れを理解したり多少いじったりしたいものがある
そのためにはC++の基本的な文法や命令を知りたい
そのために、かなり簡単でいいので入門書一冊読破したい
CUIは精神的につらいので、大半理解不能のおまじないでいいのでGUIがいい
1から何か作る気はなくて、必要になったものがもしHSPで実現できなければその時考えればいいと思ってる
>>276 少しは金払う気があるなら、c++bilderの方が初心者がc++でguiするのに向いてる
ただ、基本文法覚えるのさえ、cuiでは心が折れるなら、そもそもプログラミングに向いてないと思う
おまい、そう言うことは先に言え。w だったら UI を作りやすい MFCアプリケーションを選んで、 ダイアログのメイン画面にボタンを貼り付けてそれをダブルクリック。 自動的に追加されるイベントハンドラな関数に好きなだけ C++ コードを書くといい。 たぶんおまえが望んでるような本はない。 経験から言って、本を買ってもページ数の 5% もまともに読まない。知りたいことは書いてない。 図書館でも行ってたくさんの本をつまみ食いでもしとけ。 自分はほぼ独学でネットのつまみ食いでなんとかなったけどな。
>>278 流れから察するに、彼は無料版しか持ってない
CUIは絶対必要なものというか、それがつらいならGUIはもっとつらいよ。 意地が悪いかもしれないが、君はなんかどうでもいいことにこだわってうまくいかない感じがする。 いるんだよ、そういう奴。
ならWTLでよくね?
ATL付いて無いから無理
>>277 貴重な情報ありがとう、三万とはまた心憎いラインだ
向いてなくてもプロのグラマーになるじゃなし、
目的があって手段をどうするかというだけの話
>>278 >だったら UI を作りやすい MFCアプリケーションを選んで、
>ダイアログのメイン画面にボタンを貼り付けてそれをダブルクリック。
>自動的に追加されるイベントハンドラな関数に好きなだけ C++ コードを書くといい。
半分くらいしか意味わからんけど、求めてるのはそういう感じ
GUIがいいっても、GUI関連を弄りたいわけでは全くないし
そろそろ構わない方がいい気がしてきた・・・
>>283 gui関連に興味ないなら、どこをどうすればcuiで心が折れるのかが分からん。。。
>>283 なんでもいいから、とりあえずやってみてからな。
この道は試行錯誤を重ねるしかないんだよ。
とりあえず私が書いたモンくらいは理解しとけ。
ID はないけど、長文ばっかだからわかるだろ。w
>>286 >この道は試行錯誤を重ねるしかないんだよ。
ありがとう。ただ私は概念とかをきちんと理解してから物事を進めるタイプなので
試行錯誤とか無駄なことはしたくないのです
本職のプログラマーはそういう泥臭い世界なのでしょうが、無駄な努力は興味が
ないですし
WEBや書籍を一通りみてみましたが、この世界はきちんとした体系で物事を進める
よりおっしゃるような試行錯誤が前提になっているようですね
プログラムという仕事が低い評価なままなのもそのあたりに原因があるような気がします
試行錯誤を必要としない技術系の仕事はないよ? 技術系に限らんけど。
>私は概念とかをきちんと理解してから物事を進める >CUIは精神的につらいので、大半理解不能のおまじないでいいのでGUIがいい はあ?
プログラム組んでて試行錯誤しないときなんてないぞ C++やめて人に作ってもらった方がいいんじゃないかガチで
騙られるとか何年ぶりだwwww
肖像権とは、本人の承諾なしに無断で写真やビデオカメラに撮られたり、 それらを無断で公表したり利用されたりすることのできないように、 主張できる権利です。 肖像権には、 ・「人格権」の一部としての肖像権 ・「財産権」である「パブリシティ権」 の2種類が存在します。 「人格権」 アーティスト、俳優はもちろんのこと、誰にでも認められている権利であり、 一般人の写真が無断で雑誌・ホームページなどに掲載された場合でも、 人格権侵害や名誉毀損等で訴えることも可能です。
>>289 むしろ、プロの方が会社に金を出させてる分、素人より楽が出来るとも考えられる訳だが。。。
誰も、試行錯誤したくてしてる訳ないだろ
プログラミングの世界は、基本的にvbの様な初心者向けの言語でも、試行錯誤するんだよ
あんたがさっき言ってたhspもそうだったろ?
別人か。 敢えて特徴的な改行するのは良い釣り師
最近Javaを始めたらJavaにもいろいろフレームワークとか あって何が何だかだったがそんな感じなんだろう。 試行錯誤して理解したがなw
MS Sucks!!!!!!!!!!!!!!!!!!
301 :
251 :2011/05/26(木) 19:34:21.52
ところで
>>251 の事も思い出してあげてください・・・
>>301 c#に移行する気が起きないのは何故なんだぜ?
.netで使った事無いけど、エラーメッセージ見る限りじゃ、"^"付ければ良いんじゃ無い?
ダメなら、キャストかな
型が合ってないだけだから、割と単純だと思うんだが
フォントの作り方とかC#やVBのサンプルでも読んで勉強した方がいいよ
textBox1->SelectionStart = start; textBox1->SelectionLength = 1; textBox1->SelectionFont = gcnew System::Drawing::Font(textBox1->SelectionFont,FontStyle::Bold); でおk
入門書というか解説書っぽいのざっと調べてきた なんかもう色々アレなのでこれで最後にするよ 世界でいちばん簡単なVisualC++のe本……ちょっとC++に触れて、後はCLI ひと目でわかるMS Visual C++…….NETプログラムの本 プログラムを作ろう! Microsoft Visual C++ 2010 入門……これも.NETの本 これからはじめるVisual C++……違いにはほぼ触れないが、CLIの本 Visual C++でカンタン はじめて学ぶプログラミング……何も説明なくCLIだけ説明する本 明快入門 Visual C++ 2010……MFCの本 有料版前提 CLIにも多少触れる かんたん Visual C++……MFCの本 有料版前提 CLIにも多少触れる 総括 ・Visual C++がタイトルに入ってるのは、基本的にC++/CLIの本 というか一般的に、C/C++未経験者にとってVC++はC++/CLIのためのソフトって位置づけなんだろうと思った ・ただしMFCがタイトルや表紙に入っていればMFCの本、C++/CLIにも多少触れてる ・Visual C++でカンタン以下略だけはマジキチ 冒頭読み比べる限りC++とC++/CLIの違いに一切触れてないのはこれだけ ・Visual C++使ってMFC使わずとりあえずC++やる、なんて本は無いのかも おとなしく独習C++やるかビルダーやってきます
>>305 visualも何も付いてないただのC++入門の本はVC++でCUIばっかりだけどな。。。
GUIでC++入門したいって能天気な人だろ?
一応、C++Bilder6は1万ちょいでまだ売ってると思う
在庫限りのはずなんだが、余裕で余ってるからな
VC++は、大人の事情で使うか、最新のDX3Dを使うためののものと考えた方が良いよ
手軽にC++プログラミングは存在しない
なんだろう。 車の運転を覚えたいのですが、という質問をした人に何か返事したら、 ロータリーエンジンとかディーゼルエンジンとかそんなことばっかり一生懸命しらべて 何にも前に進まないでいるみたい。 アクセルとかブレーキとかハンドルの使い方をまず覚えた方がいいと思うのだが。 あと基本的に人のいうこと聞かないタイプだね。
>>307 プログラミングは車を運転する事ではなく、車を作る事に対応するからな
車を運転したいって整備工場に来る様なもの
だったらこっちは、自動車学校(アプリ使う側)に言って下さいと言うだろ
どちらかというと運転にも車の仕組みにも興味なくエンジン機構について知りたいのに何故かトヨタ車に拘ってた感じかと
BuilderはBuilderでGUIは独自ライブラリだったよな。 あんなもの勉強してどうなるのか
C言語とC#ある程度かじって、今度はC++学ぼうと思っているんですが C++のコンパイラのBorland 5.5でどうしてCもC++もコンパイルできるの? C言語の拡張版がC++って考え方なの?
C++コンパイラでCをコンパイルできないコンパイラってあるの?
それよりスレ違いに気がつこう
質問をさせていただきます。 どなたか解決策をご存じの方はご教授ください。 マルチスレッド周りをデバッグしてると、 パソコンごとフリーズする問題に直面しました。 Windows7 VisualStudio2005 (C++で作業) サービスパックはすべて当ててます。 VisualStudio2010 Express でも試しましたが同じ現象が発生します。 調べたところIMEが悪さをしているとあったので、 IMEをアンインストール。(ATOKに換えました) 「そもそも停まるもんだ」 という情報もあったのですが、あまりに不便なので困っています。 発生する箇所はLuaというスクリプト言語ファイルを読み込みしている箇所で、 スクリプト側からC言語の関数を呼び出しているところに ブレークポイントを貼り、ステップオーバーしてると高確率でフリーズします。 (Luaとは別にマルチスレッドも行っています) デバッガ使っているとフリーズするのは結構前からある問題のようですが、 製品版のVisualStudio2010なら直っているのでしょうか。 何か解決策等ご存知でしたら教えてください。 お願いします。
IMEをアンインストールしても挙動が変わらなかったのかどうか書いてない。
そもそもデバッガなんて使ったこと無い
ここはサポートセンターじゃないよ
>>315 挙動変わらずです。
サポセン聞くかあ…
それだけで判断すると製品版でも再現すると思うけど。 プロセスだけ終了させることもできなくなるの? 完全にOSがフリーズ?
>>319 もうすべてパソコンフリーズです。
マウスは動くけど反応しない感じ…。
CTRL+ALT+DELETEも効きません。
VSは 応答しません
になってます。
しょうがないから電源ボタンで再起動してます。
詳細なテキストサービスをoffにしてみそ
>>321 それはIMEを消すまえにやってみたんですけど、
結果は変わらずでした…。
言語バーじゃないとしたらなんなんだろう…。
IME使わない人がデバッガ作ってるからしょうがない
マルチスレッドなプログラムでステップ実行すると高確率で固まる。 そう思って諦めるしかないと思ってたんだが、違ったのか? てっきり IDE が、スレッド間の同期?をとるために排他制御かなにかをはさんでて それがうまくいかずにああなるのかと。 デバッグするときは、ログ出力を埋め込んで当たりをつけてから、 固まるのを覚悟で局所的にステップ実行って感じでデバッグしてたよ。 同じ症状なら、症状が重くなる前に ctrl + alt + del でログオフ -> 再度ログインで高確率で復帰できる。 まあ保存してないデータは失われるんだけど、復帰までの時間を節約できる。
>>324 IME全部消してみた(消したはず)だけどダメでした。
>デバッグするときは、ログ出力を埋め込んで当たりをつけて
やっぱこうやってやるしかないのかな。
PC用ソフトを作ってる会社とかどうしてるんだろう…
まあそのPCソフトを作ってる会社でそうやってるワケなんだがな。w
デバッグってログ出力かprintfかmessageboxでしかやったことない。
>>326 マジかw
苦労が絶えませんなそれは…w
>>327 こちらもそうします。
皆さん情報ありがとうー
>>314 タスクマネ-ジャでctfmonをkillする
>>329 ctfmon消した(はず)なんです。
はず、ってのは今挙がってこないので…。
vc++とc++とは何か違うのでしょうか
コンパイラと開発言語。
C++:車 VC++:トヨタ車
334 :
デフォルトの名無しさん :2011/06/01(水) 19:31:31.53
エラー 24 error LNK2019: 未解決の外部シンボル __imp__CharPrevA@8 が関数 _ChangeFileExtension で参照されました。 CharPrevとCharNextがないみたいです。マルチバイトです。 誰か助けて。
335 :
デフォルトの名無しさん :2011/06/01(水) 19:51:58.73
解決しました。 いつの間にか「親またはプロジェクトの規定値から継承」のチェックが外れてました。 多分いたずら好きの妖精さんの仕業です。
PathRenameExtension使えよって突っ込むわ
最近Visual C++ 2010 express のWindowsフォームアプリケーションで プログラムを作りはじめました。しかしForm1.hにどんどん追加され、 肥大化します。cppでなく、ヘッダファイルにロジック書かれるのは 非常に違和感があるのですが、仕方ないのでしょうか。 cppにロジックを書くようにするにはどう設定するのかわかりません。 一応10年前ごろにVC++5でのプログラミング経験があります。
>>339 STLを見ても私の疑問は何も解決しませんでしたが、自己解決しました。
Visual C++ 2010 express のWindowsフォームアプリケーションの仕様の
ようです。私は気に入らないので、ロジックはcppに移しました。
VC++2008です あるプログラムをC#からC++に移植することになりました(移植理由は会社の見栄、技術力を顧客に示すため、でもC++出来る人がいないのよね・・・) そんな理由での移植なので本を見ながら移植していて、困ったことが色々出ているのですが MFCアプリでメインのフォームやボタンなどの部品に、背景画像を設定するのってどうするんでしょう C#だと、プロパティにビットマップを指定してあげるだけで良かったんですが VC++はさっぱり・・・・ やりたくないけど逃げられないです。助けてください
MFCならCBitmapButtonとかあるだろ
ボタンはそういうのがあるんですね・・・・ フォームやラベルにもあるんでしょうか(LabelはPictureBoxを組み合わせて逃げようと思ってますが)
Visual Studioがなくて、Microsoft .NET Framework v2.0のSDKだけを 使って、SDK コマンド プロンプトでコンパイルしてますが、C++ .NETの コンパイルオプションは、(コマンドプロンプトのプログラムではなく) Windowsプログラム用は何になりますか。 VB.NETとC#.NETで言う/target:winexeに該当するオプションがわかりません。
>>344 Express落としてくる手は封じられてるの?
Visual C++ 2010 expressのWindowsフォームアプリケーションで フォーム上、またはフォーム上の特定オブジェクト(たとえば テキストエリアなど)にファイルをドラック&ドロップした時の イベントハンドラはどのように記述すればいいのでしょうか。 クリック時のハンドラは、デザイナーでダブルクリックすれば 勝手に作ってくれますが、ドラック&ドロップの場合の書き方、 作り方が分かりません。
>>346 C#のコードですが・・・、.NET上ならあんま変わらないと思います
http://support.microsoft.com/kb/307966/ja C言語を1ヶ月程やって(メモリ参照、メモリ確保あたりまで)、
C#を2,3ヶ月程やって(ラムダ式、イベントハンドラ、インスタンス)
今C++かじってるんですが、オブジェクト志向言語やってたせいで思考がオブジェクト思考になって
手続き型に拒否反応が出て、ものすごい覚えにくいです
どうにかすっきりしてスパッと覚えたいんですが・・・何かアドバイス教えてください
>>347 情報ありがとうございます。
やはりD&DするコントロールのAllowDrop プロパティを True に
すればいいはずですよね。ところがファイルをD&Dしてきても
マウスポインターが侵入禁止マークのままでD&Dイベント自体が
発生しないんですよね。どこが間違っているのかな。
>>347 正直理解できないな
staticメソッドとただの関数なんてさほど変わらないと思うんだが
ListBox コントロールには、ユーザーが処理する必要のある 2 つのドラッグ アンド ドロップ イベント DragEnter と DragDrop が用意されています。 DragEnter イベントは、コントロールの境界内にオブジェクトをドラッグしたときに発生し、 ドラッグ中のオブジェクトをそのコントロール上にドロップできるかどうかを判定するために使用します。 コントロール上にファイルがドラッグされた場合にこのイベントを処理します。 このイベントを使用すると、オブジェクトがコントロール上にドラッグされたときに、 ドラッグされたオブジェクトに応じて適切なアイコンを表示できます。 って書いてるだろ。 DragEnter イベントで処理してるのかよ。
>>350 ありがとう、ちゃんと読んでなかった。DragEnter イベント処理したら
うまくいきました。しかしDragDrop イベントでファイル名が取れない。
System::Void textBox_FineName_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) {
String^ fname = dynamic_cast<String^>(e->Data->GetData(DataFormats::FileDrop, false));
MessageBox::Show( this, fname, "test" );
}
これだと何も表示しない。もう今日は力尽きた。
Visual C++て、おそらくC標準ライブラリ、Win32API、C++標準ライブラリ、MFC、ATL、 インラインアセンブラも使えて、その上で.net frameworkを上乗せすることもできる んだろうな。 vb.netやc#.netで学習した.net frameworkの知識をC++にも適用できるし。 こんなワイドな対応力があるのは、すごいな。他にそんなのあるか?
System::Void textBox_FineName_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) { String^ fname = e->Data->GetData(DataFormats::FileDrop, false)->ToString(); MessageBox::Show( this, fname, "test" ); } これだと「System.String[]」って表示される。 C#やVBばかりで、CLIのサンプルが全然見つからない。
できた! System::Void textBox_FineName_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) { array<String^>^ arrayfiles; arrayfiles = (array<String^>^) e->Data->GetData(DataFormats::FileDrop, false); if ( arrayfiles->Length > 0 ) { fname = arrayfiles[0]; MessageBox::Show( this, fname, "test" ); }
>>352 ないね、でもそういうのが嫌いでキメラだという人もいる
俺は好きだけどね
.netFrameworkあれば他いらなくね?
>>356 それだけになったら、そもそもvc++の存在価値無くならね?
>>357 うーん
だからなのかなんなのかたしかに使ってないな
VC++ 2008でビルドした実行ファイルサイズについて聞きたい。 下記の環境でSDKで作ったプロジェクトをリリースでビルドすると 実行ファイルのサイズが、 XPでのビルドで、400KB。7でのビルドで1.6MBになってしまうんだが。 何か違いはありますでしょうか?XPと同じに400KBになってもらいたい。 以下は、2つの環境 1つ目 OS:XP Pro XP3(32ビット) 開発環境:VS 2008 Pro SP1 2つ目 OS:7 Ulitimate(64ビット) 開発環境:VS 2008 Pro SP1
マルチスレッドDLL
361 :
359 :2011/06/14(火) 13:42:01.84
>>360 プロジェクトのプロパティで
C/C++ → コード生成 →ランタイム ライブラリ → マルチスレッド (/MT)
2つの環境ともこの設定です。
SDKでってのはMFCを使ってないってこと? 「MFCの使用」はどうなってる? 先日のMS Updateの適用は両方同じ? 7だけUpdateしちゃったとか
>>362 7の方は、「先日のMS Updateの適用」をしました。
VC++のアプリはSDKをベースをしていますが、一部MFCも使用しております。
色々ぐぐったら、なぜ実行ファイルサイズが増えるのか分かりました。
皆さん、ありがとうございました。
Microsoft Update で 4月の更新の置き換えが出てるからそれで改善するかも。
C++相談室のほうで投稿したのですが、誘導でこちらに 以下コピー C++ 6.0 のADOを使用した処理で質問があります。 現在SQL SERVERに接続し、データを取得しています。 この時 _variant_t varValue; varValue = rs->Fields->GetItem(_variant_t("TargetDate"))->Value; このようにデータを取得してきているのですが DB側がIntegerの値を返すとvarValue はVT_I4となりvarValue.intValで値が取得できるのですが、 DateTime型の場合varValue はVT_BSTRになります。 この時、何かの型の変数に格納する場合、どのような型が適切でどのようにキャストしてやればいいのでしょうか? ウォッチしたときに varValueは"2011-01-01" BSTR と表示されます。この値を取得して使用したいのです。 よろしくお願いします。 追記:MFCは使用していません。
ここは初心者スレ
367 :
365 :2011/06/17(金) 09:19:52.21
いや・・・初心者なのですが・・・
368 :
デフォルトの名無しさん :2011/06/18(土) 03:05:43.08
VC2010,win32でビットマップの表示のプログラムを作成したところ、 プログラムは作動しているのですが以下のようなエラーが出力されて画像の表示ができません。 file2.exe の 0x7c80baba で初回の例外が発生しました: 0xC0000005: 場所 0x00000081 を読み込み中にアクセス違反が発生しました。 rcファイルはResEditを使用しており VC2010のリソースファイルは bitmap1.bmp file2.rc となっています ご教授願います
ソース貼れよ ぬるぽチェックしろよ
引数が間違ってんだよ
371 :
デフォルトの名無しさん :2011/06/18(土) 19:27:42.53
>>369-370 一応解決しました
LoadImage関数の第1,第2引数をそれぞれNULL,TEXT(bitmap1.bmp)にしていなかったことが原因みたいです
追加の質問で悪いのですが、LOADIMAGE関数の第2引数をMAKEINTRESOURCE(IDB_BITMAP1)を使ってリソースファイルから直接読み込む方法はありませんか
↑の方法だとResEditのBITMAPフォルダを使用せず画像をロードしているようなので・・・
よろしくお願いします
372 :
371 :2011/06/18(土) 21:00:21.84
自決しました お二人とも情報ありがとうございました。
>>365 _bstr_t 経由で LPCTSTR に変換すればいいと思うよ
374 :
超初心者 :2011/06/18(土) 22:38:25.62
初心者でお願いがあります。 VC++6.0で、ある一定時間毎に"AAA.CSV"を読み込み、その値を表示するプログラムを考えております。 しかし、"AAA.CSV"が無い場合に"問題が発生したため、TEST.exeを終了します。・・・"というエラーが表示され、 動作停止となります。"AAA.CSV"が無い場合は、そのままを表示を変更せず、動作を継続させる方法をどなたか、 ご教授願いませんでしょうか?プログラムは下記の通りです。どうぞよろしくお願いします。 void CTESTDlg::OnTimer(UINT nIDEvent) { if(nIDEvent==1){ static char DATA_B[1000],*DATA[45]; static int DAT; ifstream fin; fin.open("C:\\AAA.CSV"); if(fin.fail()){ CEdit* myED1=(CEdit*)GetDlgItem(IDC_EDIT1); sprintf(SS,"エラー"); myED1->SetWindowText(SS); fin.close(); } else{ fin >> DATA_B; DATA[1]=strtok(DATA_B,","); DAT=atoi(DATA[1]); fin.close(); CEdit* myED1=(CEdit*)GetDlgItem(IDC_EDIT1); sprintf(SS,"%2.0d",DAT); myED1->SetWindowText(SS); } } CDialog::OnTimer(nIDEvent); }
あるかないか調べるだけ
しかし気持ち悪いプログラムだな
C言語ちょっとかじって、C++勉強しているんですが
Visual C++じゃないのですが、Borland5.5でC++勉強しているんですが教えてください
http://ideone.com/WyQsu これなんですが、何故stdlibをインクルードしていないのにreallocが使えるのかわからないです
他にもC++のコンパイラで何故C言語をコンパイルできるのかもわからないです・・・
どなたか教えてください・・・
>>377 スレ違いBorlandスレに池
>何故stdlibをインクルードしていないのにreallocが使えるのか
stdlibをincludeしてるから
C++ならreallocじゃなくてvector使え
>C++のコンパイラで何故C言語をコンパイルできるのか
コンパイラがそういう風に設計されているから
歴史的経緯から言えばC++がCの拡張からスタートしているため
クラス(class)でもやや持て余している状況なんですが テンプレート(tamplete<>)が必要になる状況がさっぱりわからないのですが 単純な例で説明してもらえないでしょうか?
スレ違いの質問があったときに テンプレがあれば適切なスレに誘導するのが楽
>>379 あれば便利な場合があるだけで、必要ではない
例えば配列の機能を持つクラスを作るとしよう
templateがないと、「intの配列クラス」「doubleの配列クラス」「構造体1の」「構造体2の」・・・
と個別に書かなきゃならない
扱うデータの型以外のコードは全く同じものを
>>379 よく引き合いに出されるのは、swap
void swap(int& lhs,int& rhs);
void swap(double& lhs,double& rhs);
・・・
を
template<class T>
void swap(T& lhs,T& rhs);
の一つで済む。型に依存しないアルゴリズムを記述できる
スレ違い
test.txt 100,200,300 150,310,520 上記のファイルをifstreamとgetlineを使って中身をカンマ区切り事に読み取り表示させる事はできたのですが 中身のデータを文字列から数値に変換したいのですがどうすればいいのでしょうか?
lexical_cast sstream strtoX atoX お好きなのをどうぞ
>>386 どもです
sstream関連で対処することにしました
classでPrivateとPublicがありますが 「めんどーだから全部Publicでいいだろ?」と思っていはじめているのですが それだとエラーが出やすいor極端に処理が遅くなる等あるのでしょうか?
とりあえず全部privateにして必要になったらpublicにすればいい
外部からアクセスする必要のあるものは public アクセスされたら困るのは private でいいよ。
外部からアクセスする必要もない 外部からアクセスされても困らない という両方の条件に見合った場合は?
privateで
必要なけりゃprivate
それよりスレ違いに気がつけ
while(1){ printf("スレ違い\n"); }
class meibo{ private: public: struct hito{ int rank; int age; void data_input(); void data_output(); }; void data_input() { meibo::hito A_kumi[20] meibo::hito B_kumi[20] A_kumi[0].rank =1; A_kumi[0].age =13; B_kumi[0].rank =2; B_kumi[0].age =14; } void data_output() { 出力処理 } data_output()でA_kumi[],B_kumi[] の中身のデータを利用(参照)したいのですが どうすればいいのでしょうか?
グローバル変数にすればいいよ
プリコンパイル済みヘッダを使用する場合に、たとえばpch.h, pch.cを使ってCソースコードを使ってプリコンパイルを命令して、 他のapp.cppなどC++のソースファイルにpch.hをインクルードしても、ちゃんと利用できるんでしょうか。 それとも、プリコンパイルされた情報とは別に、もう一度pch.hを解析することになるんでしょうか。
>>398 makeとか使った事無いのか?
バイナリがあって、ソースの方も変更無ければ心配ない
統合環境って言っても、ビルドはその辺がボタンに割り当てられてるだけ
心配なら、色々いじって実験すれば良い
398じゃないけど ビルド&コンパイルをよく理解してないでC++を弄っている俺ガイル ヘッダーファイル 関数の集合体を書き込むファイル ソースファイル 沢山のヘッダーファイルから関数を効率よく呼び出すメインファイル ソースファイルが複数?ソースファイルは1つだろw複数あるとどういう動作すんの? コンパイルって要は変換だろ?そんなファイルが2つ3つあったらどう動作するんだ? というレベル
C#からやってきたんですが、メンバ関数を書くときクラスの外側でクラス名::メンバ名と書けますが 最近、クラスの真下に書けることを最近気づきました。クラスの真下に書いてもいいんですか?
外側と真下が対比すんのか
原因不明のエラーの時にリビルドすると直る時がある。 環境いじった時はリビルドが無難
>>399 なるほど。わかりました。
ありがとうございます。
>>401 言葉だけよりもコードを貼ったほうが、
疑問は早く解決できると思う
>>400 コンパイルとリンクを昔は分けてた
今はビルドでコンパイルとリンクを一緒にやるようになったから、ごちゃ混ぜに考えちゃうんだな
コンパイルでアドレス部分だけ未完成なバイナリに変換して、リンカで不完全なバイナリを結合して完全な実行ファイルを完成させる
makeファイル作っとけば、変更があったソースだけコンパイルして、リンクする
ビルドは、その辺を自動化してるだけ
リビルドは、ソースに何も変更なくても全部コンパイルとリンクをやり直す
407 :
401 :2011/06/22(水) 22:34:33.62
>>405 こういうことなんです・・・
class testclass
{
void testmethod();
}
void testclass::testmethod()
{
// 処理内容
}
これでも定義できるので、C#から来たので下のほうが直感的に分かりやすいんです
class testclass
{
void testmethod()
{
//処理内容
}
}
やはり上記のほうがいいんでしょうか?
inline付ければどっちでも同じじゃね? 後は見やすさの問題。
ヘッダに書くとちょっと修正するたびにリビルドになる可能性があるからお勧めはしない。 速度のためにインラインを期待するならありだけど、そうでなければヘッダには書かない。 他の言語から来たから「こう書きたい」ってのはかなり危険。
411 :
デフォルトの名無しさん :2011/06/23(木) 18:53:45.02
vc++ 6.0 で作ったのですが、プログラムを配布するには、どうするんですか? Installerがないような
ん?あるだろ。エディションは?無けりゃ作れ
>>410 ソースは見てないけど変数の寿命を勉強すべし。
大雑把だけど
・グローバル変数や静的変数はプロセスの終了で寿命が尽きる。
・オート変数はスコープを抜けると寿命が尽きる。
C++勉強中ならC++スレへ行った方がいい
415 :
デフォルトの名無しさん :2011/06/23(木) 21:20:45.15
コード生成で、ランタイムライブラリ をマルチスレッド/mt にすると msvcr100.dllを添付しないですみますが、これは何故なの・
スタティックリンクしてるから
417 :
410 :2011/06/24(金) 00:27:33.63
誘導ありがとうございます。C++スレに行って来ます
>>407 cppに書く他の理由としては
クラスの関係性によって、
お互いをインクルードしたくなる時のためとか、
ヘッダはいわばクラスの顔とも言えるし、宣言のみでスッキリさせたい、
というのもある。
419 :
デフォルトの名無しさん :2011/06/30(木) 21:27:37.28
C#2008やっててのことだけど、VC++2008でも同じだと思うので、ここのスレに書き込み。 Windowsフォームアプリケーションのプログラムで、Form1からダイアログを表示させる。 既にあるコモンダイアログボックスでなく、自作の、いわゆるカスタムダイアログボックスを作ろうと考えた。 Form2で作ってForm1から表示させようとすると、タスクバーに、Form1とは別のForm2が出てきてしまう。 コモンダイアログボックスみたいに、タスクバーに出ないようにしたい。 そこで、ユーザーコントロールとか、WPFとか、色々やってみたけど、それら自体挫折して、うまくいかない。 そうこうしているうちに、あるとき、Form1か2のプロパティを見てみたら、ShowInTaskbarというのがあった。 もしやと思いやってみると、Form1からForm2を表示させてもタスクバーにForm2が出てこなかった。 ・・・という、質問のようで答えまで書き、いわゆる経験談みたいになったけど、同じ悩みの人がいるかもと思い、こうして書いてみたわけですが。
Windows7 からできるようになった JPGなんかのタグ分類 これってどうにかして取得できないでしょうか。 .net でも Win32 でも何でもいいのでAPIが無いでしょうか
> コード生成で、ランタイムライブラリ をマルチスレッド/mt ハア?????????? 今日何ゴミの日だっけ?
環境vc10 express //hoge.h #pragma once namespace foo { class hoge{}; } こういうクラスを、 //hogehoge.h #include "hoge.h" class hogehoge : public hoge { }; こんな感じで、継承すると、error C2504: 'hoge' : 定義されていない基本クラスが宣言されています。 助けてください。
public foo::hogeだろ
俺もいまだにnamespaceが何をガードしてくれてるんだかわからん これまったく無意味だと思うんだけど・・・
CopyRectっていう関数が二つあったら困るだろ? そういうことだ
>>427 なんでクラスの中にあんのにそんなのできんだよ
他のライブラリとか使ってるとクラスの名前とか関数の名前とかかぶるだろ? 今までかぶったことないなら別に気にしなくてもいいよ
なんだよ 極限に設計ミスってるときの話かよ 底辺な底辺の話なのな
設計関係ないでしょ 名前がかぶらないようにってだけの話で
これは酷い
そいつはてえへんだ
>>431 絶対そういうの表面に出てくるよ
名前のバッティングがおきるようなソースは絶対に仕組みや設計もやばい
分かってるのに分かってないふりはよくねーぞ
こんな化石頭のキチガイが生き残ってたとは。
>>436 おめー、頭悪ぃからこういうものの関連がわかってねぇんだよ
つーか、最近になって導入される言語の機能は基本馬鹿御用達の意味不明仕様ばっかだから
お前にぴったりなのかもな(笑)
仮に名前がバッティングしてたとしてnamespaceあるから安心だとかいって バッティングしたままクラス作るとか正気ではないとは思うな 本当にバッティング回避の機能かっていうと疑問があるけどな
>>438 実際回避されるのになにを言ってるんだ…
実際回避用に使用許可出す会社とかびっくりだよね ま、プログラマーはシグルイだからな キャッチャーがセンターまでボールをとりにいくようなコードでも俺はおどろかねーよ
右クリックやツールバーのメニューを動的に増やしたいのだけれどできない? プラグインみたくロードしたDLL分のON/OFFなどを動的に作りたいのですが
google「メニューを動的に追加する」ってやって出てきたので 普通のメニューができっからこれと似たような感じでできんじゃねーのかな?
VC++2008でフォームアプリケーションで、単純にListViewに項目を 追加したいのですが実行時エラーが帰ってきてなかなか上手くいきません。 ソースにはフォームのロードイベントに ListView1->Items->Add("xxxxx"); しか書いていません。 エラー↓ C2039,C2065,C3350.C2039,C2065,C3350 本当に初歩的なことなのですが教えて頂けないでしょうか。 よろしくお願いします。
>>443 その処理は本当にC++/CLIでやらなければならない?
とりあえずVBかC#でやってみてはどうだろう
446 :
443 :2011/07/03(日) 00:45:24.22
>>444 VBは勉強済みなのですが、C++は使い方が異なりヘルプも難解なので戸惑ってます・・・・。
VBから入ったので同じことをそのままC++で出来れば良いのですが
>>445 C++のヘルプは読み解くのに時間が掛かりそう、というか何の説明なのかよく分かってません。
ちょっと時間をかけて取り組みたいと思います。
.netはC#でやるのが一番いいよ
448 :
443 :2011/07/03(日) 01:24:25.31
リストビューのADDメソッドを使うときもSTD名前空間を用意しないと使えないんでしょうか ていうか入出力処理に該当ものなのですか? それならiostreamもインクルードしないといけないのですが・・・
>>445 の例示では 標準出力を扱ってるけど、
>>443 でも違うクラスで同じ現象が生じてるってこと。(たぶん)
ListView のヘルプを開いて、それの所属する名前空間を確認してごらん。
>>445 の例示ではどうやってエラーを回避してる?
これは C# でも VB でも同じようになると思う。念のため。
と。書き忘れ。 それを理解した上で、VS が自動生成したコードの一番上の方を見てごらん。
451 :
443 :2011/07/03(日) 13:52:47.51
一度プロジェクトを新規に作り直して前述のコードを書いたら名前空間を指定しなくても通りましたw ほんとにお騒がせしました。 ありがとうございます。
今回の件はちゃんと理解しておいた方がいいよ?
コンソール画面で入力待ち、何もしないで1分経過すると次の処理をしたいのですが、 さっぱりわからない・・・・
PeekConsoleInputとSleepでポーリングしとけ
大きなプロジェクトの作り方について質問というか悩みを聞いてください。 クラスA, B, Cの三つがあり、A→B→Cという風に参照していたとします。 それぞれが結構な大きさであるため、まずCを1つのプロジェクトで作り、動作を確認をしました。 このとき、Cを含むクラスBをどのように作るのがベストでしょうか? 今までは、B用にプロジェクトを作って、そこにCのコードをコピーして使ってました。 何か効率が悪いというか頭が悪くて不安になってきます。 調べてみるとソリューションに複数プロジェクトを追加して.dllを生成して云々〜とあるのですがそのほうが良いのでしょうか? みなさんの方法を教えてくださいm(__)m
普通Aを作ってBを作ってCを作るんじゃないのか
えっ・・・そうなんですか。 いつも動作が確認しやすいので下から作ってましたorz
下から作ることに問題はないと思うが。 下から作ると動作確認がしやすいのなら下から作ればいい。 C用のプロジェクトを作って… B用のプロジェクトを作って… は、最終的なプロジェクトの中で作ればいいんじゃないの? dllにするかどうかは別の問題だし。 テストドライバが必ず必要になり残しておく必要があるならlibやdllに することも考えた方がいいかもね。 dllにするメリットは無いかもしれないけど。
stdafx.h の名前の意味ってなんでしょうか? 機能ではなく、なぜ名前が"stdafx"なのか、何かの略称の気がしますが、よろしくお願いします。
Application Framework eXtensions でしたか、ありがとうございます
main関数にメソッドを作るよりかクラスファイルに新しく書いたメソッドの方が 実行速度が速いようなのですがどうしてでしょうか? ちなみにソースコードはクラスファイルの方が3〜4倍あります。
意味不明。
inlineの話?
C++の使い方の勉強中なのですがメンバ関数について分からないので教えてください。 ただ単純にクラスの関数SUMの戻り値をプロンプトに打ち出すだけのものを考えているのですが、 インスタンス化の所が間違っているのか、インテリセンスが呼び出されずnumクラスを使えません。 どのように書くのが良いのでしょうか。 ↓ using namespace std; #include <iostream> public class num() { int sum(s); }; int main(){ int s; s = 0; num Math; s = Math.sum(s); std::cout << s << std::endl ; getchar(); }; int sum(s){ x = 10000; return x; };
インテリセンスは入力を補助するだけで それ以外はまったくあてにならない。
>>465 public class num() --> class num
int sum(s); --> public int sum(int);
int sum(s){ --> int num::sum(int) {
返信ありがとうございます。
>>466 超初心者なので補助をあてにした(ry
>>467 1,2行目はご指摘ごもっともだとおもいましたw
3行目はどういう意味でしょうか?
普通の関数宣言でやるのとは違うみたいですが・・・
>>465 sumは合計って意味だから、適当に作った関数にはhoge,fuga,foo,barなどを使え
エスパー回答と言うか、別の人間だが、2行目はsum(int n)、3行目はnum::sum(int n)に変えなさい
そしてsumをhoge,fuga,foo,barのどれかに変えなさい
>>469 sum(int)は、変数が省略されているということですか
ごめんなさい次からはメタ変数を使うようにしますね。
>>471 別に宣言部の引数は変数名省略しても良いんだけどね
実装部(num::sum(int n){...)は変数名省略したらエラーになる
と言うか、引数使って無いのね。。。 何の勉強してるのか分からんコードだな
>>465 のソースコードを修正したら
やっとエラーが残り1つになったのですが、
こんどは 指定された名前空間は存在しません となります。
ネットで調べた通りのはずなのですが、これはどう対処すべきなのでしょうか
>>474 読み直したらMathってなんだとか、色々ツッコミどころが。。。
Mathのsum関数使いたいのか、自作のsum関数(実体は引数使ってない)使いたいのか分からん
そりゃ、コンパイラも混乱するだろうよ
・修正が間違ってる ・理解が間違ってる ・ネットが間違ってる お好きなのをどうぞ
初心者が樹海送りになるまで悪口を言うスレでも立てようか?
マ板にでも立てろ
>>476 有る意味自分の修正の指示も間違ってたかもwww
メンバ関数以前に普通の関数&ライブラリの関数も理解して無さそうだもんよ。。。
cからやり直せとは言わんが、入門サイト読み直したら?
つーか、そこまでグダグダな入門サイトなのか?
URL晒せ
見てみて、サイトがバカか、お前がバカか見てやる
本当に初心者が来ると荒れるスレでござる
>>465 #include <iostream>
using namespace std;
class beginners_math
{
public:
int my_first_sum(int, int);
};
int main() {
beginners_math bmath;
int v1 = 10;
int v2 = 20;
int result;
result = bmath.my_first_sum(v1, v2);
cout << result << endl;
return 0;
}
int beginners_math::my_first_sum(int value_1, int value_2) {
return value_1 + value_2;
}
確かに初心者向けのサイトだと int num::sum() とかの記述は全く無いね まあデバッグは通るんだろうけど・・・
cでoop的にやってた流れ知らないとc++は何だかスッキリできないのかもね。
>cでoop的にやってた流れ これってどういう流れ?
VC2010EEで、ソリューションエクスプローラの背景色とフォントを 変えたいのですが、どこに設定があるのでしょうか? テキストエディタの設定は変更できています
488 :
デフォルトの名無しさん :2011/07/11(月) 14:11:37.48
いきなりですが、Visual C++2008でボタンをクリックしたら指定した動画を再生させる やり方を教えてください。お願いします。
>>488 C++/CLIなら.netで調べたほうがいい
Windows Media Player コンポーネントでもどうぞ
だがそれは本当にC++/CLIでやらなければならない?
VBやC#でいいんじゃないか?
むしろAIRがいいんじゃないか?
エスパー?
std::cerrの出力先をVCのデバッグ出力画面に設定する方法はありますか?
クラスにstaticなstd::mapを作ったのですが、初期化が上手くできません どうすればよいのでしょうか mapじゃなくても簡単に探索できればなんでもいいのですが、 他に何か良い方法があれば教えてください
staticなinitメンバ関数でも作ればいいよ
>>493 <boost/assign.hpp>
boost::map_list_of
便利よ
496 :
デフォルトの名無しさん :2011/07/13(水) 17:42:08.78
すみません、質問させて下さい。 cppファイルにグローバル変数を宣言して使用した場合、 変数に対するメモリ確保はクラスインスタンスの寿命と一致するのでしょうか? このように確保されたメモリはプログラム内で領域破棄は出来ないのでしょうか? また、クラス内のstaticメンバ変数にクラス名::static変数といった形で インスタンスを作らずにアクセスした場合どのようにメモリ確保されているのでしょうか? (あまり関係ないかもしれませんがVisualStudio2005+MFC環境下です.)
グローバル変数とクラスインスタンスって何か関係有るか? どうやってなんて気にしなくていいよホント
498 :
デフォルトの名無しさん :2011/07/13(水) 19:58:52.62
>>497 有難うございます。
cppで宣言するグローバル変数って単なるファイルスコープの変数で
インスタンス毎に違う領域が確保されるのかと勘違いしてました;
staticメンバと似た感じの記憶域になるんですね・・
なんかヘッダにメンバ変数がどんどん増えていくのが見づらくて
ついついcppにグローバル宣言してました・・注意します・・
Cの古いキャストを撲滅したいのですが、VC++でこのキャストを使ったらエラーか警告になる設定ってありますか?
あればコンパイラのマニュアルに書いてあるはず
VC++2010ExpessでSJISのソースファイルから「C言語」でコンソール・プログラムを作ってますが、 コンパイル通って実行すると、 Debug assertion failed _CrtlsValidHeapPointer(pUserData) dbgreap.c Line:1322 とポップが出て終了してしまいます。 _tprintf()で全角カタカナを表示する直前で止まってしまうのですが、エラーのヒントをお願いします。
_tprintf(_T("%s\n") _T("Usage:\n") _T(" %s <subcmd> <-h|...>\n") _T("\n") _T("\t--subcmd:データ表示--\n") _T("\tcal : 予定表・ニュースを表示.\n") .......); の「データ表示」直前でエラーとなります。
setlocaleしろ
解決しました。ありがとうございます。
…ところが、このアプリに引数1つ'abc'などの英文字を付けて実行して、argv[1]を表示してみると、 [?q???????????????????????????????????????????] などの意味不明の文字が表示されるのはなぜでしょうか? お願いします。
_tprintf使ってるのに_tmainを使わない馬鹿はいないだろ
なるほど、まさに、ごもっともです。
(´・ω・`) int _tmain(int argc,_TCHAR *argv[]) としましたが、 「問題が発生したため、終了します。ご不便をおかけして申し訳ありません。」 と言われました。
一度T系使わないで決めうちで書いてみては?
どこでウィルス認定されるかよくわからんよね
チェックしてないものをprintfで使ったら 引数にわざと変なもの突っ込んでハッキングされるだろ
コンソール・プログラムをデバッグするとき、コマンドラインはどうやって渡すのでしょうか?
[プロジェクト]→[***のプロパティ]→[構成プロパティ]→[デバッグ]→[コマンド引数]
おお、ありがたや (・人・) ってか、小さ! 開けたのに見落としたわw
__FILE__ マクロを使うと意味不明な文字列が表示されるのはなぜでしょうか??? *.c でpjc作ってます。 コンパイルは通るのですが、右クリックで「定義へ移動」すると、 「シンボルの定義は見つかりませんでした」 となりますが???
Unicode文字セット + printfで嵌まってるのかも? printfの第2引数以降は何でも受け取るからコンパイルエラーは出ないよ #include <tchar.h> #include <stdio.h> #include <locale.h> int _tmain() { setlocale(LC_ALL,"JPN"); _tprintf( _T("%s\n"), __FILE__); // NG _tprintf( _T("%s\n"), _T(__FILE__)); // OK return 0; }
518 :
デフォルトの名無しさん :2011/07/17(日) 00:40:16.23
Windows7/64bit/Visual C++ 2008 Express Editionを使用しています。 Adobe After EffectsのSDK_Noiseをビルドしようとすると↓のようなエラーが出るのですが・・・ どなたか何が原因か分かる方いたら教えてください。。。 1>------ ビルド開始: プロジェクト: SDK_Noise, 構成: Debug Win32 ------ 1>Compiling the PiPL 1>Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>SDK_NoisePiPL.r 1>c:\Users\test\Desktop\Adobe After Effects CS4 SDK\Examples\Effect\SDK_Noise\Win\..\..\..\Headers\AEConfig.h(71) : fatal error C1189: #error : "unrecognized AE processor" 1>Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>SDK_NoisePiPL.rrc 1>ブラウザ情報ファイルを作成しています... 1>プロジェクト : error PRJ0003 : 'bscmake.exe' の起動中にエラーが発生しました
ブラウザ情報の生成をやめる
520 :
デフォルトの名無しさん :2011/07/17(日) 00:48:36.92
プロジェクトのプロパティのどっかにあるよ
522 :
デフォルトの名無しさん :2011/07/17(日) 00:59:29.16
>>521 ありがとうございます。
プロパティ→構成プロパティ→C++→ブラウザ情報を生成する→なし
に設定しなおしてみたのですが
全く同じエラーが出るみたいです。
申し訳ありませんが誰かわかりそうでしたらよろしくお願いします
1>------ ビルド開始: プロジェクト: SDK_Noise, 構成: Debug Win32 ------
1>Compiling the PiPL
1>Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>SDK_NoisePiPL.r
1>c:\Users\test\Desktop\Adobe After Effects CS4 SDK\Examples\Effect\SDK_Noise\Win\..\..\..\Headers\AEConfig.h(71) : fatal error C1189: #error : "unrecognized AE processor"
1>Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>SDK_NoisePiPL.rrc
1>ブラウザ情報ファイルを作成しています...
1>プロジェクト : error PRJ0003 : 'bscmake.exe' の起動中にエラーが発生しました。
523 :
デフォルトの名無しさん :2011/07/17(日) 01:01:13.80
そもそもExpress Editionでは64bitマシンの開発を行えないとか 噂でちょろっと聞いたことがあるんですが本当ですかね?
「visual c++ 2010 express 64bit」でググルとトップに良いサイトが見つかるよ。 実際にやった事あるけど可能でした。
525 :
デフォルトの名無しさん :2011/07/17(日) 09:39:25.05
>>524 一応できることは出来るんですね・・・
しかし何でこんなに面倒くさいのか・・・もっと簡単にやる方法はないんですか。。ないんでしょうね。。
SDK入れてちょっと弄るだけじゃん すごい簡単な方だと思うけど
教えてもらった通りにやったらこの前のエラーはなくなったけど また違うエラーが出てきました。。 1> Compiling the PiPL 1> Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 1> Copyright (C) Microsoft Corporation. All rights reserved. 1> 1> SDK_NoisePiPL.r 1> Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 1> Copyright (C) Microsoft Corporation. All rights reserved. 1> 1> SDK_NoisePiPL.rrc 1> AEGP_SuiteHandler.cpp 1> SDK_Noise.cpp 1>c:\program files\microsoft platform sdk\include\windows.h(157): fatal error C1083: include ファイルを開けません。'excpt.h': No such file or directory
>>527 なおすのは簡単だけど、またリンクが見つからないとか
毎回効いてくることになると思うから、インストールから
やり直してみては?
SDKをインストールして、それからVC++いれてみ
APIを使って画面作成や画像の読み込みなどをして 画像を表示するまではできたんですが、 どうやったらキー入力を読み取って画像を移動することができるかわかりません。 キー入力を受け取らせる方法にタイマイベントを使って WndProcのWM_TIMERを呼び出せば・・・ という方法があったのですけど、処理の負荷やタイマに依存する事を 考えるといい方法とは思えず、どうすれば良いか悩んでいます。 キー操作を受け取って、画像(BMP)を移動するという処理を 作るのに何か良い方法は無いでしょうか?
WM_KEYDOWNメッセージ来るでしょ
キー押したらイベント発生すると思ったけど なぜそこでタイマーイベント使おうとしてるのかまったく理解不能
>>529 GetAsyncKeyState()
要するにゲームみたいなことやりたいってことか
winapiだけでゲームループは出来るが、
SDLなり、
俺は嫌いだけどDXLibでもつかったほうが百倍楽
存在しないファイルを開こうとしたときのエラー処理で、 functionA(const TCHAR *pfname) { … err = _tfopen_s(&f_opn,p_opn,mode); if(err&&msg){ _tperror(NULL); (a) _tperror(pfname); (b) … } … } で、 (a)では「No such file or directory」と表示され成功するのに、 (b)では「Not enough space」という別のエラーが発生してしまいます。 簡単なプロジェクトで(b)を再現するとうまくゆくのですが、原因のヒントだけでも お願いします。
分かりにくくてすいませんが、(a)と(b) はそれぞれ単独で実行したもので、 (b)の後に、もう一度_tperror(NULL)を実行すると、 「Not enough space」という別のエラーが発生 しているという意味です。
デバッグ・ビルドをステップ実行して最後まで終了するのに、 同じ条件でVC++外から、直接実行すると「申し訳ありません」エラーになるというのは、よくあることでしょうか?
日本語でおk
>>536 ままあるな。
DLLとかの検索順や位置がデバッグ時とかわるしな
>>535 再現するソース貼ってもらわないと多分わからん
>>529 タイマー使うなw
>>530 の言うように、キーイベント使え
その中で、表示した画像のx、y座標を押されたキーに合わせて変えりゃいい
>>528 ありがとうございます、SDKを先に入れたら上のエラー直るんですかね
やってみます。
BorlandC++ で作られれたコンソールC言語ソースを VC++ に移植しようとして苦戦しているものです。 基本的な確認をお願いしたいのですが、 const wchar_t *pfname wprintf(L"p_opn: [%s]\n",pfname); で「初回の例外が発生しました」と表示されますが、wprintf() の使い方は上記で 正しいでしょうか?
const wchar_t *pfname = L"test";ってやれば落ちないよ
>>542 むしろbccくれ
Webから消えると思ってなくて、雑誌付録のcd捨てちまったんだ
>>528 SDK→VC++の順で入れなおしてみたけど治らなかったです。。
ちなみに
>>527 と同じエラー文が出ました。。
>>545 [プロジェクト]→[***のプロパティ]→[構成プロパティ]→[全般]→[プラットフォームツールセット] を
SDKに変更した?
プラットフォームSDKって古くないか
コンパイラの立場になって、どこの定義みて動作決めてるか考えてみるといい。
解決するか分かりませんが一応VisualStudioのご意見ご要望のとこに質問おくってみました。
>>550 例えば、SDKのincludeの場所は
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include
とか
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A
とかになってない?
>>551 includeの場所というのは
プロジェクト→プロパティ→VC++ディレクトリのインクルードディレクトリということですか?
そうだとしたら
C:\Program Files\Microsoft Platform SDK\Include
に指定されているようです。間違ってたらすみません。。
もともとSDK入れなおせって言った理由は Microsoft Platform SDK になってたからなんだよね。 いつのSDK使ってんの?
>>553 Microsoft Windows SDK v7.1を使っています。
Visual C++のバージョンは、先ほど入れなおして2010になりました。
fgetc, fgetwcなどCランタイム系の関数が使えるのは、XPまでですか?まさか?
C:\Program Files\Microsoft SDKs\Windows\v7.1\Include じゃないの?
で、今はどういうエラーがでてるの? excpt.hは C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include にあるだろ?
秘密の呪文を知らないと動かないものでもないし、 セキュリティでプロテクトされてるわけでもないし、 コンパイラの動作考えたら常識でわかりそうなもんだと思うけど
RECTっていう構造体変数みたいなのをメンバ全体から参照できるようにして、 中身をある関数から呼び出すにはどういう風に記述したら良いのですか?
C++からやり直してください。
初心者に教えるスレなのにそんな事誰が教えるかみたいな発言する奴は死ねばいいんだよ
ここはC++初心者スレではないよ
*.cファイルをCでコンパイルしたいのに、 #ifdef __cplusplus #define ...... //ここが半透明色にならずに有効になっています。 #endif オプションはどうすればよいのですか? ちなみに「コマンドライン」は、 /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Debug\qtvc.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue です。
>>565 ソリューソンエクスプローラーの
*.cファイルのプロパティ -> C/C++ ->詳細設定
コンパイル言語の選択でCコードとしてコンパイルを選ぶ
thx
システムdll(?)しか使わない、300kくらいのスダンドアローンのツールで、 calloc() を実行すると、「Not enough space」でエラーになるんですが、 なにか原因は考えられませんか?
ウイルス
568です。 メニューの[プロジェクト]-[プロパティ]-[構成プロパティ]-[c/c++]の[コード生成]で、 ***エラーとなる「Not enough space」*** マルチスレッドデバッグ(/MTd) マルチスレッドデバッグDLL(/MDd) ***エラーとならない*** マルチスレッド(/MT) マルチスレッドDLL(/MD) の結果となりました。このツールでは自作のDLLは使ってませんが、一部、DLL化できる ようにプリプロセスしてますが、そこで書き間違いがあるのでしょうか?可能性として???
何が言いたいのかよく分からんけどcallocの呼び出しソースを晒すとか どのくらいのメモリを確保しようとしてるのかくらい書いたらどうですか。
すいません。呼び出しですが、双方向リストの最初の1個目の 構造体作成でエラーになります。 typedef struct _SEG { struct _SEG *nxt; struct _SEG *prv; TCHAR *data; size_t count; } SEG; if((seg=(SEG *)calloc(1,sizeof(SEG)))==NULL){ _tperror(_T("calloc()")); return NULL; }
それでもって、
>>571 の「コード生成」オプションで、
「デバッグ」と入っているのを選ぶとエラーになるんです。
ついでにコマンドラインです。 /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "MAKE_QT" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Debug\qtvc.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue
リリースのプラットフォームツールセットはSDKだけど デバッグの方はSDK未使用(v100)になってるんじゃね? (vc100.pdbが気になる)
アンダースコアから始まる名前は予約されてることが多いので 付けないほうが良いよ
アンダースコア + 小文字なら大丈夫よ
原因不明のエラーの時は 余分なの削ってエラーが再現する最小限のソースにする
>>576 おおっ。
メニューの[プロジェクト]-[プロパティ]-[構成プロパティ]-[全般]の[プラットフォームツールセット]が、
[v100]
になってます。ドロップリストには、ほかに [v90] というのがありすが、、
「C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(293,5): error MSB8010:
指定したプラットフォーム ツールセット (v90) には Visual Studio 2008 が必要です。
コンピューターに Visual Studio 2008 がインストールされていることを確認してください。」
と言われちゃいました。
自分は VisualC++Express2010 を使ってますが、どうなんでしょう?
コンソールアプリで試してみたけど別に問題は無かったよ。 579さんが言ってるように最小限のソースで確認すべきでは?
ありがとうございました。 メニューの[プロジェクト]-[プロパティ]-[構成プロパティ]-[c/c++]の[コード生成]で、 「デバッグ」 が付いた項目だけでエラーになるのは、境界チェックコードが含まれてるからでしょうか? 質問の calloc() は呼び出した関数の先頭部分で、ほかに示すべきものがありません。 calloc 呼び出し前に壊しているからエラーが出てるんでしょうか?
だから最小限のソースで確認してみなよ。 該当部分だけを実行するEXEを作れば確認出来るでしょ。 他のライブラリとか使っていて悪さをしてるかもしれないし… 今の状況では誰も分からんよ。
VS2008のC++でpropertyという名前の変数を書くと 青く表示されてしまうのですが、なんかの予約語なのでしょうか? コンパイルは問題無く通り、ちゃんと変数として使えるのですが。
Visual C++ 2008 Express Editionや2010 Express Editonは、 インストール後30日を過ぎても登録なしでも、コマンドプロンプト のコンパイルは使えますか。
586 :
デフォルトの名無しさん :2011/07/24(日) 14:28:35.18
VC++2005の設定で、「浮動小数点モデル」をデフォルトの「Precise」から「Fast」にしたら かなり高速に処理するようになりました。 これはなぜなんでしょうか?? x87FPUではなくSIMDのほうのFPUを使うからとかでしょうか?? でも「拡張命令セットを有効にする」をいずれにしても速度は変わらないので、違うのでしょうか・・・
基本的な質問ですが、 SOMESTRUCT **buff[samesize]; _tprintf(_T("[%d][alm=%10d][%d]\n"),buff[i], buff[i]->date, int); という書式を出力しようとすると、int の値が常に 0 ゼロになってしまいます??? int の部分だけを切り取って、 _tprintf(_T("[%d]\n"),j); のよに2列の _tprintf() で処理すると int の値が正常に 表示されるんですが、いったいどういうことなのでしょうか?? _tprintf(_T("<%d><%d><%d><%d><%d>\n"),10,20,30,40,50); などは正常に表示さるます。
>>588 intなのかjなのか
変数の型と変数名をごっちゃにしてんのか?
32bit環境?64bit?
ごっちゃですいません。int j; のことで、実行時では j としてます。 32ビット XPpro の VC++2010Express です。buff[]->date は time_t 型です。
デバッグのために挿入したコードで、値を確認するための文です。
>>592 >実行時では j としてます。
jになってないから言ってるんだが
_tprintf(_T("[%d][alm=%10d][%d]\n"),buff[i], buff[i]->date, int);
^^^
VC++をインストールしたころ、プロジェクトを削除しようとしてたらフリーズしたので、 再起動させたら、「VC++(?)が壊れたかもしれません」のようなウィンドウが表示された 記憶があるのですが、それが原因でしょうか? 再インストールが必要なのでしょうか。 どうもVC++はこのような訳のわからないエラーが多いような気がするのですが、 前部のバグでこんなエラーがよくでますか、VC++では?
OnCloseが落ちてこないんですけど何が考えられるでしょうか?
599 :
587 :2011/07/26(火) 22:45:47.66
>>597 まさかメモリにいちいち書き出していたとは・・・
ありがとうございました!
親戚の引越しを手伝った際にVisual Studio 6.0を貰ったので C++の再勉強とWindows XPプログラミングにチャレンジしようと思っています。 6.0はANSI C++に準拠してないようですが、 具体的にどのような違いと留意点があるのかお教え頂けないでしょうか? もしくは本やWebサイトで、 これらの違いを吸収できるような情報源をお教えください。 よろしくお願いします。
せめてvs2008使え タダだから
>>601 お答え頂きありがとうございます。
実は・・・VS6.0貰った際に、
VC6.0に関する高額な良本もいっぱい貰ってきたのです。
ですのでANSI C++との差異を吸収できれば幸いと思っています。
高校の時にANSI C++(多分98)は齧っているので、
差異の情報源さえあれば何とかなると感じています。
現在、以下の差異はWikipediaで確認しました。
・テンプレート
・例外処理
・名前空間
・新形キャスト
・ブール型
その他、差異や留意点がありましたら宜しくお願いします。
603 :
sage :2011/07/27(水) 06:31:35.65
プロパティで 追加の依存ファイル dinput8.lib;dxguid.lib;%(AdditionalDependencies) 追加のライブラリディレクトリ $(DXSDK_DIR)\Lib\x86;%(AdditionalLibraryDirectories) と設定してコンパイルするんですが 1>LINK : fatal error LNK1181: 入力ファイル 'Input.lib' を開けません。というエラーが発生します どうやったら解決できますか
はいはい、マルチポストマルチポスト
>>602 事情は理解するけど、いまから勉強するなら、規格から外れた変な癖がつくからVC6はおすすめできない。
>602 たしかVC6に付属するドキュメントに全部書いてある
C++の勉強がしたい人はC++スレへどうぞ
>>602 フリーソフトのgccとかの方が規格に準拠してるから、mfc使ってms独自の文化に慣れようとかじゃ無い限りはvcは薦められん
vcはvcって言う別の言語と思っても良いんじゃないかと思う
(と言うか、脳内変換してる)
VC6はね 今はそうでもないでしょ
初心者がWindowsでgccなんか使おうとすると別の所で引っかかるだろう
612 :
デフォルトの名無しさん :2011/07/28(木) 10:22:34.03
プロジェクトを立ち上げる時の - Visual C++ ATL CLR 全般 MFC スマート デバイス Win32 ↑これらが何を意味するかわかりません。 本当にしょっぱなのしょっぱなですが、大雑把にでよいので、何したいときにATL使え、CLRは何したいとき!など 教えていただけないでしょうか。 よろしくおねがいします。
わからないうちはWin32一択で どうせ他のを使うことはそうあるまい
一応説明すると、、、 ATL COM作るとき CLR .NET Frameworkで動くもの(C++/CLI)これで1から書くならC#でいい MFC MFC(クラスライブラリ)を使うとき、、Win32の上に乗ってるのでWin32の代わりにこれ選ぶことはあるか スマート デバイス いわゆるCEとかWindowsMobileのソフト書くとき2010から削られてるから、2008Proあたり? Win32 普通のC/C++のコード書くとき
615 :
612 :2011/07/28(木) 11:01:04.40
どうもありがとうございます! MFCとWin32しか使ったことがなく、特に上2つが会社で聞いてもよくわからんと言われてたのでとても勉強になりました。 環境書き忘れていてすいません。2005Proでした。
大丈夫かその会社
全部の機能使うやつはいないだろ
すいません。 int _tmain(int argc,TCHAR *argv[]) { time_t tim=0; TCHAR tbuf[1024]={_T('\0')}; if(argc==2){ tim = (time_t)_tstoi(argv[1]); if(_tctime_s(tbuf,sizeof(tbuf)/sizeof(TCHAR),&tim)){ _tperror(_T("_tctime_s()")); usage(); exit(1); } _tprintf_s(_T("time_t:[%u]=[%s]\n"),tim,tbuf); } return 0; } として、 sample.exe 1309471800 などと実行すると、 time_t:[1309471800]=[(null)] と表示されるんですが、何が間違ってるんでしょうか?困ってます。お願いいたします。 VC++2010Express、Windows XPpro です。
P.S. 前にもお尋ねしましたが、 _tprintf_s(_T("time_t:[%u]=[%s]\n"),tim,tbuf); の部分を、 _tprintf_s(_T("time_t:[%u]"),tim); _tprintf_s(_T("=[%s]\n"),tbuf); のように分割すると、意図する結果になるのですがVCの設定が間違ってるのでしょうか?
sizeof(tim)が8なのに%u使ってるからじゃないかな
time_tが__int64なら、%llu だな
>>621 おおおおおお!!!! 神光臨!!!
できました!
感謝、感謝です。
えーと、Visual Studio Express 2010 は、最大(?)「90日」という日数制限 があるようですが、「2008」の方にはないのでしょうか?
>>623 ユーザー登録すれば2010の日数制限なくなるよ
Studioじゃ無くてそれぞれの言語に別れてるけど
体験版の話だったら、2008も2010も日数制限外せない
Express と言ってるからユーザー登録の方だろうか。 2010はどうか知らんが、2008は英語版か、ISO版なら ユーザー登録無くても使えた。 別に金かかるわけでもなし、登録すりゃいいと思うがな。
登録って、会社側は何が得なんだろうか??
>>626 規約違反見つけ易いとか、ダイレクトメールで新製品の宣伝とかじゃないかな
x64ではインラインアセンブラが廃止されました。 今後64bitアプリが主流になると考えると、組み込み関数記述による最適化を覚えると良さそうでしょうか? その場合でも、ハードの動きは意識できたほうが良いので、 今のうちにアセンブリ言語で練習しておこうとは思っています。
629 :
623 :2011/08/02(火) 07:43:49.21
>>624-625 無料版の話です。
Express 2010の無料版でも、登録すれば日数制限はなくなりますか?
>体験版の話だったら、2008も2010も日数制限外せない
もしかして、「体験版」と「無料版」の二種類があるのでしょうか?
>>629 expressは無料版
それとは別にproとかenterpriseの体験版がある
おとなしく登録しろ
VC2008も安くなったのでわ?
633 :
デフォルトの名無しさん :2011/08/02(火) 17:16:00.72
2008って、64bitでも使えるの?
どういう意味で聞いてるのかわからんけど 普通に使えてるよ。
普段はVBがメインなのですがCUDA動かすのにC++使い始めた初心者です。 ファイルの出力でofstreamを使ってるんですが、 えらく遅い(VBで.NetのStreamWriter使用した場合の倍ぐらい) stringstreamにため込んで一気に書き出すというような書き方をしてるんですが、 fout << ss.cstr() << endl; (こんな感じ) とにかく速く出力したければどうすべきでしょうか。 使い方が悪いのか、そもそも別の方法使った方がいいのか・・・ .NetFrameworkは使わない前提です。
636 :
デフォルトの名無しさん :2011/08/02(火) 18:25:00.70
>>634 64bitならば、intとかdoubleも倍長が増えるのかな?
倍長が増える、の意味がよくわからんが 64bit環境のOSで動く、という意味だったが 64bitのコードのことならLLP64なのでポインタ以外は変わらない
>>635 デバッグ設定で計測してるとかないだろうな?
てかofstreamにそのまま<<するのはだめなの?
std::string のコピーでパフォーマンス食ってる気がする
639 :
デフォルトの名無しさん :2011/08/03(水) 03:26:01.61
スレ違いだったらすいません CLRでの開発です ARGBの順で各4ビット使用するピクセルフォーマットのファイルを読み込んで gcnew Bitmap (width, height, stride, Imaging::Format16bppArgb4444 , buf); みたいな感じでBitmapにしたいんですが、Format16bppArgb4444が存在しないみたいなんであきらめるしかないんでしょうか この他にも別の形式のファイルも扱わなきゃいけない状況なんですが、他はFormat16bppArgb1555 とか全部フォーマットが対応してるんで、出来たらこの方法で統一したいです
Visual Studio Express 2008を、WinXP(32BIT)上で動かして、 WinSDKを入れて、レジストリも修正し、x64用プログラムも作れる 様になった。しかし、ReleaseのWin32でビルドすると、「x64」用に ビルドしている様な表示になり、Releaseのx64でビルドすると、 「Win32」用にビルドしている様な表示になる。つまり、Win32とx64 の出力ペーンでの表示が逆さま。 DebugのWin32とx64では、正しく表示される。 これはどうしてでしょう?
作りなおしてみては?
>>638 書き出すタイミングに気を付ければ言われたようにofstreamに
直接書き出した方がいくらか早い結果になりました。ありがとうございます。
とはいえやはり遅い・・・
CUDAで計算部分が40秒→0.5秒になったのに
出力を含めた全体となると295秒が350秒に・・・
デバッグ出力させてない?
>>642 日経ソフトウェア2011年8月号読む限りじゃ、500くらい並列実行しないとcpuで並列実行した方が速いんじゃないか?と言う結果だが。。。。
(CUDAの記事は何故かCPUでの並列実行した結果が無かったので、AMD APP SDKの記事に載ってた256CPU並列から推測)
ごめん なんか勘違いしてた データ数と分割数の両方考慮しないとダメだわ どっちが速いか想像で断定出来ん
質問しておいて遅レスで申し訳ない。
ひとまずofstreamやめて古典的なfopenとfprintfで出力してみた所、
速くなりました。350秒が190秒ぐらいに・・・
>>643 特にデバッグ用に何かを出力しているということはないです。
コンパイルもリリースモードで実施しています。
>>644 stdioとの同期がとられる仕様があることを知りませんでした。
↓これをプログラムの先頭に書けばOKでしょうか。
std::ios::sync_with_stdio(false);
プログラム先頭で指定しましたが、速度は特に変化なしでした。
>>645 CUDAの部分は早くなっているので問題なさそうです。(数千万スレッドの計算です)
CPUで前処理
↓
CUDAで計算
↓
CPUでファイル出力 ←これが遅い
endl はフラッシュするから \n に変えてみるとか
>>648 書出しのループ中は\nで改行し、最後の行(クローズ直前)のみ
endlとしています。
今回は速く書き出せればよく特にストリームに拘る必要はないので、
ひとまずCスタイルで対応することにします。
650 :
デフォルトの名無しさん :2011/08/05(金) 12:46:21.80
登録キーを取得するとき、メールアドレス必要ですか? 私は、パソコンのメールアドレスを持ってないのですが、 携帯のアドレスでも大丈夫ですかね?
HTMLメールで届くしコピペしないと辛いだろフリーメール取得しろ
652 :
デフォルトの名無しさん :2011/08/06(土) 22:25:03.23
ありがとうございます。 gmail始めました
ヒント:BitBltの引数
引数の位置情報を(0, 0)にしても表示されませんでした
LoadImageの引数にも問題あり ファイルから読むなら LR_LOADFROMFILE が必要
表示できました ありがとうございました
DXライブラリで入力した文字をcsvに追加するプログラムを組んでいるのですが、 「fopen」でファイルを開くときにオープンモードを「a」とすることで 文字を元の文字の後に追加は出来たのですが、 文字の前に追加することが出来ません。 こちらすいませんが、解決方法を教えていただけますと助かります。 また、可能でしたら、 文字を入力するセルの指定の仕方も知っておりましたら、 教えていただければと思います。
文字列を前方に追加するモードなんてないので 自前でやる必要がある
VC++2005 Academic Edition で作成したプロジェクトを 別のPCの VC++2008 Express Edition で開き、プロジェクトをコンバートした後、 Release設定でコンパイルして動作させると、VC++2005上の倍の処理時間がかかってしまいます。 VC++2005でコンパイルしたexeを、VC++2008を使うPCで動作させると、 ほぼ同等の処理時間で済みます。 CPUがCore2Duo E8600とE8500でほぼ同じということもあり、 この結果は納得なのですが、 VC++2008でコンパイルしたものは異常に遅いです。 特に時間がかかる関数は、大量のデータアクセスとループがあるので、 それが苦しいかとは思いますが、だとしたらVC++2005でコンパイルしたexeも同様になるでしょうし、 そうすると、VC++2005AEとVC++2008EEとではコンパイラの最適化性能が異なるということになりそうですが、 ここまでの差が出るものなのでしょうか? 他に考えられそうな原因はあるでしょうか?? OSは両方ともWindowsXPです。
Expressは最適化に制限がかかってる
662 :
660 :2011/08/09(火) 21:17:23.94
>>661 そうだったんですか!
Microsoft Visual C++
ttp://ja.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B >同じバージョンでもいくつかのエディションが存在し、
>以前は上位エディションしか最適化をサポートしていなかったが、
>Visual C++ 2005から基本的な最適化は全てのエディションにおいて行えるようになった。
>(2005で導入されたプロファイリングに基づく最適化 (PGO) は上位エディションのみでサポートされている)
この記述を見て、PGO以外はほとんど同じと思い込んでいました・・・
ありがとうございました!
2005のプロジェクトを2008にコンバートするとReleaseビルドでも最適化がOFFにされたような気が コンパイルオプション確認した?
664 :
660 :2011/08/09(火) 22:48:32.56
>>663 「実行速度(/O2)」になっていましたし、「Fast(/fp:fast)」も引き継がれていたので大丈夫かな、と思っていました。
2005->2008へのコンバートに関係している可能性があるとのことなので、
2008の新規プロジェクトとして、ソースコードだけ放り込んでコンパイルしてみようと思います。
2008のPCは会社なので、明日試してみます。
この頃触り始めたような者なので簡単な練習用の.cpp打ったんですけど、 //hello.cpp #include <iostream> using namespace std; int main() { cout << "hello" << endl; } これで何故かビルドエラーが出ます。何が悪いんでしょうか?↑は間違ってないから、設定だと思うんですが… ちなみにMicrosoft Visual C++ 2010 Expressです。 設定は初期状態で、最初はできていました。(ソースファイル内のプロジェクトが1つの時) しかし、ソースファイル内に2つ目のプロジェクトを作るとビルドエラーがでて、 何回やっても同じなので、インストールし直したら、今度はプロジェクトが1つの時でもビルドエラーばかり出るようになりました。 どうすればいいんでしょうか?
エラーメッセージも書かずに質問とな?
667 :
665 :2011/08/10(水) 01:48:51.09
>>666 さん、すみません。
エラー1 error LNK2005: _main は既に hello.obj で定義されています。
エラー2 error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
エラー見る限り、僕の打ち方がまずかったみたいですね。
ソースファイルの中に同じ定義を入れてはいけない、という事ですか?
//hello3.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name; //名前(文字列)の「いれもの」
int tosi; //年齢(整数)の「いれもの」
cout << "こんにちは。私はコンピュータです。" << endl;
cout << "あなたの名前を入力してください。" << endl;
cin >> name; //名前(文字列)の入力
cout << name << "さん。よろしく。" << endl;
}
これが2つ目のプロジェクトです。どこを直せば干渉せずに実行できるのでしょうか?
>>667 同じプロジェクトにmain関数が2つ以上あるからじゃね?
hello.cppとかいうのもいっしょに入ってるからダメって感じ
>>665 int返すって指定してるならreturn 0書かんとエラーになるぞい
>>669 C++はmainでreturnを書かなかったら勝手にreturn 0;したことになるよ
671 :
665 :2011/08/10(水) 08:23:06.31
つまり、main関数を同じプロジェクト内に2つ以上作ると、 「どっちを実行すればいいか、分からない」という事になるんですね。 今は練習で打ってるので、一つのcppファイルだけを実行とか そんな機能は無いんでしょうか?
cppファイルを右クリック プロパティで コンパイルから除外的なオプションがあったはず
673 :
665 :2011/08/10(水) 09:27:07.00
>>670 書き忘れたこと無かったから知らんかった。。。
コード読む側からすればややこしそうな挙動やね
mainだけの特例がコードレビューに影響有るか?
676 :
660 :2011/08/10(水) 18:42:48.66
>>663 本日、VC++2008で新規プロジェクトを作成し、
ソースコード(と一部ライブラリ)をVC++2005環境から持ってきてコンパイルした結果、
ちゃんと以前と同様の最適化された速度で動きました。
ご推測の通り、2005->2008へのプロジェクトコンバートが原因だったようです。
良い経験になりました。
ありがとうございました。
基底クラスと派生クラス同士のデフォルトコピーコンストラクタを使ってメンバ変数を代入したいのですが これって可能ですか?
日本語でおkな文になってるぞ
継承してもデフォルトコピーコンストラクタの互換性は保てますか?
C++スレじゃなくて、わざわざここで質問してるのは 何かVC特有の問題でもあるんだろうか?
VC++拡張の明示的オーバーライドなんだけど、VC2005だと 下みたいなインライン形式だとコンパイルできるけど、 メンバー関数の外だし形式がコンパイルできん。 どのバージョンからだと確実にできる? struct Type:IFA,IFB { void IFA::Function(){} void IFB::Function(){} }
あるBluetoohsレシーバ(デバイス)に、 マウスなど何かの機器が接続(通信がコネクト状態)されているかどうかって、 c++で判断することできますか? win7で動けば良いと考えています。 VS2010を使用しています。
684 :
683 :2011/08/17(水) 15:27:17.65
すみません。 Win32APIスレがあることに気がつきませんでした。 そちらで再質問いたしますので、 上の質問は撤回いたします。
vs2010にて、ソースコード自身のエンコードを、 まとめてUnicodeにしたいのですが、一つ一つ変換していくしかないでしょうか?
C++の標準例外は、文字列を取得するメンバー関数ありますか。 .Net Frame work は確かSystem::Exceptionクラスやその派生クラス はToString()のメンバー関数で文字列を取れたけど、std::bad_alloc とか、std::out_of_rangeとかの標準例外クラスのメンバー関数は ありますか。
外部依存関係とはいったいなんですか
フォームアプリケーションでフォームを呼び出した際に テキストエリアにイベントターゲット(?)をされるようにするにはどうすればいいのでしょうか? 今は呼び出したらボタンに最初に位置しているのですが…。
C++でフォームはやめとけ、、、って話はおいといて フォーカスを別のとこにしたいってこと? タブオーダーで順番替えるか、そのコントロールのFocus()を呼ぶ
あとフォームのActiveControlプロパティにそのコントロール 入れてやる手もあるか?
プログラムと言うか?プログラムのコンパイルの仕方を教えて下さい。
以下のサイトのプログラムをコンパイルしたいです。
http://oasis.halfmoon.jp/other/pic-ic/675-temp-sensor.html プログラム (Windows側) PIC_Meter.exe です
「アプリケーション PIC_Meter.h
PIC_Meter.cpp
メイン・ダイアログ PIC_MeterDlg.h
PIC_MeterDlg.cpp
シリアル受信スレッド rs232c_func.h
rs232c_func.cpp
その他 DlgSetup.h
DlgSetup.cpp
PIC_Meter.rc
PIC_Meter.rc2
Resource.h
PIC_Meter.ico
StdAfx.h
StdAfx.cpp
著作権表示、再配布条件 ReadMe.txt
コンパイル結果 (実行ファイル) PIC_Meter.exe 」
のプログラムをコンパイルしたいのですがエラーが出ます。
どうしたら良いでしょう?
環境 VC2005 で win32 空のプロジェクトを指定 でファイルを追加しました。
コンパイルすると以下のエラーが出ます。
http://feb.2chan.net/img/9/src/1313667352004.jpg 対処方法を教えて下さい。(スレチなら誘導お願いします)
プロジェクトの設定で共有DLLでMFCを使うみたいな項目なかったか?
そっちじゃなくてプロジェクトのプロパティ 全般の「MFCの使用」を「共有DLLでMFCを使う」、文字セットを「マルチバイト〜」 *.icoと*.rc2をresフォルダに置けばそれっぽいバイナリができあがる
>>695 有り難う御座います。ww
無事コンパイル出来ました。感謝です
俺から見たら何故?そんな事が分かるの?
と言う位です。有り難う御座います。
横からだけど、そう言うのは理解しておこうよ。
言うほど簡単じゃないと思うぞ
何回もひっかかって「あー、たしかデジャビュー・・・」系だろ?これ たかが、「ない」だけなのにやたらとエラーメッセージが難解なところとか早くくたばれって感じがする
エラーメッセージも読めないアホ
DataGridViewのヘッダーの境界線の色を変えるにはどうしたらいいでしょうか?
VBで作ったDLLをC++で使いたいのですが可能でしょうか? 環境はVisualStdio2005です。 現状は、GetProcAddressの関数指定で関数がみつからないというエラーが出ています。 DLL側での関数宣言がクラスの下でしかできず、階層が出来ているのが原因だと思って いるのですが、解決策が見つからずに困っています。
DLLを作るときはDependency Walkerを手元においておけ
704 :
702 :2011/08/21(日) 20:49:25.72
>>703 レスありがとうございます。
Dependency Walkerを探してダウンロードし、作ったDLLを読み込みましたが関数が表示されません。
この場合、DLLの作成に失敗しているということでしょうか?
(ちなみに、VBからは参照設定して関数を使うことができました。)
>>702 VBってVB6?
だったらActiveX DLLだから
全然別ものだぞ
706 :
702 :2011/08/22(月) 13:06:45.19
>>705 VBもC++もVisualStdio2005です。
VBが6.0とそれより後で別物っていうのは調べてわかったのですが、
DLLを作るときにどう違うのかまでは理解できませんでした。
差し支えなければ説明をいただけないでしょうか。
>>705 VS2005っていってるんだから.Netの奴だろ
本人が来てたか
>>706 ネイティブからマネージドDLLの呼び方を調べてみれ
SendMessage( SystemTimer.SerchedHWND[_Num], WM_MBUTTONDOWN, MK_LBUTTON, NULL ); SendMessage( SystemTimer.SerchedHWND[_Num], WM_MBUTTONUP, MK_LBUTTON, NULL ); INPUT _input[2] = { { INPUT_MOUSE, 0, 0, 0, MOUSEEVENTF_LEFTDOWN, 0, 0, }, { INPUT_MOUSE, 0, 0, 0, MOUSEEVENTF_LEFTUP, 0, 0, }, }; if( SendInput(2, input, sizeof(INPUT)) == 0 ) mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL);
途中投稿すまん。 指定したアクティブなウィンドウをクリックさせたいのだけれど 以下の方法を試しても反応しないのだけれどなにか問題アルのでしょうか? ウィンドウはいくつかのウィンドウをつかったりしているのでウィンドウ側の問題ではないとおもいます。 (座標はあらかじめSetMousePosで移動しておきます。) 直接メッセージを送る方法 SendMessage( HWND, WM_MBUTTONDOWN, MK_LBUTTON, NULL ); SendMessage( HWND, WM_MBUTTONUP, MK_LBUTTON, NULL ); SendInputを使った方法 INPUT _input[2] = { { INPUT_MOUSE, 0, 0, 0, MOUSEEVENTF_LEFTDOWN, 0, 0, }, { INPUT_MOUSE, 0, 0, 0, MOUSEEVENTF_LEFTUP, 0, 0, }, }; SendInput(2, input, sizeof(INPUT); マウスイベントでの方法 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ウィンドウメッセージで動かないのはわかるのですが、SendInputで動かない理由が分からず相談させていただきました。 よろしければ教えていただけないでしょうか?
SendInputを試してみた。 動いた。 終わり。 (コンパイルできないコードを貼るな)
これはとっても初心者なスレですね
復帰
初々しくて涙が出た
エクスプローラー消しちまったのか
ああ、ソースコードを見たいってこと? なら。 1. ソリューションエクスプローラを表示する -> メニューの 表示 - ソリューションエクスプローラ を選択する 2. 適当なプロジェクトを開く -> その画面の左上の「最近使ったプロジェクト」から選ぶか、メニューのファイルから新しいのを作る 3. 「ソリューションエクスプローラ」で適当なファイルを選択する で、いいんじゃね。
適当にドラッグすりゃ引っ付くだろ
>>720 それがなかなかひっつかないんですねこれが
タイトルバーを右クリックしてフローティングなんちゃらのチェックを外す
1. まず
>>722 を確認する
2. 画面上の特定位置に置きたいウィンドウ(この場合ソリューションエクスプローラ)をドラッグする
3. 画面の中央と四辺の中央に半透明のアイコンのようなものが表示される
4. 1 のウィンドウを置きたい位置の 2 のアイコンにドロップする
DLL(MFC拡張DLLです) について教えてください クラス全体を__declspec(dllexport) で修飾する方法と個別に関数を修飾する方法がありますが、 違いがよくわかりません、解説おねがいできませんか。 // クラスに対して__declspec(dllexport) する場合 class __declspec(dllexport) CHoge { public: CHoge(); virtual ~CHoge(); }; // 関数に対して__declspec(dllexport) する場合 class CHoge { public: __declspec(dllexport) CHoge(); __declspec(dllexport) virtual ~CHoge(); };
>>724 ですが
教えてもらえませんでしょうか?
それからDLLの種類ですが、 MFC regular Dll の間違いでした。
質問の趣旨がわからん。
>>726 >>724 です
C++でDLLを作成するときに
クラスをエキスポートするのか、関数をエキスポートするのかが知りたいのですが
だからそれでなにをしたいの? どっちも出来るなら好きな方を選べばいいじゃん。
相も変わらず初心者に優しい板だな 解らないなら黙ってろよ
730 :
デフォルトの名無しさん :2011/08/31(水) 01:07:13.78
VC++ 2005 EEです。 windowフォームアプリケーションを作成しています。 ComboBoxで表示されている値を取得して それを整数に変換したいのですがうまくいきません。 どうすれば可能でしょうか?
>>730 SelectedIndexプロパティということかな?
一応確認しておくが、
その処理は本当にC#やVBではなくC++/CLIでやらなければならない?
初心者がC++/CLIの門を敲いてしまう MSのやり方失敗じゃね? ATLも付けないならEEはVC++なくていいんじゃね?
>>732 自分もマジでそう思う
VCEEだけは、プログラマ育てるどころか、諦めさせる為に在るとしか思えん
C++/CLIはどうも好かん
735 :
730 :2011/08/31(水) 22:49:55.11
>>731 コンボボックスのリストが
100
200
300
という内容で200が選択されていた場合、
200という値を整数型として利用したいということです。
SelectedItemがそれに近い機能を持っているようですが、
うまく整数に変換する方法がわかりません。
C#やVBについては使ったことがないので、よく分からないです。
そんなのも自分で解決できないならC#やったほうがいいよ。 C#なら初心者にも優しいし
Visual studio 2005でコンパイルしています。 2008のプログラムをコンパイルしたいのですが、どうしたら良いのでしょう? 変換が出来ません。
新しいプロジェクト作ってファイル移せばいいよ
>>738 有り難う御座います。今プログラム作れるPCの前にいないので
先ずお礼を言います。
試してみて出来なかった場合、後程方法等を教えて下さい。
740 :
デフォルトの名無しさん :2011/09/01(木) 13:48:19.85
VC6からだったら、とりあえずプロジェクトを開いてみたら 自動的に変換された
>>739 エディタで.slnと.vcprojを直せばいけるかも
これで駄目なら738
変更前
.sln
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
.vcproj
Version="9.00"
変更後
.sln
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
.vcproj
Version="8.00"
その程度で対処できるなら自動変換に失敗するわけがない
>>742 その程度って…
基本的に新しいバージョンのプロジェクトファイルは変換してくれないんだが…
2008で2005のプロジェクトは変換出来るが
2005で2008のプロジェクトは変換出来ない。(してくれない)
分かった?
744 :
デフォルトの名無しさん :2011/09/01(木) 20:04:31.76
質問なのですが… 一つのソリューションにプロジェクトが二つ以上ある状態でソースをデバックすると、 はじめに作成した方のプロジェクトのソースがデバックされてしまい 新しく作成したプロジェクトの方のデバックができません。 例えて言えば、AをデバックしたいからAを表示、開いてデバックをする→ しかしデバックされるのはBである といった状態です vsの無料版使用しております。 分かりずらいと主いますがよかったら教えて頂けませんか;;
プロジェクトを右クリックしてスタートアッププロジェクトに設定
746 :
デフォルトの名無しさん :2011/09/01(木) 20:10:20.25
VC++ 2008 Express で Windowフォームアプリケーションです。 Form が作られるときに設定の読み込みをさせる動作をしたいのですが フォームフリエイトの動作はロードの private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { } の中に書くのでいいの?
>>749 それでいいかどうか実行してみれば1発
一応確認しておくが、
その処理は本当にC#やVBではなくC++/CLIでやらなければならない?
751 :
749 :2011/09/04(日) 21:10:42.57
>>750 文字を変えるので試してみます。
....が、ぶっちゃけ まだ手を付け始めたところで書式がわからない。
適当にググって文字表示させてみますが、
Form Create が VC++ では何にあたるのかがさっぱり?
VC++ にするのは、他のツール作者さんがVC++ 2008使い(そっちも初心者なので判らない)で合わす為です。
書こうとしているのは、他言語で作った自作ツールを VC++ から繋げる参照用基本部分を作る。
受け取り部分:SetWindowLongPtr()
http://msdn.microsoft.com/ja-jp/library/cc411203.aspx テキスト受け取りエディタ欄 VC++ は listBox1 ? や button1 に固定ID番号振る。
送り部分は:SendMessage()
ちなみにこのスレに書くのは 749 が初めてです。
やっぱりWindowsフォームアプリケーション作るんだったらC++/CLIよりもC#使ったほうがためになると思うんだ。 MFCとかWin32APIを叩いてウィンドウ作るなら良いけど。
C++/CLIを使う奴は頭が固いよな。 適材適所で言語を切り替えられるやわらかい頭にならないと。
SetWindowLongPtr(),SendMessage()を呼び出したいなら Windows フォーム アプリケーション(CLR)じゃなくて、 MFC アプリケーションか、Win32 プロジェクトで始めのプロジェクト作らないと。 VC++って言ってるのが何のプロジェクトを指しているのか、もう一度まわりに聞いたほうがいいんじゃない?
>>753 やわらかすぎるプロジェクトにあたった
mfcも.netもc#もc++も全部使ってある
dll呼び出しまくりんぐ
過去の資産の変更に怯える毎日
現在C++でメダルゲームを作成しています。 ゲーム内のデータ(メダル獲得枚数やメダルの増減、個人個人のIDやPW)をPHPを使って データベース内にデータを保存したいと思っています。 そこで問題になったのが、ゲームからデータベースへのデータの受け渡しと データベースからゲームのデータ受け取りかたがわかりません。 検索しましたがいまいちぱっとする検索結果もなく・・・ どなたかご教授ください。
VC2010Express です std::copy() 使ったら xutility(2227): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe とか言われたけど何なの
再現する簡単なコードです #include <iostream> #include <cstring> #include <string> #include <algorithm> void Insert(char *dest, const char *ins) { size_t pos = 4, destlen = strlen(dest), srclen = strlen(ins); if(pos > destlen) { pos = destlen; } else { std::copy_backward(&dest[pos], &dest[destlen], &dest[destlen + srclen]); } std::copy(ins, ins + srclen, &dest[pos]); } int main(void) { char buf[256] = "1234567"; char *key = "ABC"; Insert(buf, key); std::cout << buf << std::endl; std::cin.get(); return 0; } char 配列に文字列を挿入するコードですが、実行結果は問題ありません 気づいたけど std::copy_backward() も同じ警告出る・・・
Debug モードでのみ出る警告です Release モードではスルーされます
>>758 その警告は続けて
this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
って出てないか?
ちゃんと読めば対処方法は分かるはず
>>761 すまん出てた
あんまり長い警告だからよく読んでなかった
普段 VC6 使ってて VC2010 は最近試し始めたばかりだから、Safe Libraries とかよくわかってなかった
gcc や VC6 にソース流用したいから stdext とか checked_array_iterator とか使いたくないんだけど
/D_SCL_SECURE_NO_WARNINGS オプションで警告握りつぶす以外にやり方無いかなあ
使わない方向で
boostの何かの機能を使っててその警告が出たのを思い出した
キーボードのFキーを10回Jキーを15回という操作を メモ帳に送るということをしたいのですがどの関数を 使えばいいのでしょうか?
sendInput
VisualC++でデバッグモードでビルドすると作ってるソフトが強制終了せず(普通に動く) リリースモードでビルドすると強制終了します。 リリースモードってデバッグの情報とかを入れずにビルドするらしいので どのコードの場所で強制終了したのか、調べられません。 こういう時のデバッグってどうすればいいですか?
リリース時でもデバッグ情報は作成できます MiniDumpWriteDumpでググレ
769 :
デフォルトの名無しさん :2011/09/19(月) 01:42:36.30
APIによるメモリリークって検出する方法ないかな? 例えば GetDC使う → ReleaseDCしない こういう事したら「メモリリークしてんぞコラ」って教えてくれるような機能
Cランタイムのメモリリークに限ればある _CrtSetDbgFlag とかで検索するとよい それ以上の機能(APIのリークなど)の場合、有償の製品ならある Bounds Checker とか フリーのものは知らない
>>767 リリースモードでもデバッグ情報は作成可能
VC++がインストールされてない Windows でリリースビルドのアプリがこけた場合でも、OSの機能でクラッシュダンプ(こけた時点のメモリイメージのダンプ)は採取可能
ビルド時のデバッグ情報とアプリがこけたときのクラッシュダンプと低レベルデバッガ(WinDbg)があれば
こけたときの状況を再現してデバッグすることができる
くわしくはググれ
>>769 Application Verifier
visualC++2008EEでOpenCV2.2ライブラリをコンパイルしようとしたら C:\Program Files\OpenCV2.2\modules\core\src\mathfuncs.cpp(875) : error C3861: '_mm_castsi128_ps': 識別子が見つかりませんでした といわれます。 #include <emmintrin.h> を追加してもその中に_mm_castsi128_psがないようで修正できません。 extern __m128 _mm_castpd_ps(__m128d); extern __m128i _mm_castpd_si128(__m128d); extern __m128d _mm_castps_pd(__m128); extern __m128i _mm_castps_si128(__m128); extern __m128 _mm_castsi128_ps(__m128i); extern __m128d _mm_castsi128_pd(__m128i); vc++2010EEのemmintrin.hから上の6行をemmintrin.hにコピペしたらいけました。もしかして俺削除してた?
普通にあるな。
SP無しの状態でも392行目に存在してるな
開発環境 VC++2008で作成されたプロジェクトをVC++2010でビルドしています Vista Win32アプリケーション このエラーは何を示していますか? よろしくお願いします エラー内容 error C2061: 構文エラー : 識別子 'Dialog' Dialog.h 部分ソース #ifndef __dialog_h__ #define __dialog_h__ #ifdef _WIN32 #include <windows.h> class Dialog //エラー行 { public: HWND hDialog; //ダイアログハンドルを格納 Dialog(); // hDialog = NULL ~Dialog(); // delete hDialog; HWND *getHandle(void); //別のライブラリ.libからハンドルを参照 return &hDialogするだけ }; //以下略 別のライブラリソースではDialog.hをインクルードしています
for( x = 0 ; x <= 8 ; x++ ){ printf("%d\n",rand()); } 上にかいたようなrand()関数を8回出力するものをVC++2008で ・デバッグ無しで開始 ・debugフォルダにあるexeファイル起動 両方を数回行ったのですが出力される数値が変わりません rand()関数は完全にランダムという訳では無いのですか?
778 :
777 :2011/09/23(金) 17:04:48.84
自己解決しましたすみません
ググってココに来た人が(´・ω・`)しないように オレがアンサー。 コンピュータで生成する乱数は、ランダムに見える 数列を順番に再生するようになっているだけ。 これを毎回違うパターンで再生したい場合には 時刻やプロセスIDなど、毎回違う数字をごにょごにょ して初期値を変えるようにする。
780 :
デフォルトの名無しさん :2011/09/26(月) 00:42:08.00
3つ教えてください。
--------- --------- --------- --------- --------- ---------
『Intellisense』について教えてください。
機能が効くときと効かないときとがあって、原因を探しています。
(教えてg○○で質問したのですが、解決できなかったので、現状マルチになります。)
Visual C++ 2010 Express
ツール>オプション>テキストエディター>C++>入力候補>自動メンバー表示
は、@・A共にONになっています。
@
VC起動>ファイル>新規作成>Win32>Win32コンソールアプリケーション>次へ>完了
(オプションの変更なし。プロジェクト名は適当。)
で、新しいプロジェクトを作り、ソースファイル>さっき入力したプロジェクト名.cpp
ここで、空白行に対して、『#include <』と入力すると、『Intellisense』の機能で、複数のヘッダのリストが表示されて選ぶことが出来ます。
A
http://www.winpcap.org/install/bin/WpdPack_4_1_2.zip で、WinPcapの『Download WinPcap 4.1.2 Developer's Pack』をDLして、
同じように、『include <』をしても、『Intelisense』の機能が働きません。
■質問
単刀直入に、「何が問題なのでしょうか?」
「『Intelisense』つかわなければいいじゃない?」と言われれば話はそれまでなのですが…。
プロジェクト>プロパティ
ツール>オプション
の内容を見ても何がなんだか…。
googleしてもよくわからず時間だけが過ぎていきます。
よろしくお願いします。
Ctrl+Space
782 :
780 :2011/09/26(月) 00:57:23.41
↑で、直リンク失礼しました。 ページへのリンクやttpとか書くべきなのですよね。忘れていました。 あと、age失礼しました。 sln(ソリューション)、 vcproj(プロジェクト)について教えてください。 --------- --------- --------- --------- --------- --------- またしても、『Download WinPcap 4.1.2 Developer's Pack』関連です。 slnの中に複数のプロジェクトがあります。 ここで、それぞれのプロジェクトは、動作として完全に独立しています。 一つの、プロジェクトだけ(例えば、pktdump_ex)をビルドできればいいのですが、 特定のプロジェクトのフォルダに移動して、vcprojからVCを起動すると、 複数(slnに含まれる全て)のプロジェクトが開かれます。 ■質問 単刀直入に、「どうしてなのでしょう?」 「そういうつくりなんだよ。」と言われれば話はそれまでなのですが。 例えば、ヘッダファイルなど共通のファイルを変更した際に影響がわかる (影響がわからずに、混乱することを防ぐ)ためなのでしょうか? 何をしたか憶えていないのですが、何かをしたら、ひとつのプロジェクト(pktdump_ex)だけ開かれました。 今までビルドできなかったものが、いつの間にか解決していました。 その際には、プロジェクト配下に、『外部依存関係』というフォルダ(?)があって、includeしているらしいヘッダが並んでいます。 そういえば、新規にプロジェクトを作った場合も同じです。
783 :
780 :2011/09/26(月) 01:15:49.21
--------- --------- --------- --------- --------- ---------
またしても、『Download WinPcap 4.1.2 Developer's Pack』関連です。
ビルドする際の
『fatal error C1083: include ファイルを開けません。'winsock2.h': No such file or directory』
がなくならず、ビルドできません。
『プロジェクト>プロパティ>構成プロパティ>C++>全般』には、デフォルトで、WinPcapのincludeフォルダが指定されています。
『プロジェクト>プロパティ>構成プロパティ>入力>』の追加の依存ファイルの依存ファイルには、wpcap.libを追加しました。他にwsock32.libが始めからありました。
と言うか、『
ttp://dog.tele.jp/winpcap/html/group__wpcapsamps.html 』に記載の内容は試したつもりです。
あと、どこかのサイトに書いていたので、『C:\Program Files\Microsoft SDKs\Windows\v7.0A\』に対して、Includeフォルダ、Libフォルダを丸ごとコピーしました。
一度ビルドが出来た際には、
ソリューション全体ではなく、
プロジェクトのpktdump_exだけが開かれていました。何故なのか全くわかりません。いつのまにかでした。
また、プロジェクト配下に、『外部依存関係』というフォルダ(?)がありました。
■質問
失礼な質問になるかも知れません。
単刀直入に、『Download WinPcap 4.1.2 Developer's Pack』のビルドに必要な手順を全て教えてください。
もう10時間くらい調べているのですが、力つきそうです。
(弱音吐いて申し訳ないです。)
--------- --------- --------- --------- --------- ---------
あと、プロジェクトを実行する際には、『pkt_dump_ex』が一番ラクです。
実行する際に、引数を設定する必要が無いからです。
インテリセンスさんとコンパイラさんは別の人だから 文法的に正しいとかコンパイル通るとかそういうのはインテリセンスさんにはどうでもいいこと インテリセンスさんに気に入られるようにガチガチのMS仕様でソースかかなきゃダメ
.ncbファイルを消してみる
ヘッダーファイルはフルパスでも書けるのよ〜 #include "C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\include\\iostream" 今これでコンパイルが通りましたよ〜
787 :
780 :2011/09/28(水) 00:55:32.00
レスどうもです。 >784 ソリューション内のプロジェクトを一つに変更(他削除)して、 プロジェクト内のソースを一つに変更しました。 ソースを簡単なものに変更しました。 ソースは以下のとおり。 ---------------------------------------------------------------------------------------------------- #include <stdio.h> int main() { printf("hello world"); } ---------------------------------------------------------------------------------------------------- このソースでも、『#include <』でインテリセンスさんが働いてくれませんでした。 プロジェクトのプロパティなどの設定がNGということでしょうか?
788 :
780 :2011/09/28(水) 00:55:45.12
因みに、リビルドで以下のエラーを吐いていました。 ---------------------------------------------------------------------------------------------------- 1>------ すべてのリビルド開始: プロジェクト: iflist, 構成: Debug Win32 ------ 1>プロジェクト 'iflist'、構成 'Debug|Win32' の中間出力ファイルを削除しています。 1>コンパイルしています... 1>iflist.c 1>マニフェストをリソースにコンパイルしています... 1>リンクしています... 1>LINK : fatal error LNK1104: ファイル 'ws2_32.lib' を開くことができません。 1>ビルドログは "file://C:\vc\WpdPack05\Examples-pcap\Debug\x86\BuildLog.htm" に保存されました。 1>iflist - エラー 1、警告 0 ========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ========== ---------------------------------------------------------------------------------------------------- リンクで失敗しているようなのですが、 そもそもリンクする必要が無いような気がするのです。 何がまずいのでしょうか? これが原因で、インテリセンスさんが働いてくれないということでしょうか? …、そもそも、stdio.hなどの標準何某へパスが設定されていない?
789 :
780 :2011/09/28(水) 01:01:35.31
>785 レスありがとです。 .ncb は、インテリセンスのデータベースファイルと、どこかの辞書に書いてありますね。 始めは無くて、ソリューションを開いたときに作成されているみたいです。 とりあえず、ソリューションを閉じて、削除してみたのですが、何も変わりませんでした。 泣きそう…。
790 :
780 :2011/09/28(水) 01:04:52.94
ところで、リビルド時に作成されるらしい、.idb ファイルが削除できない、などというエラーが出いています。 「iflist : error PRJ0008 : ファイル 'c:\vc\WpdPack06\Examples-pcap\Debug\x86\vc80.idb' を削除できませんでした。」 (こんなのがプロジェクト数分出る。) VCを終了して、削除しようとしても削除できません。 PCの再起動をすれば削除できます。 このエラーは何なのでしょうか? (因みに、ビルドに失敗したあとです。)
791 :
780 :2011/09/28(水) 01:23:09.80
>786 私向けのレスでしょうか? >今これでコンパイルが通りましたよ〜 !!!? コンパイルに必要なものって何だと思います? >#include "C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\include\\iostream" とりあえず、同じように、Visual Studio 2008 を入れてみます。9.0って2008ですよね。 (余っているHDDにOSごと入れ直すべきなのかな…。) (2005とか2010とかバージョンごとに違う挙動なのかな…。)
792 :
780 :2011/09/28(水) 03:15:15.41
…。 780です…。 本当にお騒がせしました。 スレ汚し失礼しました。 Vitual PC → WindowsXP → VC2008 をインストールしたところ、 何の設定もなく、普通にビルドできました。 あれー? こんなものなのですか? わけがわからない…。
VC++2010を使っています。 #include "---" に関しての質問があります。 ソースファイルを作る時に「新しい項目を追加」を選んだ場合,ソースファイルはプロジェクトのディレクトリに作られます(いじらなければ) このとき #include "sub..h" でインクルードできます 最近ソースファイルが増えてきたので直下に新しくフォルダを作りそこに移しました ところが #include "src\sub.h" だと読み込めず,パスを変えて #include "..\src\sub.h" とすれば動きました。 「..\」が必要ということは,Debugフォルダ内のexeファイル視点でファイルを探しているのだろうと思ったのですがinclude "sub.h"の説明ができません。 この""はどこを参照しているのでしょうか また,管理上楽にしたいので #include "src\sub.h" を可能にする方法があれば教えてください
早漏でした フォルダに移しても#include "sub.h" が通用するんですネ
つーか \\ じゃないとエスケープシーケンス扱いされるだろ 普通はパスの区切りは / を使うけど
>>793 sub.hをインクルードしているソースがsrcの中にあるのでは?
上の補足、**.c **.cpp の有るフォルダーがデフォのinclide だぜ。
Release のフォルダにsub.hぶっこんでね?
>>797 ,
>>798 で気づきました
冷静に考えたら簡単でした
includeするヘッダーへのパスは各.cppから見たパスなんですね。納得。
includeがVC++に依存していると思い込んでいて泥沼にはまっていました
801 :
デフォルトの名無しさん :2011/09/28(水) 23:30:03.99
次のWin8って、タッチパネル方式だそうだけど、 今までのVC関連の知識でプログラム作ることはできるのだろうか。 ちょっと心配ですね。
WinRTという新しいAPI群が追加される。C++から使えるCOMライブラリなのでそれを覚えればおけ
WindowsDeveloperPreviewの VC11のデフォルトコードが奇怪だったのは覚えてる。
64bit版ですが。 レジスタが強化されたのって記述あるんですが、 引数の数増やしてもスタックが積み上げられないので 高速だとかしかわからないですが。 作る際の注意点ってなんですか?
デバッガを使う時に気にすれば良い。 でもソースレベルでしかデバッグしないなら気にしなくて良い。
VS2010で ヘッダーファイルでクラスのメソッドの宣言を書いて void method(bool arg = false); void Class::method(bool arg) { ソースファイルで実装を書く時、楽に出来る方法はないでしょうか Ctrl + Spaceで補完しようとしたら、
途中で書いてしまいました、すみません 今まではヘッダーファイルからソースファイルへ宣言をコピペして、 デフォルト引数を消したりクラス名をつけていましたが、 原始的で効率が良くないので、自動的に打つ方法を探しています
MFCクラスウィザード
デフォルト引数設定できない・・・しかもすでにあるソースファイルじゃなくて違うところに ソースファイルが作られました。
プロトタイプ宣言書く必要のない言語やれば
全部ツールの仕様にまかせるのが楽だと思うけど、 何か気に入らない部分があって手で直すのが原始的で効率が良くない と思うなら自作のスクリプトかプログラムで自動化すればいいだけ
/D "_SECURE_SCL=0"
814 :
デフォルトの名無しさん :2011/10/01(土) 14:36:31.46
すれ違いかもしれませんが質問させてください。 ■質問 UI無し常駐アプリの動作が軽いものは、c++, C#(Form, WPF)の中でしたらどれでしょうか? 動作とは、起動時間は考えない、常駐した後の話です。 ■やりたいこと キーボードにテンキーが付いているのですが、 私はテンキーを使わないので ハードキーによるランチャーを作りたい。 常駐→キーロガー を考えました。 ■質問2 キーコードで判断しようとした場合、 テンキーでの数値入力なのか、 qwerty上部での数値入力か判定できませんでした。 方法はありますでしょうか? よろしくお願いします。
C++
>814 違うキーコードが割り当てられてるはずだけど もしかすると文字で判定してるんじゃないかな?
817 :
814 :2011/10/01(土) 18:50:27.75
>>815 ありがとうございます。
>>816 文字コードでなくキーコードですか。
今、出先ですので帰ったら調べてみます。
ありがとうございます。
スキャンコードじゃね
>>814 この間RawInputとグローバルキーボードフック使ってごちゃごちゃやったが、そんな感じで何とかなりそうだな
820 :
デフォルトの名無しさん :2011/10/02(日) 20:06:38.79
プログラム初心者です。 質問させてください。 VC++で複数のピクチャーコントロールに同じ描画をしたい場合、 for文と配列を使用して繰り返し処理を行うことにより、 デバイスコンテキストの取得から描画処理まで、 一度きりの記述で終わらせることは可能でしょうか?
可能です
>>820 です。
ありがとうございます。
すみませんが、追加質問させて頂いてよろしいでしょうか?
良く分からない点があります。
通常、デバイスコンテキストクラスのオブジェクトのポインタをpDC、
ピクチャーコントロールのメンバ変数をm_pictとするなら
CDC* pDC=m_pict.GetWindowDC();
という記述になるかと思われます。
ここにどのように配列を埋め込めば良いのか分からないのです。
pDC[10]、m_pict[10]のようにすれば良いのでしょうか?
よろしくお願いいたします。
質問よろしいでしょうか? x64のアプリケーションを開発しているのですが _WIN64が未定義のままになっていて少し困っております。 コンパイラのソリューションプラットフォームの設定はx64になっております。 これ以外にx64の環境にするのに必要なことはあるのでしょうか?
>>823 未定義なのをどうやって調べたんだ?
まさかIDEで表示が灰色になってるからとか言わないよな
あんなのあてにならんぞ
というより右クリックで定義先探してみたが無いっていわれた
ってごめんなさい 寝ぼけてたくさい 定義先ないの当たり前だよね #pragma message("メッセージ")ってやったらちゃんとコンパイルされていた
827 :
デフォルトの名無しさん :2011/10/03(月) 15:01:16.19
>>826 どうして「当たり前」なのか俺に教えてくれ
普通コンパイルオプションの/Dで与えるものでソースコード上にはないから
普通はx64コンパイラが強制的に定義するんだが・・・
VS2005のVC++で他人のプログラムをデバッグなしで実行したところ コンピュータにoctave.dllがみつかりません。 と、出ます octave自体はダウンロードしてあるのですが、VSに何か設定する必要があるのですか?
exeのあるフォルダかsystem32に入れろ
単にプログラムが実行できませんという話か VC全然関係ないだろ
はじめまして これからC++を学ぼうと思っている者です C++を学ぶ為に必要だということで、TD.exe(だったかな)というソフトをダウンロードしたのですが 使い方がよく分かりません 開くと右上にWAITという字が出たまま進みません Fileという項目をクリックしてみると応答なしと出ます 私が使っているPCはWin7で、確か32bitだったと思います となたか対処法を教えていただけませんか また、C++を学ぶ上でオススメの書籍やサイト等ありましたら教えていただきたいです 長々と失礼しました 回答お待ちしております
VC++ではTD.exeは使わないから、スレ違い。
学ばないといけないようではダメだ
>>834 スレ違いでしたか、申し訳ありません
よろしければ、TD.exeについて質問するならばどのスレが適当か教えて頂けませんか?
>>835 そうですか・・・
私は少し前に吉里吉里2というソフトを扱ったことがあるのですが、これはまたC++とは全く違うものなのでしょうか?
C++触るには10年くらい早いんじゃないか・・・
>>836 TD.exeは忘れて、CかC++から勉強しよう。
だいたい何処で聞いたんだそれ?
所で、TD.exeはどこから落としたんだ? 俺が違うのを連想した可能性もある。 落とした先出してくれ
>>838 もう一度C言語について調べなおしてみます
プログラマーになるには と検索して一覧に出たサイトを覗いてみたらTD.exeがオススメされていたので
ダウンロードしたのです
しかし皆様のレスからすると、このソフトは適当ではないようですね
C言語に、特にC++について学ぶために必要なソフトやアプリ、学ぶ上でオススメの書籍などありましたら
教えて頂けませんか?
もし、TD.exeが俺の連想したターボデバッガだったら。
古い情報だ。 いまだに、古いのはある。
Web見るときは、その情報の作成日を確認しろ、何処かにあるから。
何処にも作成日付がないページは忘れろ。
本屋に行って、立ち読みして良さそうな本が一番。
VC系がネットでは情報量は多い。
ああーーBC… BCはもう古い…
でも、未だに使ってる人はいるね、BCだと何処のスレだ?
ここか、スレできたのが6年前…、過疎ですね。
↓
http://hibari.2ch.net/test/read.cgi/tech/1155549904/l50 BCならこちらに書き込もう。><
>>842 ありがとうございます
是非参考にさせていただきます
スレ違いだというのにご丁寧にどうもありがとうございました
Visual Studio 2010をダウンロードしろ
>>843 ありがとうございます
今後、ページを見るときは作成日を確認してからにします
確かに古い情報を頭に入れても意味がありませんよね
教本は、近いうちに書店で探してみます
そうですか、このソフトは古いのですね
スレを覗いてみましたが、質問があったとしても回答を貰うのは難しそうですね
ご丁寧にありがとうございました
>>845 ありがとうございます
Visual Studio 2010で検索してみたところ、
Microsoft Visual Basic 2010 Expressが初心者に最適だと書いてありましたので、インストールしました
べ、べ、ベーシックかよ><、超お勧めしない。が、好きにしていい。
>>848 オススメできないのですか
好きにしていいとのことですが、勧めるならどれなのでしょう?
C++やるんじゃなかったのかよ? なんでもいいならC#のほうがいいぞ
Microsoft Visual C# か Microsoft Visual C++ がいいと思うが、比較的、簡単なのはC# C++はネット情報が多い、が難しい。 ベーシックは止めた方がいい。
>>850 >>851 ありがとうございます
私はC++を学びたいので、Microsoft Visual C++ をインストールしてみます
ご丁寧にありがとうございました
foo::bar はnamespaceだけど foo:bar なんて文法ないですよね こんな名前の関数や変数作っても問題ない?
>>853 とりあえず作ってみてからコンパイルしてみればおk
855 :
デフォルトの名無しさん :2011/10/06(木) 22:55:01.14
>>855 フォームにテキストボックスを貼り付けて、プロパティーの
稲妻のアイコンをクリックして、KeyDown をダブルクリックして
ソースを保存した後、保存前のソースとの違いを見比べてみて
857 :
855 :2011/10/07(金) 00:25:44.04
855です。
856さんご回答ありがとうございます。
質問の説明が悪かったです。
実現したい動作はDataGridViewに配置したComboBox(手動入力可能)を編集中
にEnterキーを押下したときのイベントを取得することです。
方法としてはDataGridViewのEditingControlShowingイベント関数内で
DataGridViewComboBoxEditingControlのPreviewKeyDownイベントに
PreviewKeyDownEventHandlerを使用して登録します。
「
http://dobon.net/vb/dotnet/datagridview/textboxevent.html 」のコードを
参考にしてVBで検証したところ実現が可能でしたが、
VC++ではDataGridViewComboBoxEditingControlのPreviewKeyDownイベントの登録
がうまくいきません。
>>855 private: System::Void dataGridView1_EditingControlShowing(System::Object^ sender, System::Windows::Forms::DataGridViewEditingControlShowingEventArgs^ e) {
if ( e->Control == dataGridView1->EditingControl )
{
DataGridView^ dgv = safe_cast<DataGridView^>(sender);
DataGridViewTextBoxEditingControl ^tb = safe_cast<DataGridViewTextBoxEditingControl^>(e->Control);
tb->KeyPress -= gcnew KeyPressEventHandler(this,&test::Form1::dataGridViewTextBox_KeyPress);
if ( dgv->CurrentCell->OwningColumn->Name == "Column1" )
{
tb->KeyPress += gcnew KeyPressEventHandler(this, &test::Form1::dataGridViewTextBox_KeyPress);
}
}
}
private: void dataGridViewTextBox_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
{
if ( e->KeyChar < '0' || e->KeyChar > '9' )
{
e->Handled = true;
}
}
859 :
デフォルトの名無しさん :2011/10/09(日) 13:51:09.59
お知恵をお貸しください。 <やりたいこと> ・UIなしの常駐プログラムでキーボードのロギングをする。 <環境> ・VC++2010 <できたこと> ・テスト用としてWin32アプリとしてプロジェクトを作り、 Windowにフォーカスが当たっているときのキーボードロギングはできました。 <方法> iwindow procesudre の中で、wParamの値と 仮想キーコード(VK_SPACEなど)と比較する。 <わからないこと> UIなしで行う場合、上記にてWindowにフォーカスが当たっていない場合にも キーロギングできる必要がありますが、方法が分かりません。 <調べたこと> GetAsyncKeyState(vkValue) 関数とか調べましたが、 仮想キーコードとの比較ができるだけでしたので、 Windowにフォーカスが必要でした。 宜しくお願いします。
ぐぐればわかるだろそんなこと
イマイチ使ったこと無いが SetWindowsHookEx あたり?
キーログ等は不正アプリになりやすいので、こんな所で情報出すなよ。
publicメンバ変数mをもつ基底クラスSと、 Sを継承したクラスAがあるとします。 S*型の要素をもつ配列をつくって、その要素cに対して c->mを行うと基底クラスSのmが呼ばれますが、 別途にメンバ関数を追加せずにc->mで派生クラスのmを呼ぶ方法は ないのでしょうか?
派生クラスのmっていうのはどこで宣言されるの?
>> 864 Sを継承しているので派生クラスAもmをもっているという意味ですが、 なんか情報が足りなかったですか??? クラスSでmが0に初期化されているとして、 A a1() ; A a2() ; a1.m = 1 a2.m = 2 S* array[ 2 ] ; array[ 0 ] = &a1 ; array[ 1 ] = &a2 ; ここで、例えば array[ 0 ]->m を行った時のことを意味しました。
>>865 普通に派生のmにアクセスしてると思うが何が問題なんだ?
基底クラスのポインタにアップキャスト?しているので ->mで呼ばれるmは基底のmになってしまいます。
m が S と A の両方で宣言されてて A のメンバにアクセスしたいってことなら dynamic_cast<A*>(array[0])->m; でいいと思うよ
>>868 ありがとうございます!
S* array[ N ] にSを継承したクラスA,B,…が混在する場合は
どうなるのでしょうか?
>>869 ポインタでのdynamic_castはキャストに失敗すると0を返す
それで判断するのが1つの方法
ただダウンキャストを多用しなければならない状況は、
設計がおかしい場合が多い
>>870 なるほど、確かにダウンキャストは予期せぬバグの
もとになると書籍に書いてありました。
結局、863については、
a1.m = 1 と同時に a1.S::m = 1 と書くようにすれば
とりあえず上手くいきました。
S* になった時点でAやBの内容は見えないと認識するべき Sの仮想関数を使うか、いちいちdynamic_cast等で型をチェックしてキャストするほかない
VC6 です。 テキストをソートするプログラムを書こうと思い、 for(int i = 0; i < 200000; ++i) fprintf(oFP, "%d%d%d\n", rand(), rand(), rand()); で生成した、乱数が 200000 行並んだテキストファイルを作りました。 このファイルをメインプログラムで丸ごと読み込み、改行を '\0' に換え て、各行頭へのポインタの配列を作りました。 このポインタの配列を並べ替えようとしたのですが、std::sort() では問 題なく処理されるのに、そこを std::stable_sort() に変えるとクラッシュす るようになります。 再現するのは Release モードでコンパイルした時のみで、Debug モード ではクラッシュせずにソートできます。 なお、VC2008 で試してみると、Debug / Release モードとも異常ありま せん。 std::stable_sort() に渡す配列の範囲が間違っていない事、第 3 引数に 指定した比較関数が悪さをしていない事は何度も確認しました (現に、 まったく同じ引数の std::sort() は動作しています)。 これは VC6 のバグなのでしょうか。 そうなのであれば VC2008 でプログラムを作っていこうと思うのですが、 自分のバグなのか VC6 のバグなのかはっきりしないと不安です。
バグかどうかは知らないけど、そもそもstable_sort使う必要があるの? >丸ごと読み込み、改行を '\0' に換えて、各行頭へのポインタの配列を作りました。 連続領域(vectorとか)に丸ごと読み込んでから各行へのポインタの配列を作ったなら ば、ポインタ値の比較だけでソート前の前後関係が分かるでしょ。
VC6 SP4で試してみたがReleaseビルドでもクラッシュしなかった
877 :
855 :2011/10/10(月) 15:35:29.76
858さん。サンプルコードのご提供ありがとうございました。
よろしくお願いします。 開発環境 VC++2010 やりたいこと ペイントアプリ 現状 描画した線が、次の線を描画すると消えてしまう。 private: System::Void pictureBox1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { Bitmap^ bmpPicBox = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height); pictureBox1->Image = bmpPicBox; Graphics^ g = Graphics::FromImage(pictureBox1->Image); Xpos = e->X; Ypos = e->Y; g->DrawLine(Pens::Black,X0,Y0,Xpos,Ypos); X0 = Xpos; Y0 = Ypos; } ビットマップに描画すればいいらしいということは分かったのですが、 具体的にどうすればいいのかわかりません。 よろしくお願いします。
[スタート]->[全てのプログラム]->[アクセサリ]->[ペイント] でいけるんじゃね
そりゃ、マウスイベントが発生するたびに描画先(Bitmap)を作ってりゃ、 最後に作ったビットマップに描いた線以外は消えるだろうよ。 gcnew Bitmap() を別の場所、たとえばコンストラクタとかに移動してみ。
ということが分からないってのが凄いな。 プログラムどうこうの問題ではない気がする。
いや、最初はそんなもんだよ。 コピペで書いてるうちは、この場合で言う bmpPicBox が描画情報を保管する実体であるってわからんだろうし。
883 :
873 :2011/10/11(火) 02:35:34.47
いろいろソートに関係ない部分をいじっていたらクラッシュしなくなりました。
でも std::stable_sort() ではなく
>>874 の方向でプログラム作る事にしました。
みなさん済みません、お騒がせしました。
884 :
878 :2011/10/11(火) 08:59:45.85
アドバイスありがとうございます。 早速試してみます。
VC++でマイドキュメントに保存していたプロジェクトとCドライブ直下に移動させたところfopenの書込みモードによるファイル生成がされなくなったのですが原因わかりますでしょうか?
意味がよくわからんが、、、OSは? ルートとかProgram Filesに書き込み権限無いんじゃ?
単に、パス名間違えてるだけとちゃうんか?
888 :
デフォルトの名無しさん :2011/10/12(水) 18:55:09.19
VC++.net初心者です。 .NET FrameWorkが出力するメッセージ(Exceptionクラスのエラーメッセージやファイルダイアログの"開く"ボタン等) を日本語ではなく英語に表示させたいです。 下記のコードを検証したのですが、どうしてもファイルダイアログのボタン等が日本語で 表示されます。 System::Threading::Thread::CurrentThread->CurrentCulture = System::Globalization::CultureInfo::CreateSpecificCulture(L"en-US"); System::Threading::Thread::CurrentThread->CurrentUICulture = System::Threading::Thread::CurrentThread->CurrentCulture; .NET FrameWorkが出力するメッセージを英文にするにはどうすれば良いでしょうか。
Windows XP、Visual Studio 2008 です。
エクスプローラのコンテキストメニュー型のシェルエクステンション DLL
を書いたのですが、DLL から表示するウィンドウやメッセージボックス
のコントロールが XP のビジュアルスタイル (Luna) が適用されず、クラ
シックスタイルで表示されます。
XP ビジュアルスタイルを適用する方法、問題になる点などわかりますで
しょうか。
http://www.koutou-software.co.jp/junk/apply-winxp-visualstyle.html このページによると、\WINDOWS\WinSxS\ 配下の comctl32.dll がロード
されていないといけないようですが、当方の環境では
C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll
C:\WINDOWS\system32\comctl32.dll
の順番でロードされているみたいです。
DLL から呼び出した
wchar_t buf[MAX_NTPATH] = L"(default)";
GetModuleFileNameW(GetModuleHandleW(L"comctl32.dll"), buf, sizeof(buf) / sizeof(wchar_t));
MessageBoxW(NULL, buf, L"Test", MB_OK | MB_ICONINFORMATION);
このコードの結果は "C:\WINDOWS\system32\comctl32.dll" です。
ちなみに、この MessageBoxW() の窓もクラシックスタイルで表示されます。
マニフェストファイルを書いて、DLL と同じフォルダにおいてみたり DLL の
リソースに埋め込んだりいろいろ試してみましたが効果ありません。
なお、Windows 7 ではクラシックスタイルではなく Aero スタイルで表示され
ます。
よろしくお願いします。
>>889 #define ISOLATION_AWARE_ENABLED 1
1は要らないかも知れない。
>>890 情報助かりました、うまくいきました。
その #define を windows.h のインクルード手前で定義したら、XP ビジュアル
スタイルが適用されるようになりました。
Visual Studio 2008 では 「1」 は必要みたいで、無いと winnt.h あたりでコン
パイルエラーになります。
ISOLATION_AWARE_ENABLED でググってみましたが、この情報少ないで
すね。
シェルエクステンションでばかりググってたから全然見つからなかった・・・。
ありがとうございました。
VC++2008 Expressでwindowsフォームアプリを作っています。 フォーム内の画面遷移をPanelを使って作っていて、 遷移自体はHideメソッドやShowメソッドを使っています。 デザイン画面を使うと勝手にパネル間に親子関係ができてしまい(勝手にAddされる)、困っています。 何か良い解決手段は無いでしょうか、それとも作り方が間違っているのでしょうか。 どなたか助言をお願いします。
解決策は3つ有る 1.デザイン画面を使わない 2.デザイン画面の制約内でしか設計しない。(デザイン画面の仕様にしたがう) 3.デザイン画面でデザインした後書き換える。 好きなのにしろ。
/ヽ /ヽ ':' ゙''" `':, / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ;ミ. ・ω・ ;, < ぬるぽ ξっ ,つ \_______ `:; ;,;' モコッ `( /'"`∪
ありがとうございます。 3番の方法でなんとかできそうです。
Λ_Λ \\ ( ・∀・) | | がっ! と ) | | Y /ノ 人 / ) < >_Λ∩ _/し' //. V`Д´)/ (_フ彡 /
こちらは、あくまで言語としてのVC++に対する質問しかできないでしょうか。 WMIのAPIの使い方はこちらではだめですか?
898 :
デフォルトの名無しさん :2011/10/20(木) 17:16:27.00
>>897 質問ならageといたほうがいいのでは?
まあ的確な答えを素早く返すようなひとが見てる可能性が 高いところに質問投げたほうがいいだろうね。 ここが一番そう思えるのならここでもいいんじゃない?
ここは初心者スレだよ
基礎ができてない初心者に教えられる内容は限られる
うん
いやここ初心者相手にどや顔するスレだろ そんなやつしかいないだろここ
>>904 以前俺はここで助けてもらったが、
どや顔されようが何だろうが、どうでもいい
感謝してる
>>904 俺もこのスレに育ててもらった
だからできるかぎり還元したい
見慣れないものが有ります これって何ですか? Application::Run(gcnew Form1());
C++/CLI
>>907 >>908 の言うとおり、C++/CLIでフォーム作ってるアプリケーションクラスに渡してる所
簡単に言えば、.netのGUIにおけるエントリポイント
またはdelphiの名残り
910 :
デフォルトの名無しさん :2011/10/27(木) 20:48:59.44
小学校5年には早すぎますか?
小5でCか
>>910 算数をしっかりやってたほうが後で伸びると思う
>>910 その年にして中卒程度の数学や英語や完璧ってんなら出来るかも
914 :
デフォルトの名無しさん :2011/10/27(木) 22:41:31.02
ファイル>新規作成>プロジェクト>Win32コンソールアプリケーション>プロジェクト名HelloWorld >OK>OK>HelloWorld.cppに以下のコードかく int _tmain(int argc, _TCHAR* argv[]) { printf("hello world"); return 0; } >プロジェクト右クリ>デバッグ>何も表示されない hello world表示したいんだけどどうしたらいいの?
916 :
914 :2011/10/27(木) 22:47:00.37
system("PAUSE");いれたらできた
インラインアセンブラのmov al,byte ptr[eax+2]てとこでアクセス違反がでるんだけど原因がわからん。 内容はデバッガ検知。 int i; __asm { mov i, 0 mov eax,fs:[30] mov al,byte ptr[eax+2] cmp al,0 je notdetect mov i, 1 notdetect: }
>>917 eaxの内容がおかしいんだろう。
mov eax,fs:[30]が、なにやってるのか、わからん。
eaxおかしくなってた dクス
921 :
917 :2011/10/29(土) 20:58:28.91
mov eax,fs:[0x18] mov eax,[eax+0x30] cmp al,byte ptr[eax+0x02] jne notdetect でできました 感謝
int i; __asm { call IsDebuggerPresent mov j,eax } if(i)MessageBox(NULL, L"detect", NULL, NULL); たびたびすみません、これコンパイルとおらないんだけどなんで
mainがない MessageBoxが未定義 jが未定義 不定値iを参照
iとjまちがえてたww #include <windows.h> int main(){ int i=0; __asm { call IsDebuggerPresent mov i,eax } if(i)MessageBox(NULL, L"detect", NULL, NULL); return 0; } これでお願いします
__asm{ push 0 push 0 push 0 push 0 call MessageBoxW add esp,12 } これさえとおらない どうすればいいんだorz
__asm{ push 0 push 0 push 0 push 0 call dword ptr[MessageBox] } 英語でぐぐったら大量に情報でてきたw すれ汚しスマソ
callする前に存在するか確認して置くんだぞ #pragma comment(lib, "Kernel32.lib") #include <windows.h> int main(){ typedef UINT (CALLBACK* LPFNDLLFUNC)(void); HINSTANCE hDLL; BOOL i = FALSE; hDLL = LoadLibrary("Kernel32.dll"); if (hDLL != NULL) { LPFNDLLFUNC lpfnDllFunc = (LPFNDLLFUNC)GetProcAddress(hDLL, "IsDebuggerPresent"); if (!lpfnDllFunc) { FreeLibrary(hDLL); return 1; } __asm { call dword ptr[lpfnDllFunc] mov i,eax } if (i) { MessageBoxW(NULL, L"detect", NULL, NULL); } } return 0; }
>>927 独学だからこういう具体例はほんとありがたい
d
なんでわざわざインラインアセンブリを使ってんだ
IsDebuggerPresentを確認なんて95で動かす気かよ
>>929 IsDebuggerPresent自体は単に関数呼び出しの例として使っただけじゃね?
「VC++ 2010 Express」つかっています。 コーディングエディタのデフォルトのフォントが大きいので、小さくしたいのですが、フォントサイズの設定箇所をみつけられません。 どこで設定するか教えてくださいませ。 googleしても、作成したアプリケーションのフォントについてしか見つけられていません。 現状は、起動するたびに表示を83%に落として利用しているのですが、終了→起動で100%に初期化されてしまうので不便です。 よろしくお願いします。
有料版VC++購入しようかと考えているんですが フリー版のExpressとどんな点が違うんですか 前、PDFとかでそういうのまとめたの見た気がするんですが違いがありすぎて 全部確認するの面倒でした。。大きな違いだけ教えて貰えると嬉しいです。
atl/mfc、リソースエディタがついてる アドインが使える
Visual C++の有料版=Visual Studioってことで良いの? じゃあ、何でVisual Stuido Expressなんてのもあるんだ、わけがわからないよ・・・。
>>936 初心者は C++ も C# も VB も初めから色々あると何すればいいのか混乱するだろ
大抵の初心者は C++ やりたい、C# やりたいというように、
やりたい言語は決めている
じゃあその言語だけをシンプルな提供した方が勉強し易いでしょ
>>937 うーん…そうですか
Express版で64bitコンパイル出来ない時点で混乱してしまうような気が…
ってかVisual Studio Professionalって正規で買うと10万もするのか、やべーな
>>936 Visual Studio 2010 Express なんていう名前のソフトウェアは無いからな
各言語用の Express を枠組み的にまとめたシリーズ名みたいなモンだ
(Visual Studio 2010 Express for Windows Phone ってのはあるが)
紛らわしい名前を付けるな、と言うのなら分かる
>>938 しょうが無いよ
VS 2010 が開発されてリリースされた当時は、
「はじめての〜」とかの入門書を頼りに勉強してみようとする初心者が持つマシンは、
まだ32bitな人がほとんどだったんだから
俺はそれよりも MFC がないことの方が当時驚いた
C++ でも .NET に移行しろというメッセージだったんだろうなぁ
>>938 64bitコンパイラはないが64bitで動くバイナリは吐けるだろ
>>941 じゃあ32bitマシンで64bit環境のプログラムを開発すれば良いってこと?
安い32bitのノートPCでも買ってきてVC++インスコすれば良いのかな
>>939 あーなるほど
シリーズ名だったのか…わかりづらい…
>>942 >>941 を超訳すると、
32bitアプリでも64bitで問題無く動くだろ
と、言いたいんじゃ無いかと
>>944 違う
32bitOSでは動かないバイナリといえばよかったかな
え、動くの? じゃあ64bitコンパイラとか必要ないんじゃ…
>>946 16GBのハイビジョン動画データをオンメモリで編集したい、なんて人なら喜ぶ。
アプリじゃなくてプラグインを作ろうと思ってるんだけど その場合も32bitマシンでコンパイルしたものがそのまま64bitでも使えるの??
>>269 VCEEにも64bitコンパイラついてた気がするけど、自信が無い。。。
(削除しちまった)
>>935 の一覧にある64ビットコンパイラというのは、次のどっちのこと?
1. 64ビットマシン上でコンパイラが動く
2. 64ビットマシン上で動く実行ファイルを吐く
両方だな 上位エディションには64bitコードを出力する32bitコンパイラと 64bitコードを出力する64bitコンパイラが付属してる
ってことはExpressEditionではどっちも出来ないってことか 結局64bitコンパイルしようと思ったら10万近く払って上位エディションを購入するか 64bitコンパイルの出来るExpressEditionのバージョンが出るのを待つしかないのか・・・ どっちにしてもキツいな
無償のPlatform SDKに64ビットコンパイラって付いてないか?
つーか少しぐらい調べろよ
>>955 めんどくせーな
64bitコンパイルするだけに何でこんな手間かけにゃならんのだ
10万ぽいと出せる男になりてえ…
手間賃
これくらいで面倒がってる生き物は、 10万払ってもたぶん VS2010 Professional は金額分も活用できん 使い方を学ぶのも面倒だからね それなら SDK 入れて設定する方がマシ なんなら一度無料の体験版をインストールして1ヶ月使ってみるといいよ
てか VS2010Pro なら制度を利用すれば 60k くらいで買えなかったっけか。
10万円分とか活用できるわけねーわー らってプログラミングのしごとしてるわけじゃないんらもん… 無料の体験版もあるのかあ、つかってみますありがとう
有料版だとエディタが使いやすかったりする? Expressと同じ? WinAPI使いたいからVC++使うけど、Eclipseの使いやすさを知ってるからイライラする。
変わらないだろ。
10万は建前。実際にはExpressからアップグレードできるので誰でも6万で買える 趣味でも社会人ならそれぐらい出せるだろ 学生ならアカデミック版が1万で買えるし
10万が6万になっても、その6万分の価値を引き出せなければ勿体ないことに変わりはない 実際、自分に全く関わりの無い機能や、他の無料ソフトで代用できそうな機能もあるからね まずは無料体験版を使い倒すのがいい
>>964 そもそも学生ならDreamSpark使うよ
以前VC++2008 EEで作ったソフトを、VC++2010 EEに移植して コードを吐かせたら、exeファイルのサイズが以前よりも半分近く小さくなりました 650kb(VC++2008 EEで製作)→370kb(VC++2010 EEで製作) どちらもリリースモードかつランタイムライブラリはマルチスレッド/MTです MFCも使っていません こんなにexeファイルのサイズが変わるものなのでしょうか?
>>968 特に2008は、でかくなるので有名です。
>>969 なるほど
あまりにも差があるので、VC++2010EEで何らかの設定ミスを
犯したのかと思ってました
ありがとうございます
設定で同水準にはできるよ、デフォルトの違いだな
972 :
デフォルトの名無しさん :2011/11/01(火) 18:05:46.25
Win8のタッチパネル方式のプログラムも VCで作成することってできるものなのかな?
973 :
デフォルトの名無しさん :2011/11/01(火) 18:30:27.42
すいません、関数の頭に「::」が付くのは、どのような処理を行っているのでしょうか? ::QueryPerformanceCounter(LARGE_INTEGER *)&hoge); 等です。
C++の入門書読み返してください
975 :
デフォルトの名無しさん :2011/11/01(火) 18:55:06.97
すいません、手元にあるVisualC++の入門書を読み返してみましたが、載っていませんでした。
本当に載ってないなら窓から投げ捨てるべきだな
ここに質問してくるヤツが、 ノーヒントで C++ と VC++ の違いなんて分かるわけが無い 現に、C++の入門書読めって言ってんのに、 VisualC++の入門書読んだけど、の切り返しだし だれか分かりやすくヒント出してやれよ ちなみに俺には無理
>>973 "c++ スコープ演算子"でぐぐれ
(「::」=スコープ[解決]演算子)
980 :
デフォルトの名無しさん :2011/11/01(火) 20:41:36.91
大阪府島本町の小学校や中学校は、暴力イジメ学校や。 島本町の学校で暴力やいじめを受け続けて、心も身体も 壊されて廃人同様になってしもうた僕が言うんやから、 まちがいないで。 教師も校長も、暴力やいじめがあっても見て見ぬフリ。 そればかりか、イジメに加担する教師もおった。 誰かがイジメを苦にして自殺しても、「本校にイジメは なかった」と言うて逃げるんやろうなあ。 僕をイジメた生徒や教師の名前をここで書きたいけど、 そんなことしたら殺されて、天王山に埋められるかもしれ へん。それで誰にも発見されへんかったら、永久に行方不明のままや。
次スレよろ
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int intShowCmd) { return 0; } このコードを最小の実行ファイルサイズで出力されるようにビルドさせるにはどうすればいい? 自分は#pragma comment(linker, "/entry:\"WinMain\"")で4kbまで減らせたけどそれが限界
984 :
983 :2011/11/01(火) 22:38:08.66
追記VisualC++2010です
最近やさしいC++第三版で学習し始めたが基本を抑えるのってやっぱ1ヶ月くらいかかりますか? あと勉強方法はひたすら書いておぼえるしかないですか?
>>985 基本とは何か?というのは曖昧で難しい問題だな 期間は考えるだけ無駄な気がする
とはいえ結局トライ&エラーしかないと思う
ある程度最低限基本を覚えた後、
何か作りたいものがあればモチベーションがあがって成長は早いかも
>>986 実際にものをつくれるようになるまではどれくらいかかるんでしょうか
>>987 知識0からとして誰でもがんばれば
色々アプローチにもよるけど、
インベーダーゲームくらいなら1ヶ月でいけるんじゃないか?
20年くらい
>>988 中々わかりやすい例を挙げてくれますね!
頑張ります
>>983 のコード借ります。
Visual C++のヘッダファイルとか覗いていると、
よく、LPSTR、みたいな LP で始まる型があるのですけど、何の略なのですか?
Pはポインタのことみたいですが。
よろしくお願いします。
昔はロングポインタ、ニアポインタというものがあってだな… ようするにポインタのことだよ
993 :
991 :2011/11/02(水) 07:06:51.75
>>992 ありがとうございます!
そういった歴史を教えていただけると理解が深まります。調べることもできますし。
994 :
973 :2011/11/02(水) 10:46:16.99
>>979 >>982 using namespaceで前を省略していただけだったのですね
ありがとうございました
>>994 なんか激しく勘違いしていないか?
落ち着いて出力を見直すんだ
997 :
973 :2011/11/02(水) 11:33:15.75
>>995-996 ありゃ、勘違いでしたか
>>982 のコードで、main()の中の
「::func();」を「func();」にしても結果は同じなのですが、「::」の有無で何が変わるのでしょうか?
オーバーロードとも違いますよね?
例が悪い
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。