1 :
デフォルトの名無しさん :
2006/06/12(月) 18:48:32
VC++について質問させて頂きます。 関数でCStringのポインタを使って、直接文字列をいじりたいんですけど、 それをやろうとしてもエラーが出たりします。本を見たりネットを見たりして 色々と試したんですが、どれもうまくいきません。 char型のように関数で文字列を直接扱うことはできるんでしょうか?
>>4 できるよ
どう扱うのかわからんからサンプルくれ
あと、
CString str;
strcpy( &str, "hoge" );
とかはするなよ!絶対!!
int Strcmp(char* text, char* pattern){int index; for(int i = 0; pattern[i] != NULL; i++){ if(index = text[i] - pattern[i] != 0) break; }return index;} char* Strstr(char* text, char* pattern, int len, int n){ char* end = text + len - n + 1; while(text != end){ if(Strcmp(text, pattern) == 0) return text; text++; } return NULL;} void table(char* pattern, int* TABLE){ int x = 1, y = 0; TABLE[0] = 0; while(pattern[x] != NULL){ if(pattern[x] == pattern[y]) TABLE[x++] = ++y; else{ if(y == 0)TABLE[x++] = y; elsey = TABLE[y];}} char* bmp(char* text, char* pattern, int len, int n){ int y = 0; int* TABLE = new int[strlen(pattern)]; table(pattern, TABLE); while(*text != NULL){ if(*text == pattern[y]){text++; if(pattern[++y] == NULL)return text - n; }else{ if(y == 0)text++; elsey = TABLE[y - 1]; } } return NULL; } void main(){ char a[] = "fhsoeriojtotetototo"; char b[] = "totetototo"; char* c; char* d; int len = strlen(a); int n = strlen(b); c = Strstr(a, b, len, n);//単純法 d = bmp(a, b, len, n);//KMP法} こんな感じで、charのところをCStringを使って扱いたいわけです。
7 :
>>6です :2006/06/13(火) 04:03:21
>>5 えっと、ダメでしょうか?
すみません。見づらいとは思いますが、お願いします。
>>7 それは止めたほうがいいよ。引数の char* を const char* にすれば CString を
(暗黙のキャストで)渡せるようになるから、それくらいで満足しておくべき。
UNICODE でもOKにするなら const TCHAR * で。
すみません。教えてください。SDIで表示したBitmapを任意で360度自由に回転させたいのですが、どうすればいいのでしょうか?? 教えてください。携帯からですみません。
>>9 自分で計算して描画 or DirectXを使う
>>8 つまり、const char* 以外の方法は無いって事でしょうか?
CStringで文字列を格納して、関数で受けるときはcharを使った方が良いという事でしょうか?
const char * Strstr(const char * a, const char * b); CString a = "fhsoeriojtotetototo"; CString b = "totetototo"; const char * c = Strstr(a, b); // でいいじゃん。で、文字列長はStrstr()内でstrlen()すればいいし。 //# 文字列長を引き数で渡す積極的理由があるならそれはそれでいいが。
>>12 なるほど〜
文字列長を引数で渡しのは検索を連続で行うためなんですよ。もっと長い文字列ときに同じ単語がいくつかでるので、
関数内でだと、strlenが何度も呼び出されるからです。
って、参考にしたサイトで書いてましたw
あと、CString.FindやReplaceで検索や置換を行った方が処理は早いんでしょうか?
それとも、BM法でやった方が処理は早いんでしょうか?
質問ばかりですみません。お願いします。
別のところで質問し、スレ違いと知りこちらにやってまいりました。 ユーザー関数の戻り値が帰ってくるまでの時間がランダムの 場合、その戻ってくる時間分だけ待機させるのってどうしたらいいでしょう? CheckISSError :ユーザー関数 for( i = 0 ; i < 15 ; i++){ iRet = CheckISSError( i ); if(iRet < 0){ エラーの場合の処理 } ::Sleep(700); } 現状では ::Sleep(700); をいれることでもたつきますが正常に動作してます。 WaitForSingleObjectを使用すればいいのでは?とご教授頂いたのですが どのように利用すればいいのかもわからない状態です。 何方かご存知の方 ご教授願えませんでしょうか?
>>13 CStringならGetLengthで文字数が得られる。
元がbmp(a, b, len, n);なんだろ。
そこへ自分で多重定義してやればいいだろ。
const char* bmp(const char* a, const char* b)
{
return bmp(a, b, std::strlen(a), std::strlen(b);
}
const char* bmp(const CString& a, const CString& b)
{
return bmp(a, b, a.GetLength(), b.GetLength());
}
>>15 なるほど。多重定義ですか!
全然思いつかなかったw
大変勉強になりました☆ありがとうございます☆
>>13 strlen程の速度を気にするんだったら、
CStringを使わずchar*とintで文字列と文字数を渡してやる方がよくね?
19 :
デフォルトの名無しさん :2006/06/13(火) 20:05:10
VC++2005で普通にhello worldみたいなコンソール出力用のプログラムを作成したのですが、 コマンドプロンプトに出力されません。 どこか設定おかしいのでしょうか? よろしくお願いします。
CStringを扱っているのですが. ある関数でDebugモードでは正常に機能するのに Releaseモードでは戻り値が空になって返ってくるようになってしまいました. ちなみに,その現象がお起こるファイルは, ブレイクポイントにて 現在実行されていると表示されている行と 実際実行されている行とでは数行の開き (実際は5〜7行崎を実行中) があるようなのです(MesseageBoxにて確認) このような症状ってどうやれば直るのでしょうか?
>>19 プロジェクトを作るときには何を選んだ?
ただのC/C++ならWin32コンソール アプリケーションだよ。
>>21 全てリビルド。
GetBuffer / ReleaseBuffer しないで書き込んでるとか、
その類のことではないだろうか。
24 :
21 :2006/06/13(火) 22:07:30
>>23 リビルドしても,Release/Debugフォルダ全消去しても同じでした.
GetBufferというか,CStringそのままでしか使っていないので関係ないと思いますが...
ほかに何かないでしょうか?
25 :
19 :2006/06/13(火) 22:22:51
>>22 もちろんプロジェクトはWin32コンソールアプリケーションです。
で、設定でコンソールアプリケーションを選択。
追加オプションの空のプロジェクトにチェック入れました。
>>21 ReleaseビルドでBreakPointがずれているように見える現象は、最適化ゆえ。
Releaseビルドでも最適化しないようにすればずれないよ。
>>19 ちゃんと標準出力に出力してる?
標準出力のハンドルは合ってる?って普通は合ってるやな
28 :
19 :2006/06/13(火) 23:19:26
念のためソース↓ #include<iostream> using namespace std; int main(){ cout << "Hello World" << endl; return 0; }
>>17 そうですねぇw
それは確かに思いました。
ただ、どっかのサイトで統一した方が良いと書いてありましたのでw
17さんなら、どうしますか?
31 :
17 :2006/06/14(水) 00:40:07
自分なら
>>12 速度が必要なら自分でゴリゴリ書くけど
そうじゃないなら汎用性と読みやすさ重視だね。
そーいやstl::stringを使うという選択肢もあるな
>>17 なるほど〜 うまくいきました☆
で、さらに問題が・・・検索した文字列を置換をしたいんですが、
constを外すと、当然なんですが、エラーが出ます。
この場合はどうしたら良いでしょうか?
ちょっとおかしな現象なんだが、 class A { template < int T > void F(); template <> void F<0>F(){...}; } なんてコードを書くと、クラスビューにこのクラスが認識されなくなるんだが。 これって俺だけ? ちなみに特殊化したFを消すと再認識される
34 :
33 :2006/06/14(水) 01:59:19
;がないってのは突っ込まんで。
すみません、このプログラムの境界条件Tの宣言がうまくいきません。 どこをどう直せばよいのでしょうか? #include <stdio.h> #include <math.h> #include <stdlib.h> #define NX 41 #define NY 41 void SetBoundaryCondition(double T[NY][NX]) { int x; int y; for (x = 0; x < NX; x++) {T[0][x] = 0.5;} for (x = 0; x < NX; x++) {T[NY-1][x] = 0.0;} for (y = 0; y < NY; y++) {T[y][0] = 1.0;} for (y = 0; y < NY; y++) {T[y][NX-1] = 0.0;} *つづく*
*つづき* int main(void) { const double dx = 1.0 / NX; const double dy = 1.0 / NY; const double C1 = 0.5 * dx*dx / (dx*dx + dy*dy); const double C2 = 0.5 * dy*dy / (dx*dx + dy*dy); int i; int j; double errorMax; double previousValue; SetBoundaryCondition(T[NY][NX]); do { errorMax = 0.0; for (i = 1; i < NY-1; i++) { for (j = 1; j < NX-1; j++) {previousValue = T[i][j]; T[i][j] = C1*(T[i+1][j] + T[i-1][j]) + C2*(T[i][j+1] + T[i][j-1]); if (errorMax < fabs(T[i][j] - previousValue)) {errorMax = fabs(T[i][j] - previousValue);}}} } while (errorMax > 0.00001); for (i = 0; i < NY; i++) {for (j = 0; j < NX; j++) {printf("%d\t%d\t%15.15f\n", j, i, T[i][j]);} } return 0;} よろしくお願いします。
>>32 CStringで+していくか、出来上がったバッファをCStringに代入。
前者:
CString foo = "abc";
foo += "def";
後者:
CString foo = "abc";
char buf[20];
sprintf(buf, "%sdef", foo);
foo = buf;
>>32 だったらCString&なんかを渡せばいいだろ。
>>32 置換じゃ置換後の文字列長さが不定なので全然違ってくる
お手軽にやりたいんならCStringを渡すのが楽。
CStringを使わないなら自分で領域確保してそのアドレスを戻す。
>>35 どこがうまくいかない?
エラーメッセージは?
>>37-39 ありがとうございます☆
確かにそれなら、簡単にできそうです!!
感謝です☆
42 :
35 :2006/06/14(水) 09:48:39
>>40 error C2065: 'T' : 定義されていない識別子です。]
と出ます。
どのように直せば良いのでしょうか?
>>42 エラーメッセージ貼るなら、どの行か判るようにしてくれ。
で、恐らくmain()で配列Tが宣言されていないのでエラーになっていると思われる。
関数の呼び方も間違っている。訂正するならこんな感じか。
>SetBoundaryCondition(T[NY][NX]);
↓
>double T[NY][NX];
>SetBoundaryCondition(T);
44 :
35 :2006/06/14(水) 11:11:07
>>43 ありがとうございます。無事ビルドできました。
しかし今度はデバッグで
'熱伝導.exe': 'C:\Documents and Settings\服部 正太郎\My Documents\Visual Studio 2005\Projects\熱伝導\debug\熱伝導.exe' を
読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。
'熱伝導.exe': 'C:\WINNT\system32\NTDLL.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'熱伝導.exe': 'C:\WINNT\system32\KERNEL32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
プログラム '[2216] 熱伝導.exe: ネイティブ' はコード 0 (0x0) で終了しました。
と出ました。何故でしょうか?
Visual C++ 2005 Express Editionを使っているのですが。
46 :
35 :2006/06/14(水) 11:30:37
さすがに本名じゃないんで、無問題です。
本名だろw
服部 正太郎って今時あるのか?w 本名に1票!!
マキ凛花
>>44 デバッグ用んp設定とリリース用の設定が混じってる希ガス
環境設定間違ってね?
もっかい新規作成からやってみれば?
ソースはコピペすればいいんだし
51 :
35 :2006/06/14(水) 15:29:23
新規作成してみましたが、解決しませんでした。
ダイアログを表示させて、キー入力があったらそれに応じて 処理をおこなうようにしたいのですが、キー入力してもエラー音が出て WM_CHAR:の処理をおこなってくれません。 あまり関係なさそうなところを省くと、ソースは下のようになってます。 int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow) { DialogBox(hCurInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgProc); return 0; } LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_INITDIALOG:〜 case WM_CHAR:〜 case WM_COMMAND:〜 } ダイアログだけで済むものを考えているので、WindowProcはありません。 なにか分かることがありましたら、お願いします。
55 :
33 :2006/06/14(水) 16:25:42
何。俺だけ?この現象
>>54 ありがとうございます。
キーを押されたらそれに応じて、スタティックテキストを書き換えるように
してたので、エディット欄は設けていませんでした。
エディット欄を設けると、当然そこには入力できるのですが、やはりWM_CHAR:
に記述した処理はおこなってくれません。
キーが押されると、WM_CHARのメッセージが渡されるという理解で
間違ってないでしょうか?
>>56 WM_KEYDOWN あたりを見ると幸せに・・・なれたらいいなぁ
>>55 すまん。テンプレートは苦手じゃ
58 :
35 :2006/06/14(水) 17:58:50
>>52 了解、無視します。
ありがとうございました。
前スレで質問したのですが回答得られなかったので教えてください CPU情報を表示するソフトを作りたいのですが CrusoeのCPUが判定できる 外部DLLってありますか? [作りたいもの] c:\>cpuinfo と打つと Crusoe 933MHz と表示される
60 :
デフォルトの名無しさん :2006/06/14(水) 23:24:07
バージョン:VC++6.0 OS:win2k or winXP VC++でブレークポイントを設定すると固まることがまれにあります。 解決方法をご存知の方がいらっしゃいましたらご教示願います。 スレッドを作成しています。
63 :
デフォルトの名無しさん :2006/06/15(木) 01:11:37
>>61 さん
情報どうもありがとうございます
ただ、DirectInput は使用していません
MFC使用、SDI,スレッドにmessageループ(PostThreadMessage->GetMessage)を使用しています
スレッドにブレークポイントを設定したときに固まる傾向にあります。
>>62 Windows XP Service Pack 1 以上も当てています(たぶんService Pack 2)し、
Win2kでもおきます。
プログラムが糞だから起きるのでしょうか?たぶんそうです
スレッドの同期待ちになってるとか
PGPLOTというグラフ作成ツールを導入したいのですが、うまくいきません。 「libc.libファイルが開けません」というエラーが出たのでググってみたのですが 『libc.libはVS2005では削除されて、代わりにマルチスレッド用libcmt.libがある』 とのこと。 これはどうやって解決したらよいのでしょうか。 よろしくお願いします。
マルチし始めたな。
68 :
デフォルトの名無しさん :2006/06/15(木) 21:19:06
さっき始めたばかりの超素人です。 /***************** * hello * * world * *****************/ #include <stdio.h> int main() {printf("Hello World!"); return 0;} っていう入門書に書いてあったやつをそのまま作ったんですが、実行すると一瞬だけ表示されてすぐに消えてしまいます。 たぶん写し間違えとかはないと思うんですが・・・ なにとぞご教授ください。
>>68 それでおそらく合ってます
出来たexeファイルをコマンドプロンプトから実行してみてください
#include <stdio.h> int main() {printf("Hello World!"); while(1); //←この行を追加しましょう return 0;}
>>71 は〜い
実行すると一瞬だけ表示されてすぐに消えるのは、
windowsの標準設定にてプログラムが終了したら窓を閉じる
という設定になっているためです。
解決方法は2種類
1.プログラムがすぐに終了しないような処理を書く
⇒70の無限ループや、キー入力待ちの処理を入れる方法
2.窓を勝手に閉じなくする
⇒69や、プロパティでプログラム終了したら窓を閉じるという
チェックボックスを外す方法
があります。以上
73 :
デフォルトの名無しさん :2006/06/16(金) 09:52:58
>>68 コンソールアプリは、処理が終わると同時に
コンソールウィンドウも閉じる
ただ、コメントの内容は
ちゃんとこのプログラムは・・・をするプログラム
ってかんじで書いたほうがよいです。
でも、ちゃんとコメントを書くってのは良いことです。
74 :
デフォルトの名無しさん :2006/06/16(金) 12:08:58
教えてエロい人 CStringで入力した数値をint型に変換するにはatoi関数を使うとわかったのですが、 CString型をdoubleまたはfloat型に変換するには何を使ったらよいんでしょうか? 調べても見つかりませんorz お願いします。
atof
おおおおお! できた。dクス。
VC++ 6.0 でWindows SDKでデスクトップの一部をキャプチャするものを作っているのですが、 実行したウインドウをなんども移動させたりすると、メモリーリーク??を起こしているのか 途中から画面が真っ白になってしまいます。何が悪いのでしょうか。 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hWndDesktop;//デスクトップのHWND static HDC hDCDesktop;//デスクトップのHDC switch(message) { case WM_CREATE: hWndDesktop = GetDesktopWindow(); return 0; case WM_PAINT: hDCDesktop = GetDC(hWndDesktop); BitBlt(GetDC(hWnd), 0, 0, 100, 100, hDCDesktop, 0, 0, SRCCOPY); ReleaseDC(hWndDesktop,hDCDesktop); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd, message, wParam, lParam); } }
>>77 WM_PAINTではGetDC(hWnd)ではなくBeginPaintを使え。
BeginPaintを呼ぶことでWindowsはそのウィンドウへ描画されていると認識する。
勿論EndPaintを忘れないように。
あと、デスクトップのウィンドウハンドルからGetDCしなくても、単にGetDC(0)で良いはず。
79 :
77 :2006/06/17(土) 16:17:26
>>78 返答ありがとうごいます。早速試してみます。
80 :
77 :2006/06/17(土) 16:33:40
>>77 のプログラムを以下の様に変更してみました。
画面が真っ白になるのは解消されました。
そこで質問なのですが、hDCDesktop;(画面全体のHDC)は
開放しなくていいのでしょうか?
HDC hDCDesktop;//デスクトップのHDC
HDC hDC;//コピー先のHDC
PAINTSTRUCT ps;//BeginPaintのために宣言(使用しない?)
switch(message)
{
case WM_PAINT:
hDCDesktop = GetDC(0);
hDC = BeginPaint(hWnd, &ps);
BitBlt(hDC, 0, 0, 100, 100, hDCDesktop, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps);
return 0;
81 :
77 :2006/06/17(土) 16:42:21
再度書きなおしました。 なぜか再描画がされないときもありますが、だいぶちゃんと動くようになりました。 こんな感じでいいのかなあ・・・。ありがとうございました。 static HWND hWndDesktop;//デスクトップのHWND HDC hDCDesktop;//デスクトップのHDC HDC hDC;//コピー先のHDC PAINTSTRUCT psDesktop, ps;//BeginPaintのために宣言(使用しない?) switch(message) { case WM_CREATE: hWndDesktop=GetDesktopWindow(); case WM_PAINT: hDCDesktop = BeginPaint(hWndDesktop, &psDesktop); hDC = BeginPaint(hWnd, &ps); BitBlt(hDC, 0, 0, 100, 100, hDCDesktop, 0, 0, SRCCOPY); EndPaint(hWnd, &ps); EndPaint(hWndDesktop, &psDesktop); return 0;
82 :
デフォルトの名無しさん :2006/06/17(土) 18:33:39
キーボードからn個のデータを配列に読み込みn個の平均値を求めるプログラムを double sum(double x[],int n) double average(double x[],int n) を使って作成したいのですが全く分かりません。 どなたか作成して頂けないでしょうか。 クレクレ君ですみません
>>81 BeginPaintが使えるのはWM_PAINTが来た時
かつそのWM_PAINTを受け取ったウィンドウに対してのみ。
だからデスクトップに対してはGetDC(0)しろ。
GetDCには常にReleaseDCが必要と思え。
85 :
77 :2006/06/18(日) 00:58:06
>>83 ありがとうございます。言っている意味が理解できました。
86 :
デフォルトの名無しさん :2006/06/18(日) 09:52:38
87 :
デフォルトの名無しさん :2006/06/18(日) 15:03:05
ソースを二つ入れてビルドしたら死ぬほどエラーが出てコンパイルできません。 詳細を見たらcstdioやcstlibで構文エラーが出てます。 どうしたらコンパイルできますぁ。
>>87 自分のソースを見直した上で、リビルド。それでもダメなら新規プロジェクトでやり直してみるとか。
89 :
87 :2006/06/18(日) 16:50:55
>>88 visualc++を再起動したら直りました。
ありがとうございました。
何かキーを押すとデスクトップ上の任意の座標(200,200)の色を表示するプログラムなんですが、 実行するとデスクトップの色に関わらずRGB(255,255,255)と表示されます。 いったん、デスクトップのコンパチブルDCを作成してそこにBitBltし、 そのコンパチブルDCの座標をGetPixelというちょっと面倒な事をしています。何が原因なんでしょうか。 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ static HDC hDCDesktop; HDC hDCTemp; TCHAR s[80]; COLORREF clr; int ix = 200, iy = 200;//任意の座標(200,200) switch(message){ case WM_KEYDOWN: hDCDesktop = GetDC(0); //デスクトップのDC hDCTemp = CreateCompatibleDC(hDCDesktop); //デスクトップのコンパチブルDC BitBlt(hDCTemp, 0, 0, 500, 500, hDCDesktop, 0, 0, SRCCOPY); clr = GetPixel(hDCTemp, ix, iy); ReleaseDC(0, hDCTemp); ReleaseDC(0, hDCDesktop); wsprintf(s, "COLOR: R [%d] G[%d] B[%d]", GetRValue(clr), GetGValue(clr), GetBValue(clr)); MessageBox(hWnd, s, "CHECK", MB_OK); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd, message, wParam, lParam); } }
>>90 CreateCompatibleDCでDCを作ると、描画対象のビットマップはシステムで共有される
1x1ピクセルのものが設定されています。CreateCompatibleBitmap で bitmap を作って
SelectObject で設定してあげないといけない。
それから CreateCompatibleDC で作った DC は DeleteDC で開放する。このとき、
事前に最初に設定されていたビットマップをSelectObjectで設定しなおすこと。
hdc = CreateCompatibleDC()
hbitmap = CreateCompatibleBitmap()
tmp = SelectObject(hdc, hbitmap)
作ったDCを使用
SelectObject(hdc, tmp); // 元に戻す
DeleteDC(hdc)
DeleteObject(hbitmap)
92 :
90 :2006/06/19(月) 16:50:25
>>91 有難う御座います。
CreateCompatibleDCを全然理解していませんでした。
早速試してみます。
93 :
90 :2006/06/19(月) 18:07:12
正しく(たぶん?)動くようになりました。有難う御座いました。 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ HDC hDC,hDCDesktop; HBITMAP hBitmap, hBitmapOld; TCHAR s[80]; COLORREF clr; const int ix = 200, iy = 200;//任意の座標(200,200) switch(message){ case WM_KEYDOWN: hDCDesktop = GetDC(0); hDC = CreateCompatibleDC(hDCDesktop); hBitmap = CreateCompatibleBitmap(hDCDesktop, 500, 500); hBitmapOld = (HBITMAP)SelectObject(hDC, hBitmap); BitBlt(hDC, 0, 0, 500, 500, hDCDesktop, 0, 0, SRCCOPY); clr = GetPixel(hDC, ix, iy); SelectObject(hDC, hBitmapOld); DeleteObject(hBitmap); DeleteDC(hDC); ReleaseDC(0, hDCDesktop); wsprintf(s, "COLOR: R [%d] G[%d] B[%d]", GetRValue(clr), GetGValue(clr), GetBValue(clr)); MessageBox(hWnd, s, "CHECK", MB_OK); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd, message, wParam, lParam); } }
質問です 自分の作ったアプリを他人のPCに持って行って動かした時に落ちてしまいます その時に アドレス0x12345678から無効なアドレス0x0000000Cを参照した というようなダイアログが出ます。 このアドレスをメモしておいて、自宅に帰った後、どの関数で落ちているのか調べたいのですが そのようなことはどうやったらできるでしょうか どうかご教示願います VC2005です
>>94 やり方さえ知ってれば、というかあるツールさえあれば、簡単にそのアドレスから
ソースコードの行番号に変換することができます。(それを使う前準備が必要
なんですが)
『.NET & Windows プログラマのためのデバッグテクニック徹底解説』という書籍に
詳しい解析方法が載っています。
そのツールとはCrashFinderという名前のもので、ググればどこかにころがって
いるかもしれません。
>>95 ありがとうございます
その本を読んでみます
>>95 値段を見てみたら1万円なんですね…
立ち読みしようと思って大きな本屋に行きましたが見つからなかったです…orz
98 :
95 :2006/06/20(火) 23:59:17
秋葉原に行けば確実なんですけどね・・・ では、ググるためのキーワードをいくつか。 ・クラッシュアドレス ・MAP ・pdb 英語でも検索してみてください。 どこかに懇切丁寧にやり方を解説しているページがあるかもしれません。
99 :
デフォルトの名無しさん :2006/06/21(水) 00:09:18
Visual Studio Spoke をつかっています。ToolBarを使いたいのですが リソースファイルの追加ダイアログでToolBarだけ存在しません。 バージョンによって違うのですか?
100 :
デフォルトの名無しさん :2006/06/21(水) 01:14:55
あのー 自作クラスからMFCが作成したクラスにメッセージを投げる方法を教えて頂けないでしょうか? コンソールアプリで動く自作クラスでマルチメディアタイマーをつけてみました。 このクラスをMFCに組み込んで、タイマーが呼び出すコールバック関数から MFCが作成したクラスにメッセージを(SendMessage又はPostMessageで)投げたいのですが、 うまくゆきません。 ・・・効率悪いとか言われそうですが、脳が足りない私に知恵を分けて頂けませんか? 宜しくお願いします。
>>100 いや、普通に投げられるよ
ウィンドウハンドルが間違ってるか、メッセージがフィルタリングされてるか、どっちかじゃない?
投げてるメッセージはWM_APP以降だよな?
102 :
デフォルトの名無しさん :2006/06/22(木) 02:35:53
>>100 返答ありがとうございます。
ぅ〜ん。WM_APP以降かどうかもわからないレベルです、すいません。
やっていることは
@MFCで作成したCxxxViewにWM_TIMERをうけとるOnTimerを実装した。
A自作クラスCHogeにSetCWnd( void* HWND )という、void*型でメインウィンドウのアドレスを取得する関数を実装。
BMFC内で生成したCHogeのインスタンスにメインウィンドウのAfxGetMainWnd()で取得したアドレスを格納。
CCHogeのコールバック関数から
ret = SendMessage( (HWND)cmusic->GetWnd(), WM_TIMER, 0, 0 )
を実行
ちなみにretの値は「届いてませんよ」の0が入ってます。
・・・という感じです。
おろかですが、アドバイスお願いします。
103 :
デフォルトの名無しさん :2006/06/22(木) 02:57:30
>>101 100です すいません 自分に礼をいってますた
>>102 なんだかなぁ。
やりたいことをちゃんと説明して、「こういうときはどうすればいいんでしょう」と聞いた方が早い希ガス。
JavaのStateパターンを移植してみようと思い、以下のように書いてみました。 VC2005でコンパイルしたところ error C2512: 'A' : クラス、構造体、共用体に既定のコンストラクタがありません。 というエラーが出たのですが、どうしてエラーになるのでしょうか? AやBにコンストラクタを追加しても解決せず、class Cの宣言をAより下に持っていくとエラーがなくなりました。 class A; class B; class C { B* b; public: C() : b(new A){} }; class B { public ~B(){} } class C { public: ~C(){} }
class C { public: ~C(){} } はclass Aの間違いです。
>>105 クラスの定義の終わりにはセミコロン付けろ
>>107 ああ、ごめんなさい。もちろんつけております
>>105 いわゆる「前方参照」は、ポインタの場合にしか使えない。
class Cのコンストラクタのnew Aの前に、前方参照宣言ではなくclass Aの実際の宣言が必要。
クラスBはこの場合関係ないと思う。問題は class A; という宣言だけではクラスAのコンストラクタがクラスAのメモリのどこにあるか、クラスCには分からないことじゃないかな class A{ public: A(); // 仕様だけでいい }; まで書かないとだめなはず というかこれはclass Cの宣言をAより下に持っていくって事なんだけど 一番手っ取り早い解決は 仕様のA();を.h、実装のA(){}を.cppに書いて計(A,B,Cの3クラス×2で)6つのファイルに分けて書くこと それが嫌で仕様と実装でファイルを分割しない場合で循環参照をしたい場合は 純粋仮想関数や継承といったテクニカルなことをしないとC++では出来なかったと思う
テクニカルなことってのはこんな感じ class AGhost{ public: virtual bool foo() = 0; }; class B{ AGhost *p; public: B(){ p = new AGhost; } void goo(){ p->foo(); } }; class A : public AGhost{ public: bool foo(){ printf("helloworld"); } }; あ、間違ってたり普通にもっと良い方法があったらすいません 指摘していただけると嬉しいです
え?前方参照は戻り値の型や値渡しの場合でも有効じゃなかったっけ?
コンソール用プログラムが十分書ける様になってから、ウインドウズのソフトが作れる様になるまでってどれくらい時間掛るものなのでしょうか?
>>113 それはそうだけど、今回の例だとnewがあるから無理。
newは前方宣言だけではできないはず。
116 :
デフォルトの名無しさん :2006/06/25(日) 17:39:09
VisualC++6 で今まで打ち込んできたソースが増えてきたので 一旦CDにでも焼いてからHDDから消そうかと考えているのですが 意外と分量があるので容量を幾らかダイエットさせようと思っています debug フォルダの中なら消しても問題ないような気がするので delete *.obj みたいな感じのバッチファイルを書こうかと思ってるのですが 拡張子が .idb .ilk .obj .pch .pdb あたりのファイルは消しちゃっても大丈夫なんでしょうか? いや多分大丈夫だと思うのですが、例外的なケースがあって困ることはないかと不安で・・・
>>116 クリーン時に削除する拡張子ってのがプロジェクトごとに設定されてるから
それ見て消せばいいと思うよ。あとはncbとか。
>>116 例外的なケースをどこまで想定するかにも拠る。
まぁ、外部から*.objを持ち込むとか、バイナリパッチするとか、そういうことをしてなければ大丈夫だ。
>>117-118 レスありがとうございます。
私が思っていたほど単純な話ではなかったようですが
注意しながら消していくことにします
いや、単純な話です。Exploreの検索機能で見つかったファイルを まとめてばっさりやってOKです。
ピタゴラスの定理
debug フォルダごと消しちゃって大丈夫
>>116 昔どっかでみつけた VCClean.exe というのを自分は使っている。
蛇足だが、フォルダ毎 lzh 圧縮して MO に保存。
640MB MO が一杯になると CD-ROM ヘ。
すいません、質問させてください。 オープンソースアプリをVC++6.0でコンパイルしようとしているのですが、 sys/param.hやsys/socket.h、そのほか大勢が無いと弾かれてしまいます。 調べてみた所、それらのヘッダはunixには存在するらしいのですが、 windowsには標準では入っていない様です。 こういう場合は、unixからヘッダファイルだけ抜き出して VC++のincludeフォルダ内に入れたりして解決するのでしょうか? もしもっと賢い解決法があれば教えていただけると有難いです。
そのソースを公開してるサイトで直接質問する。
Cygwinでも使ってろカス
そもそもWindows用のアプリじゃないんだろ
>>124 そのオープンソースの名称を具体的に教えてくれ
皆さんどうもありがとうございます。
>>125 それもそうなんですが……
メールアドレスだけしか書かれていないので気後れしてしまいまして。
>>126 今cygwinをインストールしています。
unixをインストールしなくても良いのは便利そうですね。
>>127 一応、Windows対応版のソースを拾ってきたんですけどね……
>>128 stoneです。googleでトップに出てきます。
ダウソしてビルドしてみようかと思ったら、0.4KB/sなどというありえない 速度だったので断念w
ちゃんとメーリングリストがあるじゃないか
ぶっちゃけソースの頭見ればVC++は考慮してないのわかるよね?
>>132 すいません……サッパリです。
超初心者以下なようでご迷惑おかけします…
>>132 clという名前のコンパイラはVC++以外にあるのかい?
ICL
intelのclだなww
exeに付属のdllのヘッダと必要ならLibを用意する。 あとはmakeするだけ 馬鹿でもできる。
それよりもっと賢い方法は無いのかって聞いてるんじゃないの?
>>124 で。
だから馬鹿でもVCでコンパイルできるようになってる。
>>124 unix専用のヘッダはVCは参照しないようになってるが。
最近VC始めたんですが、intからStringへの型変換で躓いています。 int i=123; String str = String.Format( {0} , i ); 一応ぐぐったりしてこんなコードを書いたんですが、コンパイルするとエラーが出ます・・・ メッセージ通りに手を加えても通りません。 きっと初歩的なことなんでしょうけど何処が悪いんでしょうか?
長年VCやってるけどStringなんて知らんな それ本当にVCか?
.NEETの話だろ? ってか、"{0}"じゃね?
String ^ str = String::Format("{0}", i );
これで通った
謎だ・・・
>>141 の{0}はタイプミスですが、今まで必死になって{"0"}を通そうとしていました。
どう見ても通りません。
本当にありがとうございました。
ところで ^ って何なんでしょうか・・・
MSDNに聞いてもでてこないし・・・
色々ダメですな
>>144 C++/CLIのトラッキングハンドルを意味する。
ようするに.NETのポインタのようなものだと思えば良い。
あと、String::Formatを使わなくても、単にi.ToString()で良いと思うのは気のせいか?
ぐは、int型は内部でInt32なんだね。 "" + i とかしてたよ。orz
vectorは、先頭要素のアドレスとcapacity/resize
vectorは、先頭要素のアドレスとcapacity/resize/reserveを使うことによりバッファとして使用できますが dequeでソレをすることはできないのでしょうか? capacityとreserveすら使えないのですが、FIFOバッファのコンテナとして使いたいので vectorではちょっとパフォーマンスが不安なんです
a.reset(new A); は a = std::auto_ptr<A>(new A); と等価ですよね a = new A; とは書けないんですか? できないのならコンパイルエラーが出るべきだと思ってたんだけどランタイムエラーになってしまいました。 たぶん、このコードいっぱいあるのでsxzd;jzhp
あ、オレもそれ知りたい
誤爆だろ
初めてプログラムを作ろうと思って行き詰ってしまったので質問させて下さい。 double x ; char str ; x = 1.11 ; sprintf(str, %f, x) ; SetWindowText(hwnd, str) ; これで表示される値が0.000になってしまうのです。 %fを%ld等に変えるとしっかり整数部分だけはでるのですが・・ どうしてだか教えてください(´・ω・`)
>>154 strはchar配列にしないとだめだろ。
>>155 あ、書き間違えていました
char str[30]
という配列を宣言していました
VC6.0とVC7.1で確認したけど 1.110000と表示された sprintf(str,"%f",x)にはしたが。 文字セットはマルチバイトセットで確認した。
doubleの所がlongになっていたようです doubleにしたらできました 本当に申し訳ございませんでしたorz
159 :
デフォルトの名無しさん :2006/07/01(土) 21:56:27
非コンソールプロジェクトからコンソールに出力ってできますか? デバッグに使えたら便利…というか、今現在使いたいと思っています。 ご存知の方いらっしゃいましたらよろしくお願いいたします。
WinXpでこんなソフトを考えてますが、可能でしょうか? LPT1を監視して、他のアプリケーションが印刷ジョブを流したら、 そのデータを読み取りたいです。印刷は行います。
>>159 AllocConsoleしてWriteFile
別にLPT1:を監視しないでも、仮想プリンタポートつくって、 そこから横流しすればいいじゃん。
>>161 おお、表示できました。ありがとうございます。
こいつぁ便利だ〜(`・ω・´)
http://www.interq.or.jp/black/minami-m/ ここのdirectXのサンプルプログラムをvisual c++ 2005でビルドしてみたのですがコンパイルまではできたのですが、リンクの段階で
dx_audio.obj : error LNK2019: 未解決の外部シンボル __imp__CoCreateInstance@20 が関数 "int __cdecl AdoInit(void)" (?AdoInit@@YAHXZ) で参照されました。
dx_audio.obj : error LNK2019: 未解決の外部シンボル __imp__CoInitialize@4 が関数 "int __cdecl AdoInit(void)" (?AdoInit@@YAHXZ) で参照されました。
dx_audio.obj : error LNK2019: 未解決の外部シンボル __imp__CoUninitialize@0 が関数 "void __cdecl AdoRelease(void)" (?AdoRelease@@YAXXZ) で参照されました。
win_main.obj : error LNK2019: 未解決の外部シンボル __imp__ShowCursor@4 が関数 _WinMain@16 で参照されました。
win_main.obj : error LNK2019: 未解決の外部シンボル __imp__FindWindowA@8 が関数 _WinMain@16 で参照されました。
というようなエラーが大量にでてきました。解決方法わかりますでしょうか。
スレ違いでしたらごめんなさい。
すみません、ここで訊く事じゃないかもしれませんが、 Visual C++ 2005 Express Edition にて、Windowsフォームアプリケーションを作成しようとすると、 以下のダイアログが出て先(? Delphiみたいなフォームが出る?)に進めません。 --------------------------- Visual C++ 2005 Express Edition --------------------------- f:\Documents and Settings\username\デスクトップ\test2\test2\Form1.h ファイルを開けません。 --------------------------- OK --------------------------- これは普通の動作なのでしょうか?? エラーのタブには↓のようなメッセージが表示されます。 警告1保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。0
>>164 OLE32.LIBとUSER32.LIBをリンクするようにしろ。
>>166 なるほど。Platform SDKのその2つのライブラリを自分でリンクする必要があったんですね。
おかげでだいぶエラーが減りました。質問ばかりで申し訳ないのですが
win_main.obj : error LNK2019: 未解決の外部シンボル __imp__GetStockObject@4 が関数 "int __cdecl SysCreateWindow(struct HINSTANCE__ *,int)" (?SysCreateWindow@@YAHPAUHINSTANCE__@@H@Z) で参照されました。
d3dx8dt.lib(d3dx8core.obj) : error LNK2019: 未解決の外部シンボル __imp__GetObjectA@12 が関数 _D3DXCreateFont@12 で参照されました。
d3dx8dt.lib(d3dx8dbg.obj) : error LNK2019: 未解決の外部シンボル __imp__RegCloseKey@4 が関数 "int __stdcall D3DXDebugAssert(char const *,int,char const *)" (?D3DXDebugAssert@@YGHPBDH0@Z) で参照されました。
といったエラーがまだ残っています。
あとは同じようなエラーなのでこれさえ解決できれば実行できるような気がするのですが・・。
よろしくお願いします。
gdi32.lib advapi32.lib MSDNで関数名を検索して必要なライブラリを割り出せ。
>>162 なるほどです。
参考になるサイトとかご存知ですか?
なかなか見つからないす。
なるほどなるほど
>>168 なるほど、そういう方法があったんですね。
実行することができました。ありがとうございました。
172 :
デフォルトの名無しさん :2006/07/02(日) 15:55:53
Visual Studio2005を使ってWindowsのC++プログラム勉強中の初心者なので すが、ウインドウの右端にある「サーバーエクスプローラ」や「プロパティ」が表示 されている垂直のタブ(名前わからなくてスミマセン)を、どこかに移動する(また は消す)ということはできないでしょうか。 画面が狭いので、自動的に隠れる状態にして使ってるんですが、スクロール バーを動かそうとしてちょっとずれると出てきちゃうのです。 もし、環境はスレ違いでしたらごめんなさい。その際は誘導していただけると 助かります。
173 :
171 :2006/07/02(日) 16:11:18
教えていただいたようにgdi32.lib user32.lib advapi32.lib ole32.libの4つのライブラリをリンクすると プログラムを実行することができたのですが、 プロパティ→構成プロパティ→リンカ→入力 のところに実行するたびに入力しなおさないと消えてしまいます。 これって毎回入力するしかないのでしょうか。
未来からこにゃにゃちわ。
176 :
デフォルトの名無しさん :2006/07/02(日) 21:51:09
VC++2500すごそうだな… 一体どれだけの進化を果たしているんだろう。
178 :
デフォルトの名無しさん :2006/07/03(月) 02:09:33
こんにちは。 最近までC++Builderを使っていたのですが、Visual C++ 2005 Expressに 乗り換えることに決意し、試行錯誤しています。 自作ソフトにファイルのダンプをする機能を入れたいのですが、C++Builderでいう コンポーネント(ファイルダンプまたはバイナリエディター)はないでしょうか。 ご存じのかた、よろしくお願いします。
>>174 一応やったつもりだったのですがやり足らなかったところがあったようです。
おかげさまで毎回リンクする必要がなくなりました。
ありがとうございます。
リンクする必要がなくなったんではなくて、明示する必要がなくなっただけだろ。
すみません。初めてですが質問をさせていただきます。 映像(AVI)を読み込んで、その画像列などを表示するプログラムを作っています。 画像での表示はできているのですが、IEなど別のウィンドウに切り替えたとたんに、今まで表示されていた画像が消えてしまいます。 アクティブな部分(例えば映像再生中のピクチャ)は表示されるのですが、そうでない部分は表示が消えたままになります。 どのようなプログラム(命令?)を追加すれば解決できるのでしょうか? 環境はVisual C++ 6.0です。 よろしくお願いします。
動画の隠れた部分は更新されない。 隠れた部分が表にでたら更新が必要 やりかたは普通のウインドウの更新と同じ
更新が必要だったのですね。 解決しました。 ありがとうございました。
VC6で、簡単にライブラリプロジェクトに追加されているヘッダファイルの格納ディレクトリを変更する方法があったら教えてください。 エクスプローラでファイルを移動しただけだとリンクエラーになる 移動したいヘッダファイルをプロジェクトから一旦削除して、 移動した後のファイルをプロジェクトに追加するしかないん?
プロジェクト(P)>設定でプロジェクトの設定ダイアログを開き、 C++のタブでカテゴリのダイアログボックスからプリプロセッサを選択。 インクルードファイルのパス(N)にパスを書けばOK。 (相対でも絶対でも可) 追加ライブラリ本体のパスは同じくプロジェクトの設定ダイアログの リンクのタブでカテゴリのダイアログボックスからインプットを選択。 追加ライブラリのパス(D)にパスを書く。
VC++.NETで開発している初心者です。 フォームを作成してForm1.hというファイルができあがり、そのファイル中にコードを記述しているのですが、 ネットや、この掲示板、参考書を見るかぎり、やってること(書いてる場所)が全く違う気がして疑問に思っているのですが、 VC++.NETで開発する際、実際にコードを打つファイルはForm1.hではなく、別の.cppファイルを作成して それをForm1.h側から参照するようにするのが普通なのでしょうか?
マニュアルやMSDN読んでない奴ばっかりだな
189 :
デフォルトの名無しさん :2006/07/09(日) 00:48:47
.NETでStartTimerボタンをクリックするとタイマーを作って一秒ごとにNowの値を増やそうとしているんですが、 error C3867: 'Project::Form1::OnTimedEvent': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&Project::Form1::OnTimedEvent' を使用してください 'System::Timers::ElapsedEventHandler' : delegate コンストラクタには 2 つの引数が必要です この二つのエラーがでます。 MSDNのサンプルを真似たはずなんですけど何処が悪いんでしょうか? private: System::Void StartTimer_Click(System::Object^ sender, System::EventArgs^ e) { System::Timers::Timer^ aTimer = gcnew System::Timers::Timer; aTimer->Elapsed += gcnew ElapsedEventHandler(this->OnTimedEvent); aTimer->Interval = 1000; aTimer->AutoReset = true; aTimer->Enabled = true; } private: void OnTimedEvent(Object^ source, ElapsedEventArgs^ e ) { Now += 1; throw(gcnew System::NotImplementedException); }
WinHttpを使ってテキストファイルをGETするところまで組んだんですが このファイルがShift-JISなんでUnicodeに変換しないと行けません。 どうやってやればよいのですか?
Shift-JIS Unicode 変換でググるとあら不思議
192 :
190 :2006/07/09(日) 20:50:38
orz 今、自分で書き込んだキーワード入れたら出てきたんだな・・・ 30分以上ぐぐったのに・・・
申し訳ないんですけどどなたか
>>189 お願します。
汚くて見る気しないよ
>>189 まとめてみました。
error C3867: 'Project::Form1::OnTimedEvent': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&Project::Form1::OnTimedEvent' を使用してください
'System::Timers::ElapsedEventHandler' : delegate コンストラクタには 2 つの引数が必要です
この二つのエラーが
System::Timers::Timer^ aTimer = gcnew System::Timers::Timer;
aTimer->Elapsed += gcnew ElapsedEventHandler(this->OnTimedEvent); ←ここ
この部分で発生します。どう直せばいいのでしょうか?
C++/CLIは知らんからパス。 つーか、何故初心者がC++/CLIに?
>>195 gcnew ElapsedEventHandler(this, &ほげ::OnTimedEvent)だと思う。
ほげにはthisのクラス名を当てはめろ。
久々にVisual C++に戻ってきたんだけど、 ソースとヘッダにコード書くのめんどい。 プリコンパイルヘッダもあるし、全部ヘッダに書いても、 そんなコンパイル重くならない気がするんだけど、どうなのかな。
ほとんどヘッダに書いてしまってるのは見たことあるけど ヘッダのみは見たことないな ソースがないとコンパイルできないだろ
200 :
デフォルトの名無しさん :2006/07/10(月) 15:47:07
VisualC++と普通のC++の違いって何ですか?
>>200 Visual C++はMicrosoftが作ったC++処理系とIDEその他の製品名。
標準C++との相違点を聞いているのかもしれないぞ
>>200 C++にはWin32APIとかMFCとかいう単語は出てこない(使いコトはできる)
標準C++で書いたソースなら、ほぼコンパイル通るよ
「ほぼ」ってところがいやらしいよね。
Windows環境ではVCが標準と思っておけば間違いない。 標準C++のみじゃほとんど何の役にも立たない。
>>206 あんたにとって、「役に立つ」とはGUIの派手なアプリ限定なのか?
例えば数値シミュレーションやパズルの解析、ファイル処理などは想像もつかないのかな?
>>207 お前は道具は使い分けることも知らない馬鹿ですか
数値シミュレーションやるならCPUの能力を使うことを考えないとな
210 :
デフォルトの名無しさん :2006/07/11(火) 10:39:06
Visual C++ 2005ってコードスニペット機能がついていませんよね。 アドインか何かで似たような機能を実現してくれるものってないでしょうか。
>>211 , イ)ィ -─ ──- 、ミヽ
ノ /,.-‐'"´ `ヾj ii / Λ
,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
ノ/,/ミ三ニヲ´ ゙、ノi!
{V /ミ三二,イ , /, ,\ Yソ
レ'/三二彡イ .:ィこラ ;:こラ j{
V;;;::. ;ヲヾ!V ー '′ i ー ' ソ
Vニミ( 入 、 r j ,′
ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ
ヽ ヽ -''ニニ‐ /
| `、 ⌒ ,/
| >┻━┻'r‐'´
ヽ_ |
ヽ _ _ 」
ググレカス [ Gugurecus ]
( 2006 〜 没年不明 )
213 :
211 :2006/07/11(火) 18:59:41
補足です。 コンソールプログラムで十分です。(むしろその方がいい)
214 :
211 :2006/07/11(火) 19:14:50
補足です。 コンソールプログラムで十分です。(というよりそのほうがいい)
215 :
211 :2006/07/11(火) 19:16:48
補足です。 自己解決しました。
家のVCでは中括弧}を書くとそれに対応した中括弧{が太字になってくれるのですが、 学校のVC6では太くなってくれません。 どこかで設定すればいいのでしょうか?それともこのバージョンでは不可能なのでしょうか?
不可能
そうですか・・・ありがとうございました
ビルドしてできたアプリケーションに、 自作のアイコンを使いたいのですが、設定の仕方が分かりません。 ソリューションに、既存の項目追加で、アイコンを追加するところまではできたのですが、 そのアイコンをどうやってアプリケーションのアイコンにするのかが分かりません。 使用しているのは、VisualC++.net standard 2003 です。 よろしくお願いします。
元のアイコンを置き換えるんじゃだめなのか?
221 :
219 :2006/07/15(土) 09:04:58
>>220 KH IconRewrite98というツールで書き換えようと思ったら、
exeファイルが、「対応していない形式です」というエラーが出て書き換えできませんでした。
が、いろいろいじくっているうちになんとか自作のアイコンを使う事ができました。
既存の項目追加ではなく、リソースとして追加する事で解決しました。
>>219 リソースエディタで.rcファイルを書き換えないとだめなんじゃないかな。
俺はVC++2005 Express Editionだからリソースエディタないけど、
中身は普通のテキストファイルだから、覗けば一目瞭然だと思うよ。
プロジェクトの中のアイコンファイルを置き換えてビルドするだけだろ
VAIO MXの前面コントローラのイベントを取得したい・・・なんて悩みはどこで聞けば分かりますかね。 Googleじゃ|ι´Д`|っ < もうだめぽ
225 :
219 :2006/07/16(日) 17:42:56
すみません、つづけて質問させてください。
作成したアプリケーションを実行した時、
タイトルバーの左端にある小さいアイコンを、
自作のアイコンに変更したいのですが、どうすればいいでしょうか?
とりあえず16*16の小さいアイコンを用意し、リソースに組み込んだのですが、
タイトルバーの小さいアイコンに設定する方法がわかりません。
>>223 プロジェクトの中に元々アイコンのリソースが入っておらず、
今までは、ウインドウズ標準の実行ファイルのアイコン(白い四角いアイコンです)が表示されていました。
現在タイトルバーのアイコンも、この標準のアイコンが表示されています。
ウィザードで作ればアイコンも入るよ。 ウィザード使ってないんだと、どんなプログラムか想像つかないから答えようがない。
227 :
224 :2006/07/18(火) 01:50:51
自己解決しました。 コントローラを管理してるサービスプログラム(MxLCDLib.exe)が C#の参照で読み込めました。 4年半前買ったパソコンなのに・・・.NET思考の恩恵かな? ありあとーございました
VCって例外のfinallyブロック使えないの?(´・ω・`) 定義されてないとかエラーになるんですけど。
C++のEHにfinallyなんてないしSEHは__finallyだカス
おおう、finallyなかったんだな・・・ __try, __finally使ったら、 warning C4509: 非標準の拡張機能が使用されています : 'Hoge::Test2' は SEH と デストラクタ を含む 'str1' 使われています。 error C2712: オブジェクト アンワインディングが必要な関数内で __try を使用できません。 とか言われるし・・・
>>230 エラーメッセージのとおり。
1つの関数内でC++ EHとSEHは共存できない。(できてもおかしくは無いとは思うけど)
ここで言うC++ EHには自動変数のデストラクタも含まれる。
その割には/EHa使うと構造化例外が起きたときに
自動変数のデストラクタが呼ばれるのはなんか変な感じだが。
やっぱりC++ではデストラクタを使うのが一番だよ。
232 :
デフォルトの名無しさん :2006/07/19(水) 19:41:26
あるプロジェクトの出力 a.lib と、 別のプロジェクトの出力 b.lib に含まれるオブジェクトを 全部まとめて c.lib にすることは出来ますか? コンパイルオプションは全く同一にそろえています。
233 :
デフォルトの名無しさん :2006/07/19(水) 19:59:06
他のプロジェクトの出力を参照しつつ、 void stub(void){} みたいなダミーのコードとリンクしたら 全部一体になった lib 吐けました。
234 :
デフォルトの名無しさん :2006/07/19(水) 22:46:36
質問の意味がわからないかもしれないけど、 EOF << 文字列 >> ↑こんなんありましたよね?たしかPHPじゃあったはず。 コレなんて言うんすか?
ヒアドキュメント
236 :
234 :2006/07/19(水) 22:55:10
237 :
234 :2006/07/19(水) 23:00:48
あ、でもC++にヒアドキュメントないみたいっすね。 大量の文章を扱う時に楽な方法ってありますか?
リソース
String Table
VC++6.0を使っているものです、質問させてください。
ttp://www.vector.co.jp/soft/win95/prog/se251850.html 上のアドレスから落とせる、
amediousというプログラムをVC++で動かしたいのですが、
amediousに付いてくるhtmの説明を見てもよく分かりませんでした。
プロジェクトにソースファイルを追加するところまでは出来たのですが
追加してビルドすると、
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/unit00.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
というエラーが出てしまいます。
さらに、その先の「2、準備」からの説明も良く分からなくて・・・。
当方超ド初心者のため、
初心者にも分かりやすく使い方を教えてくださると嬉しいです。
どうか、よろしくお願いします。
ライブラリだからそれだけじゃ何の意味もないよ
拡張子ぬいてファイル名だけを取り出したり ディレクトリをぬいてファイル名だけを取り出したりするような 便利ユーティリティの詰まったライブラリってないのかな。
,、‐ ''"  ̄ ``'' ‐- 、 /イハ/レ:::/V\∧ド\ /::^'´::::::::::::i、::::::::::::::::::::::::::::\ ‐'7::::::::::::::::::::::::ハ:ハ::|ヽ:::;、::::::::::::丶 /::::::::::::::/!i::/|/ ! ヾ リハ:|;!、:::::::l /´7::::::::::〃|!/_,,、 ''"゛_^`''`‐ly:::ト /|;ィ:::::N,、‐'゛_,,.\ ´''""'ヽ !;K ! |ハト〈 ,r''"゛ , リイ)| `y't ヽ' // ! ぃ、 、;:==ヲ 〃 作ればいいと思うよ。 `'' へ、 ` ‐ '゜ .イ `i;、 / l 〉 ` ‐ ´ l`ヽ / ! レ' ヽ_ _,、‐7 i| i´ l `' ‐ 、_ ,、-‐''"´ ノ,、-、 / 、,_ ,.、- {,ヘ '、_ `ヽ、_ / i ,、イ ∨ l.j__,,、..-‐::-:;」,ハ、 '、` ‐、_ ,`ヽ / l ,、‐'´ // ',/!:::::::::;、--ァ' / `` ‐ `'7゛ ', / l i ´ く ';::::::l / / / ', / ! l \ ';:::l , ' / i/ ',
VC使いこなせてないやつが多いな
245 :
デフォルトの名無しさん :2006/07/20(木) 21:44:38
なぜ boost とかつかわないのかわからん。
o-o、 ('A`) メガネメガネ ノ ノ)_
なぜそこで boost がでてくるのかわからん。
248 :
デフォルトの名無しさん :2006/07/20(木) 22:25:50
>>247 boost::filesystem とかでパスいじれるから。
アホ? 特に理由がない限りWindowsネイティブなものを直接使うだろ
250 :
242 :2006/07/20(木) 22:36:23
>>248 あ、boostにそんなのあったんだ。
boost::pathとかまさに.NETのPathクラスみたいな機能あるね。
ちなみにATL/WTLでActiveXのプログラム書いてるんだけど、
文字列ってCStringかstd::wstringどっちを汎用的に使う方が良いかなぁ。
つ shlwapi
>>249 242の要求は251の言うとおりshlwapiで満たされるだろうが、
shlwapiはIE4以上が必要。これはshlwapiを使わない・使いたくない理由としては十分だと思う。
そもそもVC使う必要ないのでは?
そもそもVCスレで質問した意味がないのでは?
ActiveXにIEは必要ないの?
256 :
デフォルトの名無しさん :2006/07/21(金) 02:21:48
HPを読み込んで内容を検索しようと思ったのですが、InternetOpen、InternetOpenUrl、InternetReadFileの順序でコードを書いたのですが、InternetReadFileを何回呼び出しても、最初の部分しか取得できない状態です。 どのサンプルをみてもInternetReadFileを数回読み込むだけで全部取得できているのですが、どこが悪いのかわかりません。
どこも悪くない、trueが返るか読み込みサイズが0になるまで繰り返し呼ぶべし。
質問です。XP、.NET 2005 です。 デバッグのステップ実行時、ステップインで、特定のファイルには入らないという指定はできないでしょうか? 例えば、Func(_T("hoge"), _T("hogehoge")): という処理があったとして、 Func に入るためには、二度も _T() に入る必要があり、手間がかかります。 よろしくお願いします。
Win32apiの中には入れないからやろうと思えばできるね
SJISファイルを1行づつ読んでUnicode変換してwstringに入れようとしています。 楽なのはfopen&fgetsで1行づつ読むたびに、 MultiByteToWideChar() で変換かなと思ってます。 ただ、ファイル名もwstringで受け取るようになっているので fopenへ渡すときにどうすべきか悩んでます。 wstringをSJISに変換して渡さないといけないのでしょうか? その場合、日本語ファイル名や空白の入ったファイル名もちゃんと読めるのか不安です。
>>260 Visual C++には_wfopenという関数がある。
また、fgetwsを使えば直にwchar_tのワイド文字列として読み込める。
(読み込むときにマルチバイト文字列からワイド文字列へ変換される)
がしかし、wstringに入れるんだったら、std::wifstreamとstd::getlineで決まりだろ。
wifstreamのコンストラクタとopenにもVC++独自にワイド文字列を引数のとるものが多重定義されている。
それが嫌なら自分でワイド文字列を受け取るストリームバッファ・ストリームクラスを作れば無問題。
但し激しく面倒という諸刃の剣。素人にはお勧めできない。
C/C++でワイド文字を扱うときにはlocaleの設定をお忘れなく。
262 :
260 :2006/07/23(日) 23:10:00
どうもです、さっそくためしたんですがgetlineで日本語化けます。 setlocale(LC_ALL, "Japanese_Japan.20932"); stream.open(path.c_str()); stream.getline(buffer, 1024); とかやってるんですが、日本語は化けますね・・・
263 :
260 :2006/07/23(日) 23:14:44
あ、setlocale("japanese")の間違いです。
C の locale いじってどうすんだよカス
>>262 C++のはC++のlocaleを設定する必要がある。
<locale>をインクルードして、std::locale::global(std::locale(""));
localeの文字列を空にするとデフォルトの設定になる。
ようするにWindowsの言語とか使用者が設定した言語とかになるので、
特に必要がなければ空にするのが個人的なお勧め。
ついでに言うとstd::locale::globalを呼ぶと、内部でstd::setlocaleも呼ばれる。
266 :
260 :2006/07/24(月) 07:07:58
それもやったけど駄目でしたね。 ちなみにifstreamでも引数にwchat_tのpathを受け取るオーバーロードがありました 。 なんでifstreamでgetlineして、MultiByteToWideCharするようにしました。
>>262 待て、なんでstream.getlineなんだ。
メンバ関数でないほうのgetlineはstringを引数に取るぞ。
自己解決したみたいだからほっといてやれよ
269 :
240 :2006/07/25(火) 16:53:36
そうですか、わかりました。 微妙にスレ違いでした、ごめんなさい。 ありがとうございました、失礼します。
本当にくだらないことで恐縮なんですが…… VC++6.0で、メンバの自動表示が上手く機能しません。 ほとんどは何も表示されず、たまーに運が良いと表示される程度です。 プロジェクトの設定からブラウザ情報の生成にもチェックを 入れてみましたが、相変わらずです……。 どなたか解決策をご存知でしょうか?
いい加減6.0は捨てる
捨てる必要はないけど、いまだに6.0初心者がいるのが不思議
2005EEが無料なのが伝わってないのか 会社がVC6.0しか使わせてくれないのか
2005は糞重いから必要もないのに乗り換えるのは馬鹿 今から始めるなら2005だろうけど
270です。 未だに6.0なのは、C++とWin32APIの勉強がしたいからでして…… .NET以降はManagedになったり/CLIになったりでよく分からないですし 重いそうなので敬遠していました。 やっぱり2005EEに移った方が良いでしょうか?
2005EEでもただのC++プログラミングとただのWin32 APIプログラミングは問題なくできる。
277 :
デフォルトの名無しさん :2006/07/26(水) 18:46:21
VC6のprintfでLFのみ出力するにはどうしたらいいですか? \nだとCR+LFになってしまいます。
\v じゃなかった貝?
printf("LF");
マジレスすると、バイナリモードでオープンしなおせば宜しい。
281 :
277 :2006/07/26(水) 22:21:10
\vはダメでした。 バイナリモードで再オープン以外で無いでしょうか? %cを使わずに printf("\0x0a"); みたいな書式できたらいいんですが、、、 (これではダメでした)
printf("%c",0x0a)
>>282 釣り乙。
>>281 printf()のレベルではなく、その先のレベルで'\r'が補われるのだからそれがputchar()になってもやっぱり無理。
おまいら・・・
285 :
デフォルトの名無しさん :2006/07/27(木) 05:57:20
Visual Studio 6.0ですがインターネットやってるときの、エラーがひとつでもあろうものなら「デバッグしますか?」がうざくてしょうがないです。 どうすればこれを無効化出来ますか?
>>285 インターネットオプションの詳細設定のブラウズの
スクリプトエラーごとに通知を表示するをオフにし、
スクリプトのデバッグを使用しないをオンにする。
たぶんこれででなくなると思う。
RichEditの文字色の変え方を教えてください・・・ 背景色はSetBackgroundColorで変わるんですが。
288 :
デフォルトの名無しさん :2006/07/27(木) 15:27:05
>>210 氏の質問に答えられる人います?
私も知りたい。
210 名前:デフォルトの名無しさん[] 投稿日:2006/07/11(火) 10:39:06
Visual C++ 2005ってコードスニペット機能がついていませんよね。
アドインか何かで似たような機能を実現してくれるものってないでしょうか。
289 :
デフォルトの名無しさん :2006/07/27(木) 19:27:39
#include <clx.h> #include <iostream> #include <cstdlib> #include <memory> #include <vector> #pragma hdrstop //指定したパスに存在するファイル名/ディレクトリ名をすべて出力する。 #pragma argsused using namespace std; int main(int argc, char* argv[]) { if(argc!=3){ cerr<<"USAGE AllDirFileNames.exe TargetName mode(f|d|ft|dt)"<<endl; //system("PAUSE"); return -1; } //argv[1]で指定されたパス以下のファイル名のリストを作成 TSearchRec sr; std::auto_ptr<TStringList> sl(new TStringList()); AnsiString dot("."); AnsiString dotdot(".."); つづく
290 :
デフォルトの名無しさん :2006/07/27(木) 19:28:56
//モードの判定 bool file,directory,target; file=directory=target=false; if(!strcmp(argv[2],"f")) { file=true;} else if(!strcmp(argv[2],"d")) { directory=true;} else if(!strcmp(argv[2],"ft")) { file=target=true;} else if(!strcmp(argv[2],"dt")) { directory=target=true;} //対象ファイルを取得 vector<AnsiString> targetNames; char buf[256]; if(!target){ targetNames.push_back(AnsiString(argv[1])); } else{ FILE* fp=fopen(argv[1],"r"); if(fp==NULL){ cerr<<"Can't open file "<<argv[1]<<endl; return -1; } while(fscanf(fp,"%s",buf)!=EOF){ targetNames.push_back(AnsiString(buf)); } } つづく
291 :
デフォルトの名無しさん :2006/07/27(木) 19:32:33
for(size_t i=0;i<targetNames.size();++i){ if(file){ //fileを探す if(!FindFirst(targetNames[i]+"/*",faAnyFile,sr)){ do{ if(sr.Attr!= faDirectory&& sr.Name!=dot && sr.Name!=dotdot) sl->Add(sr.Name); } while (FindNext(sr) == 0); FindClose(sr); } } else if(directory){ //directoryを探す if(!FindFirst(targetNames[i]+"/*",faDirectory,sr)){ do{ if(sr.Attr==faDirectory) if(sr.Name!=dot && sr.Name!=dotdot) sl->Add(sr.Name); } while (FindNext(sr) == 0); FindClose(sr); } } つづく
292 :
デフォルトの名無しさん :2006/07/27(木) 19:34:22
//リストの各要素は絶対パスに変換して出力する if(sl->Count==0){ cerr<<"not found"<<endl; continue; } for(int j=0;j<sl->Count;j++){ cout<<targetNames[i].c_str()<<"/"<<sl->Strings[j].c_str()<<endl; } sl->Clear(); } //system("PAUSE"); return 0; } ボーランドで組んだんですけどVCに移植するいい方法ありませんか?
いきなりなんのつもりだ?
clx.h が非互換っぽいが他はだいたいいけそうな気がするな。
295 :
デフォルトの名無しさん :2006/07/27(木) 20:11:47
>>286 さん
みごと直りました。THX SOOOOO MUCH!
296 :
デフォルトの名無しさん :2006/07/27(木) 23:12:48
>>294 そうなんです、clx.hでエラー出るんです
自分で探してみたんですけど無くて・・・
互換性のあるヘッダーファイルってありますか?
死ね
AnsiStirngはstd::stringにして、検索にはWindows API使えばいいだろ。
あれ? clxってborlandじゃなかったっけ?
…って、最後まで読んだらちゃんとボーランドで組んだって書いてあるなorz ごめんね。 お母さん三行しか読めないから、ごめんね。
301 :
デフォルトの名無しさん :2006/07/28(金) 00:49:49
TSearchRecも互換性無いと思うんですけどVCに似たような関数ありませんか? 質問ばっかりですいません
>>301 Windows APIのFindFirstFile 〜 FindNextFile 〜 FindCloseでいいと思うが。
VC++6でダイアログベースのアプリを作っています.
ダイアログにCStaticとCListBoxを配置して,CStaticのキャプションをファイル名(&F)の用に設定してALT+Fのアクセラレータを定義しています.
それで,ALT+Fをした時にCListBoxにフォーカスが移るようにしたいのですが,やり方を教えて頂けないでしょうか?
調べた事
・PreTranslateMessageでWM_KEYDOWNでメッセージを捕まえる方法
・リソースにアクセラレータを追加してOnInitDialogでLoadAccelerators読みこみ,PreTranslateMessageでTranslateAcceleratorを処理
・RegisterHotKey()でALT+Fを定義
CStaticの通知にチェック有り無しにしても駄目でした
参考アプリ
ttp://www.vector.co.jp/authors/VA000007/ これのRegDiffの ALT+1,ALT+2,ALT+3の様なイメージです.
宜しくお願いします.
setfocusじゃだめなんだろうか?
305 :
303 :2006/07/28(金) 16:40:00
>>304 ALT+Fを捕まえてSetFocusする方法というか手順が判らないのです.
ALT+FがCStaticに食べられてしまい親のCDialogに処理が来ない感じなのです.
306 :
デフォルトの名無しさん :2006/07/28(金) 18:14:03
.net2005 c++を使っていますが、 NPlotのようなグラフ描画のdllがあったら教えてください。 但し、MS-OFFICEが必要なものは除きます。
NPlotではいけない理由を述べよ。
308 :
デフォルトの名無しさん :2006/07/28(金) 18:25:43
C#ではうまく動作したのですが、c++ではエラーで正常に動きませんでした。 もし、c++でのNPlotの使用例などを紹介しているサイトがあればご紹介 いただけないでしょうか?
.NETじゃないってオチなんだろうなぁ。
簡易電卓(windowsアクセサリについてるような形式で四則演算、 符号付演算、浮動少数演算のみ行う形式)VC++でサンプルソース を探してます!どなたかお勧めのサイト教えていただけないで しょうか?ちなみに開発環境はVisual Stdio6.0です。
>>303 ダイアログに処理を食われたくない場合は、WM_GETDLGCODE の動作を乗っ取る・・・だったと思う。
ところで Alt + ??? は、WM_KEYDOWN じゃなくて WM_SYSKEYDOWN じゃなかったっけか
>>310 もうちょっと知りたいことを絞って。
ダイアログの作り方が知りたいのか、演算解析アルゴリズムが知りたいのか、など。
313 :
310 :2006/07/28(金) 21:24:47
>>312 ダイアログベースで作りEditbox、ボタン配置はできました。またEditboxに
、ボタンを押すと対応した数字が1桁だけ表示されるところまではいけたの
ですが、そのあと続けて複数桁表示する方法、数値入力処理、演算処理の
アルゴリズムを教えていただきたいです。
最初から全部説明しないと作れないレベルならあきらめた方がいいと思う。
>>313 普通に10キー入力をEditBoxに反映させるくらい簡単だから自力で頑張れ。
それができたらEditBoxをもう二個用意し、演算キーが押されたら片方に
演算子を、もう片方にもとのEditBoxのコピーを格納する。
ここまで準備ができたら=キーで演算してそれぞれのEditBoxにセットするだけだ。
#勿論、完成の暁には後からの二つのEditBoxを非表示すればいい。
317 :
310 :2006/07/29(土) 10:57:20
>>316 がんばってみます、ありがとうございました。
318 :
デフォルトの名無しさん :2006/07/29(土) 11:30:49 BE:138072593-2BP(105)
エディットボックスを16進固定の数値入力欄にして、 それをスピンボタンで16進で数値を変更できるようにしたいのですが、可能ですか?
wav等の音を鳴らす際に、音量を調整したいのですが 何か方法を教えて頂けると助かります。 あと効果音を複数鳴らしたいのですが、簡単に実現できる方法はありますか?
>318 可能です
321 :
デフォルトの名無しさん :2006/07/29(土) 15:27:30
可能だねぇ。標準の連動機能だけでは無理だけど。
つうかその程度の事できなくてどうするよ
ある文字列"abcde"があったとして、それをエディットボックスに 表示するときに一番後ろの文字(この場合e)だけ削除して表示する 方法教えてくれませんか?
>>324 char * str = "abcde";
size_t len = strlen(str);
char * p = new char[len - 1 + 1];
sprintf(p, "%.*s", len - 1, str);
// エディットボックスにpをセット
delete[] p;
326 :
324 :2006/07/30(日) 21:17:30
>>325 回答ありがとうございます。ちなみにCString型の"abcde"の場合の
方法もありますか?表示方法もSetWindowTextでしたいのですが。
>326 少しは自分で考えてみたら?文字列操作なんてもんは基本はどんな言語でも 同じなんだから。
328 :
324 :2006/07/30(日) 21:31:39
すみませんググりまくったのですがわからなかったので;
>328 ググるのはいいんだが、求めるものとまったく同じでなければわからないって 話でもあるまい?全ては応用問題だ。 とりあえず>325をCStringに書き直してみればいい。それで足りない要素がある のならそこだけを考えればいい。 あと、質問に答えたら即座に違う質問をするってのは、質問に答えてくれた >325に失礼なんだってこと。少しは間を置いたり、別の質問として分けるなどの 気遣いが欲しい。
330 :
324 :2006/07/30(日) 21:43:44
すみませんマナーがなってませんでした。自力でがんばってみます。
complex.hをインクルードして、複素数を扱いたいと思っています。 complex<double> x と書けば、実数部と虚数部がそれぞれdouble型として定義されますよね? その後、それぞれに任意の値を代入するために、どのようにして各部にアクセスすれば 良いのでしょうか? x.real、x.imagというようにしてもコンパイルエラーがでました。 ↓エラーの内容 「メンバー関数は呼び出すかそのアドレスをとらなければならない」
メンバー関数知らんの?
333 :
325 :2006/07/30(日) 23:08:35
>>331 complexのrealは参照を返す関数かconst参照を返すconst関数。
従って、値をセットするには前者を使ってx.real() = 3; x.imag() = 4;などとすればいい。
個別に値を取り出したい場合は後者を使ってprintf("%g, %g\n", x.real(), x.imag());だな。
>>329 >>325に失礼なんだってこと。
ま、別に気にしないけどね。
334 :
331 :2006/07/30(日) 23:16:30
>>333 ありがとうございます。
しかし、その書き方をしてみたところ、コンパイルで
「左辺値が必要」と言われてしまいました。
何がまずいんでしょうか?
335 :
デフォルトの名無しさん :2006/07/31(月) 08:02:04
俺も
>>2 と同じ状況になった。
何やっても解決しないんだけど何これ、MSのバグか?
再インストールしてもだめなんだろうか?
>>337 もったいぶらずに教えてくれよ。
ソースファイルの一つだけが急にブレークポイント指定できなくなって困ってるんだ。
デバッガの身になって考えてみろ いったいどこでブレークすればいいのか ソースには実行コードのアドレスなんて書いてないぞ
「元のバージョンと完全に一致するソースファイルを必要とする」のチェックを 外せば一応動くようには見えるが、これチェック外すのはまずいよな。 何とか元通りに動くようにしたいんだが。
>>339 でもプロジェクトのプロパティを最近変更したりしてないんだよ。
前からデバッグ情報吐くようにしてるしビルドの構成も変えてないし、
いろいろ触ったけど治らないんだ。
よくライブラリのヘッダをいじる馬鹿がいるから ライブラリのソースもいじるやつがいそうだな
一応タイムスタンプで検索掛けてみたけど流石にそれは無かったw
そういう時こそ某謹製のTOUCH.EXEですよ。BDS2006になっても ちゃんと入っているぞ。
TOUCHってタイムスタンプの更新するだけじゃないの? それに、Borlandは持ってないからなあ。 仕方ない、使える間はバージョンチャック外して誤魔化すしかないかな。
通報しますた
いやオプションのことだからw
>バージョンチャック それはさておき、全部リビルドすれば済む話なんじゃないか?
>>348 w
単なるリビルドだけじゃダメだった。
でも治ったので一応報告。
1.Release、Debugフォルダをフォルダごと削除して、インテリDB(*.ncb)も削除。
2.ツール>オプション>デバッグ>全般で「元のバージョンと完全に一致するソースファイルを必要とする」
のチェックを外してからブレークポイントを一箇所指定してDebug構成でリビルド、実行。
3.この時点でブレークポイントが有効になるのを確認して、再度1.の作業をする。
4.ツール>オプション>デバッグ>全般で「元のバージョンと完全に一致するソースファイルを必要とする」
のチェックを入れてからブレークポイントを一箇所指定してDebug構成でリビルド、実行。
これで治った。(他にも何かやったかもしれんけど覚えてる限り書いてみた)
>>2 もまだダメなら試してみて。
質問です unicodeにも対応したWindowsプログラムを作っています。 マクロでUNICODEを定義してTEXTマクロやlstr***関数や 文字列の型をTCHAR型を使ったりしています。 しばらくそれでやっていたのですが、WinMainを変えるのを忘れたと思い _tWinMain を使って第3引数をPTSTRにしたらリンクエラーが出たので 調べたらtchar.hを使えばいいみたいなので使うと そのエラーは消えたのですが、C2731が出てしまいます。 エラーはPSTRに戻せばなくなるのですが、せっかく_tWinMainを使っているのに 意味がわからないです。 試しに、tchar.hを使わないで直接自分で_tWinMainマクロを 作ってやると、PTSTRを使っても何も問題なく出来ました。 もちろんwWinMainと直接書いてやっても大丈夫です。 その場合リンクのエラーも出ません。 一応、tchar.hを見てみると_tWinMainを使ったときにwWinMainとWinMainが 選択出来るようにされているような気がするのですが なぜなのでしょう? ちなみに、使用しているのはTOOLKIT2003です。 よろしくお願いします。
お前は本当にtchar.hを見たのかと。 tchar.hはUNICODEじゃなくて、_UNICODEなんだけど。
>>351 申し訳ない…目が潰れてたようです。
確かにそう書かれてました。ありがとう
でも、webで解説してるところってそれに触れてないところが多いなぁ…
他のバージョンではまた違うのかな
気付いていないやつも多いと思う。 <tchar.h>を<windows.h>やその他Platform SDKのヘッダより 後にインクルードするとそんな悲劇は起こりにくい。 どこかのヘッダで、UNICODEが定義されているのに_UNICODEが定義されていないと それを定義したり、あるいはその逆を行ったりしているはずだから。
calloc()した領域をfree()で解放してるつもりが間違って deleteしてたんだけど、一見正常に動いていた。 delete文を削除するとしっかりメモリリーク起こすけど、 delete文があると正常動作する。 これは正しい結果なんでろうか? 本読んでもググってみても別物として説明されてるんだけど・・・
言語仕様上別物 たまたま動いてるのはおそらく 内部でfree()かそれに相当する処理を呼ぶような実装だからだと思う
>>355 サンクス、やっぱり別物なんだね。
free()に直しときます。
>356 俺なら質問する前に直しているだろうなぁ。
いや、もちろん先に直してるけどさw そのままdeleteを使わないって意味で書いただけだよ。 でもfree()が中で何やってるか判ると面白いんだけど 定義があるだけでソースは覗けないんだね。
>>358 お前プログラマに向いてないから、さっさとやめてしまえ
意味の無い煽りをするプログラマもいらんな
まあ夏だしあちこちに湧いてるな
>>360 意味の無い煽りか?
>>354 のような考え方をするプログラマなぞ、この世にいらんのだが。
>>358 デバッグモードにして、逆アセンブルの表示にしてステップ動作をすると
覗ける。但しアセンブラの知識が必要だけどな。
>>364 14:30に「www」か?ごくろーさん
休暇も取れずに今日もデスマですか、可哀相に。
だから煽るしか能が無いんだろうねwww
368 :
デフォルトの名無しさん :2006/08/13(日) 01:06:04
>>366 ,367
くだスレだ好きに居座っとけよ
www使いの低脳
369 :
デフォルトの名無しさん :2006/08/13(日) 01:59:17
違うよきっと本当はいい奴なんだよ ただちょっと激務で寝てなくて脳に毒がたまってるんだ
職場に毛布は基本ですか?
上げてまで余程悔しかったんだろうね ここで好きなだけ愚痴るといいと思うよ
#include<stdio.h> struct man{ char name[32]; int age; }; int main() { struct man student; strcpy(student.name,"山田太郎"); student.age=16; printf("生徒の名前は%sです\n",student.name); printf("年は%sです\n",student.age); return 0;} これどこか間違ってるところありますか? 本に書いてあったやつをそのまま写したつもりなんですが strcpy識別子は、引数依存の照合を使用しても見つかりません ってなります
>>372 つ[#include <string.h>]
あー、処でC++としてコンパイルしていないか?
混乱するといけないからCとしてコンパイルした方がいい気もするが。
もう一つ。二度目のprintf()のフォーマット指定に間違いがある。
実行時例外で落ちるね。
sは文字列るるるるるー
377 :
デフォルトの名無しさん :2006/08/17(木) 22:56:01
VC++2005って可変長配列とかいうの使えるの?
378 :
デフォルトの名無しさん :2006/08/17(木) 23:01:35
メモ帳って可変長配列とかいうの使えるの?
vectorなら。
380 :
377 :2006/08/17(木) 23:22:50
Standard Template Libraryとかいうの使わないと無理って事ですか? C(C99?)だけでは使えない?
C99には対応してないよ。 mallocaでも使っとけ。
2005とかたいそうな名前付けてる癖にC99未対応とは!!
VC++がC99対応しても、C言語(.c)でないと使えないとかいうオチがありそうだな。
当たり前じゃん。C99はCだ。
いや、gccとか(ry
VC++はVC++であって、VC/C++ではない、だからC99対応シネーヨ っていう話が開発チームあたりから出てた気がする
C99なんて糞
Cの仕様拡張はC++と同期を取ってもらいたい。
>>388 C++のTR1には、C99で拡張された標準ライブラリが含まれている。
C++がCに合わせるんじゃなくて CがC++に合わせた方がいい
393 :
デフォルトの名無しさん :2006/08/19(土) 00:19:44
.
デザインで作成したTextBoxのテキストに変数を入れたいのですが、 const char *text = "xxxxx"; this->textBox1->Text = text; と入力しても、System::Stringに変換できなくてエラーを吐きます。 どうしたら良いでしょうか。アドバイスお願いします。
>>394 TextBox1->Text = gcnew String(text);
C++/CLIはこちらのスレの方が適当かもしれん。
つ くだすれC++/CLI(初心者用)
>>394 C++/CLIならtextBox1->Text = gcnew System::String(text);
Managed C++ならgcnewをnewにすればよい。
397 :
394 :2006/08/19(土) 14:04:46
皆さんありがとうございました。無事出来ました。
398 :
391 :2006/08/19(土) 17:47:31
どなたか分かりませんでしょうか。
>>398 質問内容をまとめて、改めて質問しなおせ
>>399 説明不足ですみません。
使ってるライブラリの名称を入れるというのは、
コンパイルした実行可能ファイルに
使ってるライブラリの名称を埋め込むということです。
つdependency walker # コマンドラインで使える、似たようなツールある?
dumpbin?
依存するDLLがわかっても、どれが再配布が必要なのかの見分けがつかない罠
vs2005のvcでアプリを配布するときは、vcredist_x86.exeをインストールさせるのが一番楽。
MSDN ライブラリ > 開発ツールと言語 > Visual Studio ドキュメント > Visual C++ > 配置 > 再配布する DLL の決定
407 :
400 :2006/08/20(日) 00:03:09
まだ説明不足でしょうか。
>>407 よく分からないので、勘で書く。
あるEXE内に、使用するライブラリ名称の文字列が埋め込まれるかどうかという話であれば、
それがMS製かどうかにかかわらず埋め込まれる。
そうしないと、ロードできないので。
>>408 分かりにくかったですか、すみません。
その勘で合っています。回答ありがとうございました。
ぶっちゃけ文字列ならライブラリの作者の任意で何でも埋め込める。
411 :
409 :2006/08/20(日) 02:02:11
気になったのですが、実行可能ファイルに埋め込まれている Microsoft Visual C++ Runtime Library という文字列を消して配布するとライセンス違反になるらしいのですが、 本当でしょうか。
>>411 ライセンス関連はメーカーに聞いたほうがいいぞ。
> * 再頒布可能コードにおける著作権、商標または特許の表示を改変すること。
俺が、削除することはは改変に当たらないと思って、
問題ないと答えれば、間違ってたとき、困るのはお前だ。
っていうか消したい理由がわかんね
Visual C++ Express Edition をCDイメージからセットアップしました。 その使用許諾書には次のようにありました。(便宜上、下の文は適時改行を行っています。) 5. アクティベーション (ライセンス認証) の義務。 本ソフトウェアは、許可されていない使用を防止するため、 アクティベーションが必要な場合があります。 インストールの際に提示される手順でアクティベーションを実行しない場合、 本ソフトウェアが使用できなくなります。 本ソフトウェアのアクティベーションは、インターネットで行うことができます。 アクティベーションに際して、インターネットの通信料金が発生することがあります。 お客様がコンピュータのハードウェア構成を変更した場合や、 本ソフトウェアの設定を変更した場合には、 本ソフトウェアのアクティベーションを再度行う必要が生じることがあります。 本ソフトウェアは、アクティベーションが実行されるまで、 アクティベーションが必要なことをお知らせします。 検索して調べてみると、ハードウェア構成や設定を変更した時に、Web/ISOのどちらから インストールした場合でも、アクティベーションが必要になることはないと書かれていましたが これは事実でしょうか。
415 :
デフォルトの名無しさん :2006/08/20(日) 20:36:03
edwop
本の通りに 作成したアプリケーションの インストーラを作ろうとしているのですが、 setupのプロジェクトをビルドしている間に インストールの準備画面が出て、 1706エラー で 有効なソースが見つかりません。 という感じのことを言われてしまい setup.exeもできません。 1706 エラー などでぐぐって見ましたが 解決策を見つけることができませんでした。 どなたか、解決策をご教授ください。
417 :
デフォルトの名無しさん :2006/08/21(月) 16:15:25
visual c++を使っていて win32プロジェクトを開いてそのままビルドしようとしたら undefined keyword or key name: DS_MODALFRAME ってなりました 誰か助けてください
418 :
416 :2006/08/21(月) 18:42:44
早く答えてください。
はずれだったんじゃないかな
420 :
416 :2006/08/21(月) 18:46:36
すみません、自己解決しました。
421 :
417 :2006/08/21(月) 21:11:57
誰も分からないのか 使い物にならないオタクどもは死ね
422 :
417 :2006/08/21(月) 21:16:07
すみません、自己解決しました。
自己解決したとだけ言って去る奴は
後続のために解決法を書くくらいしろよ。
まあ
>>417 はネタっぽいが。
後続のためとか所詮は奇麗事
425 :
416 :2006/08/21(月) 23:05:37
>>420 いやいや、自己解決してません。
あなただれ?
きっと2chに慣れてない私への嫌がらせなんでしょう。
これでショックを受けてしまった私って
2chに書き込むべきではない??
426 :
425 :2006/08/21(月) 23:19:50
すいません、逆切れしました。
428 :
416 :2006/08/21(月) 23:21:50
>>425 あなたこそ誰ですか?
偽者を演じるのは止めてください。
本当に迷惑しています。
>>425 メンバ登録の、もっと親切なサイトに行ったら。
430 :
425 :2006/08/21(月) 23:28:13
>429 わかりました。ありがとうございました。
431 :
425 :2006/08/21(月) 23:32:44
偽者の>416がまるで私が粘着荒らしのようにしつこく書き込んでいるようです。 お騒がせして申し訳ありません。 最初の私の質問がきっと悪かったのですね。今度からはもう少し自分で努力を してから質問を書くようにします。 しばらく私はこのスレには書き込みません。今後出てくるのは私の偽者ですので 無視してください。
432 :
425 :2006/08/21(月) 23:37:49
ちょwwwwwwww
変な話だが本物は偽者を見習え。
434 :
417 :2006/08/22(火) 00:10:36
再インストールしたら?
>>434 俺もなったが、再インストールで直った。
format:c
maid sum c/c
439 :
417 :2006/08/22(火) 09:35:54
再インストールしても直らなかったんですが・・・
VC6のヘルプで1760を検索してみた 1706 16 System table '%.*s' was not created, because ad-hoc updates to system catalogs are not enabled.
インストールと設定の仕方見直せ
442 :
417 :2006/08/22(火) 10:15:28
もう少し具体的に教えていただけないでしょうか?
443 :
417 :2006/08/22(火) 10:16:44
自己解決しました。ありがとうございました。
444 :
417 :2006/08/22(火) 10:27:29
以上、名無しの提供でお送りしました
質問です。 Visual C++で作ったC++アプリケーションがその動作に .NET Framework2.0を要求するなんて事って、あるんでしょうか。 友達に作ったアプリを渡したら.NET Framework2.0を入れたら動いた、と言われました。 別にC++/CLIとか使っていないんですが・・・。 どなたか分かる方お願いします。VSのバージョンはVisual Studio 2005 Standard Editionです。
ソースは純粋なC++でもプロジェクトがmanagedだったんじゃないの?
>>447 いえ、ちゃんとWIN32コンソールアプリケーションにしました。
あと、プロジェクトの構成プロパティの「共通言語ランタイム サポート」も
「共通言語ランタイム サポートを使用しない」にしています。
MFCを使ったVC++プログラミングを始めたく、VisualStudio2005ACの 購入を検討しております。 今月まで学生で、来月から仕事始まるんですけど、いまアカデミックパック を買ったは良いが今後のサポート等が学生ではないから打ち切られる なんて事になったりはしないですか? また、購入したは良いがインストール時に学生証が必要になって、 卒業後はインストールが出来ないとかいう罠に陥ったりしないか心配です。
打ち切られるし、有効な学生証が必要。
>>448 ランタイムライブラリを動的リンクしているのはないだろうか。
.NET Framework 2.0にはVC++ 2005用のランタイムも含まれているので、
それをインストールして通常のC++アプリケーションが動くようになるということは十分考えられる。
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
454 :
デフォルトの名無しさん :2006/08/23(水) 03:22:30
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Visual C++ 2005 ExpressでPlatform SDKを使用せずに 他のライブラリを使用してネィティブな機械語コードの作成は可能ですか?
他のライブラリって?
457 :
455 :2006/08/23(水) 04:18:12
STLです。
458 :
デフォルトの名無しさん :2006/08/23(水) 04:21:22
可能です
>>451 >>452 ありがとうございます!
Dependency Walkerで調べたところ、
MSVCR80.DLL
MSVCP80.DLL
に依存しているみたいです。
「Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)」をインストールすると
二つのDLLなどを含むVC++アプリを実行するために必要なものがシステムに入るという
理解で良いのでしょうか。
あと、再配布可能ということは、これをパッケージをそのまま相手に渡してもかまわない
ということでしょうか。
460 :
デフォルトの名無しさん :2006/08/24(木) 02:54:52
VC++ 2005 ExpressでCの勉強してる最中で 初歩的質問ですが whileループで連続文字入力中にEOFで入力終了を検知させるのに Ctrl + Z を押しても無視されるのを使えるようにしたいんですが どうしたらいいでしょうか?
>>460 標準入力が^Zで閉じられるのを回避したいのなら、標準入力を諦めてその他の入力手段を使え。
MASM(ml.exe)を入手したいのですが、 .NET Framwork 2.0 SDKにMASMは付属しているでしょうか?
465 :
デフォルトの名無しさん :2006/08/24(木) 19:21:33
>>461 たとえば、
while ((ch = getchar()) != EOF) {
ch = toupper(ch);
putchar(ch);
}
において、Ctrl + Z(UNIXでは Ctrl + D )
でループを抜けると書籍にありますが
無視されるようです(Win2000使ってます)。
検索してみると
「Ctrl+Z」は「Undo」のショートカットキーになっているためか、
その後の printf() などの出力を打ち消してしまう
この現象はWindows9xとMeのDOS窓のバグのようです。
とあります。
eclipseというのではキーバインディングを変えるとか出てますが
ttps://bugs.eclipse.org/bugs/show_bug.cgi?id=34052
コンソールの先頭(リターンした直後)でCtrl+Zじゃないと、EOFにはならんぞ。 あと、chの型は?
467 :
デフォルトの名無しさん :2006/08/24(木) 22:21:47
>>466 int ch;
です。
Ctrl + C
だと強制終了みたいです
VC++ Express & PSDKの環境で開発していたアプリケーションの ソースコードを修正なしで、VC++ Professionalのunmanagedコードとして コンパイルすることって可能ですか?
>>465 それはEclipse内での話じゃないのか?
cmd.exeの話なら普通にCtrlZが使えるぞ。
470 :
デフォルトの名無しさん :2006/08/25(金) 23:52:45
>>2 >>335 「ブレークポイントは、現在の設定 ではヒットしません。ソースコードが元のバージョンと異なります。」
おれも今なって、なんとか解決した。
ビルドの設定とかは全く関係ない。
大体、突然発生したものだし。
問題は、ブレークポイントが設定できないCPPファイルのテキストコードがおかしくなってて
正常に読み込めなくなっているからだった。
このCPPファイルをバイナリエディタで読み込んで、全コードをコピーしようとしたら必ずエラーが発生した。
分割して何とか全コードをコピーしてみてみると、バイナリエディタに表示されたコードと異なって、
途中に00がたくさん出てくるコードになってた。
新規テキストドキュメントを作成して、CPPファイルをコピーしても同じだった。
で結局、オレの場合は、1行何百桁だか何千桁の行が1つあって、それを複数行にしたら直った。
一時的にテストで、大きな配列に1000個くらいのテキストデータを代入したものだったが、馬鹿だった。
他に、キャリッジリターンのコードが変で、「ブレークポイントは、現在の設定 ではヒットしません。
ソースコードが元のバージョンと異なります。」が出た人もいるようだ。
オレの場合はこれは関係なかった。
http://www.freeml.com/message/[email protected] /0000411
471 :
470 :2006/08/26(土) 00:10:49
335は解決してたんですね。 バイナリエディタでコピーがエラーになるのは、単にファイルがでかくなりすぎてたからでした・・・orz でも、長すぎた1行を50行に分割したら直ったのはホンマです。
>で結局、オレの場合は、1行何百桁だか何千桁の行が1つあって、それを複数行にしたら直った。 >一時的にテストで、大きな配列に1000個くらいのテキストデータを代入したものだったが、馬鹿だった。 いや、まあ、その、なんだ。 自分でもわかってるんだろうし、いいや。
イベントハンドラで追加した関数を、一番下から上の方にずらしていくつか作業したあと、その関数を全部削除したら 「ブレークポイントは、現在の設定 ではヒットしません。ソースコードが元のバージョンと異なります。」 がでた。 Ctrl+Zで削除した関数を復活させて/* */で囲んだら出なくなった。いらん関数が消せねー。 結局、VSのバグだな。
新規のノートパッド文書にthis app can breakと書き込んで保存して読み出すと読み出せなくなる ユニコード関連のバグと一緒かもな。
476 :
デフォルトの名無しさん :2006/08/27(日) 19:00:56
質問させてください VC6、SDK環境で開発してるのですが MFCのCMonthCalCtrlコントロールは SDKではなんと呼ばれているんでしょうか ダイアログ画面のツールチップでは月間予定表と表示されますが これでググってもCMonthCalCtrlや.NET そして関係なさそうな情報がいっぱいヒットしますorz
478 :
476 :2006/08/27(日) 19:09:55
>>477 ああ、それです!なんだか解決しそうな予感!
これからじっくり見てみます、ありがとうございました
480 :
デフォルトの名無しさん :2006/08/27(日) 20:15:24
くだらないこと聞きます すみません ソースを提出しろって言われた場合具体的に何を提出すればいいんですか? ○○○.cppってやつでいいんですか?
>>480 コンパイルが通るソースファイル群、一セットじゃね?
その○○○.cppだけでコンパイルが通ってモノが出来るなら、
それだけでいいと思われ。
482 :
425 :2006/08/27(日) 20:27:19
>480 出せと言った奴に聞け。条件によって異なる。
>ソースを提出しろって言われた場合 >480 は学生に10シュクダイ
484 :
476 :2006/08/27(日) 21:02:54
>>479 どもです!
最初質問したほうはこっちのほうなんですね
複数選択もできるみたいなのでじっくり見てきます
スケジュール管理ソフトを作ろうとしてたので助かりました!
今時の初心者に適した講座サイトってどこですか? VC++2005を使っているのですが サンプルが使えない所が多く困っています。
猫でもわかるで検索しなさい。
実はUnicode問題か何かで「使えない」と決め付けているだけだったりして。
>>475 その回答はProfessional→Expressの時の話だから的外れ。
確かにPro→Expの場合はMFCとか使わないならいけるけど。
まあ、Exp→Proの場合も何の修正なしにでもいけるだろう。
489 :
デフォルトの名無しさん :2006/08/28(月) 15:55:23
Visual Stadio6.0を一度アンインストールして、再度インストールしなおして、 Visual C++を立ち上げようとしたら、 『プライマリプラットフォームがありません。 ビルドシステムは使えません。セットアップがインストールしたアドオンプラットフォーム(.PKG)のロードに失敗した可能性があります。』 ってメッセージが出て、起動できないのですが、 どうすれば直るか、ご存知の方、いらっしゃいませんか? もう4,5回アンインストール、インストールを繰り返していますが、 うまくいきません。 ご存知の方いらっしゃいましたら、お助けください
490 :
489 :2006/08/28(月) 15:56:35
失礼 ミスった Visual Stadio6.0→Visual Studio6.0
491 :
476 :2006/08/28(月) 22:41:12
再び質問させてください VC6、SDK環境です MFCのクラスや<time.h>以外で よく使われてそうな日付を扱うクラスってありますか?
493 :
476 :2006/08/29(火) 00:46:14
>>492 早速見てきました、さんきゅーです!
SYSTEM構造体を使って目的のコードが書けそうです、助かりました
>>475 、
>>488 レスありがとうございます。
ProfessionalとExpressは、MFC等を除いて
基本的にどちらも同じプログラムで良いということですか?
495 :
デフォルトの名無しさん :2006/08/30(水) 03:50:17
WriteFile関数でシリアライズするのって可能ですか?
496 :
デフォルトの名無しさん :2006/08/30(水) 09:33:08
DLLファイルがあって、その中の人の関数コールはどうやれば良いでしょうか?
LoadLibraryから GetProcAddressとか。
度々すみません、DLLの中の関数を見る方法を教えて頂けないでしょうか? GetProcAddressの引数に関数名が要りますし、先にDLLの中を確認できれば安心して開発できそうでつ。
Dependency Walker
サンクス
>>500 真ん中のペインに関数が見れます田。これは便利なツールでつね。
M$CでWinソフトを作ってたときから今日まで知りませんでした。
502 :
デフォルトの名無しさん :2006/08/30(水) 10:48:27
>error C2537: 'Fortran' : リンケージ指定子は使用できません。 これってどういう意味なんでしょう?
Fortranリンケージ指定子はサポートされてないよ。
>Fortranリンケージ指定子 これって何者で、 >サポートされてないよ。 どのコンパイラが対応してるんでしょ?
マルチスレッドDLLでコンパイルしています シングルにはわけあって出来ません クラス内からスレッドを作る時にクラスのポインタを渡しています スレッド内からポインタを参照してメンバ変数にアクセスすると未設定値が帰ってきます 値は設定済みです このクラスは複数実行されるのでグローバル変数は使えません メンバ変数は数値や配列やクラスなどいろいろあります このメンバ変数に設定された値を正常に取得するにはどうしたらいいのでしょうか?
なんで状況説明できないやつに限って問題が再現する最小限のコードを貼らないのだろう。
MFCだとできた
>>506 再現する最小のコードにする過程で問題が解決するか、そもそもその能力がないから。
509 :
デフォルトの名無しさん :2006/08/30(水) 15:08:16
VC2005expressで作ったexeファイル(CLR/Windowフォーム)を 配布するには、どーすりゃいいんですか? 2005expressが入っていないマシンで動かしてもらったら、動かないといわれたんですが
LoadLibraryした瞬間に、 >Salford run-time library >Stack Overflow: Re-link program with bigger stack value. >(stack:reserve,commit) >.Wll attempt to trace back エラーが出ます。 少しずつアプリのStack Sizeを大きくしましたが現象は同じで、 0x2,000,000でアプリが起動しなくなりました。 どうしたら良いでつか?
>>509 CLR使ってるなら.NET Frameworkの再配布モジュールを入れさせる。
ATLやMFCなども使ってたら別にvcregist_x86も必要。
どっちもMSのサイトからダウンロードできる。
もしDEBUGビルドを渡してるならReleaseで作り直せ。
>>510 ところでそのDLLにインポートライブラリは付いてないのか?
付いてるならそれを使ったほうがいいぞ。
513 :
510 :2006/08/30(水) 15:32:14
付いてないです。 確か、DLLからインポートライブラリ作れるんですよね?
514 :
デフォルトの名無しさん :2006/08/30(水) 17:57:11
>>494 多分大丈夫だと思うよ。
試したことないんで、試したことのある人は報告でも頼む。
ダイアログボックスの中にボタン等を配置する方法はわかったのですが、メインウィンドウの中にボタンを配置させたりはできないのでしょうか? 色々調べてみてもダイアログに関することしか載ってないのですが、こういう場合はウィンドウを作らずにダイアログボックスをメインウィンドウの代わりにする・・・様な方法を使うしかないんでしょうか?
>>516 どんなことでもできるよ
いろいろやり方が違うだけ
スプリッターにはめこむのと、上の乗せるだけでもやり方が違う
>>516 基本を覚えとくと理解しやすいので教えときますと
フレームクラスは外枠のみだと思ってください
外枠にはなにも乗せられません
この外枠にはめこまれてるのがウィンドウクラスです
ウィンドウクラスはすべての部品クラスの原型です
ダイアログもボタンもすべてウィンドウクラスです
例えば外枠にダイアログをはめ込むなんてこともできます
つまりはめ込ませた先のウィンドウクラスにならボタンを貼り付けることができます
>>516 ReBar で検索してミソ。
やりたいことによってはReBarでいけるかもしれん。
>>519 フレームクラスもウインドウですよ
上にViewが乗っかってる場合が多いけど
>>521 だれも内部的な話はしてなねーよ
概念の話してんだよ
VC6.0がクラスや構造体の補完機能やコンパイル時に 頻繁に固まるようになってしまっていい加減ぶち切れ気味なので、 OS入れなおしついでにVS2005買って入れようかと思います。 C++/CLIとか新しいのがあるみたいですが、 C/C++とWin32APIの勉強しかしてなくて、ついでに.NET Frameworkを 配布先のPCに要求するのも嫌なので、入れなくてすむようにしたいと思うのですが、 GUI構築の機能はなにやら便利そうなので使ってみたいんですけど、 .NET Framework無しでも利用できる手段ってありますか?
>>523 先ずはExpressEditionをダウンロードして試してみたら?
で、2005EEスレに行けばデザインツールも紹介されていたと思う。
526 :
デフォルトの名無しさん :2006/09/03(日) 15:50:24
DirectXの読み方ってダイレクトエックスであってますか?
俺もそう読んでいる。
ダイレクトクズ
skypeにhookしてskypeの会話音声データを録音ってできないものかな
質問です。 1. スケルトンを生成(Win32 アプリケーション)。 2. F5。 3. ウィンドウが出てこない。 4. デバッグメニューからデバッグ停止。 5. 「デタッチできません」とか言われてとりあえずデバッガは止まる。 6. タスクマネージャからプロセスを殺す。 7. タスクマネージャがフリーズ。 上記の手順3番目以降、シャットダウン、再起動不能。 電源落とすしか・・・ という現象に陥ってます。 解決法を教えてください。 ちなみに、MFCアプリケーションで 生成したスケルトンでも同様の現象になります。 OS win2k VisualStudio .NET 2003
win2kからクリーンインストール
やっぱそうか・・・面倒だ
534 :
デフォルトの名無しさん :2006/09/07(木) 21:35:24
Express から Standard にバージョンアップって可能ですか?
535 :
デフォルトの名無しさん :2006/09/08(金) 06:21:44
c++の資格って何かありますか?
やる気
アップグレード版の話だろうか?
538 :
デフォルトの名無しさん :2006/09/08(金) 08:57:05
C言語とJAVAの資格はよく聞くけど確かにC++の資格ってぴんとこない。 つか、存在するの?
働くのに資格がいるわけじゃないから ただの検定試験だろ 実社会では何の意味も持たないよ
CListCtrlで、タイトル部と行で、左右配置を変えることは出来るでしょうか? 下記のようにタイトル部を中央配置にして、データ部を左配置にしたいのですが。 | (タイトル) | |データ1 | |データ2 | |データ3 | |_______|
かつてhogeとして作ったプロジェクトを名前を変えてmogeというプロジェクトにしたいのですが hogeを構成するcppファイルやヘッダファイル内部のすべてのhogeをmogeに置換して (cppファイルやヘッダファイルの)ファイル名も それらが入ってるフォルダ名もhogeが使われているものはすべてmogeにしたのですが 生成されるexeはhoge.exeのままです。 どうやったら完全にhogeプロジェクトをmogeプロジェクトに生まれ変わらせられるのですか?
独学でVC++をやってるんだけど メニューからダイアログを呼び出すプログラムを作ってるんだけど。 「猫でもできる」を参考にしたらできるけど、 .NETで自動生成された骨組を使って作ったら表示されません。 なにかサンプル載ってるサイトとかないかな?
543 :
素人 :2006/09/08(金) 18:13:25
Visual C++ 2005 Express Editionで、 ソリューションエクスプローラから[リソースファイル]-[○○○.ico]を ダブルクリックすると、イメージエディタに○○○.icoが表示されようですが、 ペイントで表示されてしまいます。 ちなみに『Microsoft Visual C++ 2005アプリケーション開発入門』(日経BPソフトプレス) には、上記の方法でやれば、できると書いています。 設定とか必要でしょうか?
>>542 猫なんぞを使うなら、frameworkは使えない。
どっかのスレでExpress Editionにイメージエディタついてない と言ってた
>>541 どっか変換が不完全なのか、中間ファイルが消えてないんでない?
検索してもhogeが見つからずリビルドしてもだめなら、中間ファイルを根こそぎ消してみるといいかも。
547 :
素人 :2006/09/08(金) 19:29:13
>>545 >どっかのスレでExpress Editionにイメージエディタついてない
>と言ってた
そうなんですか。困ったな。
548 :
素人 :2006/09/08(金) 19:57:38
日経BPソフトプレスに問い合わせてみました。
アイコン書くだけならペイントやそこらのソフトで十分だろ
550 :
素人 :2006/09/08(金) 20:21:00
>549 ピクセルとかその辺の設定ができるソフトがないので。
釣り確定
552 :
デフォルトの名無しさん :2006/09/09(土) 09:06:40
SDKで開発しているのですが、 IEのお気に入りのようにツールバーにアイコンがあって、 それを押すと左側に出したり消したりできるウィンドウが作りたいのですが こういうウィンドウを作ろうと思ったら 一般的にはMDIを利用することになるのでしょうか?
553 :
541 :2006/09/09(土) 12:28:41
>>546 ファイルを隅から隅まで手動で検索してもhogeの文字はなく
中間ファイルを(手動/自動で)消したりDebugビルドのフォルダそのものを消してみたりしましたが
やっぱり生成されるのはhoge.exeです。
もうわからなくなってきた…
ゲームのシーン管理で、 シーンクラスはCSceneを継承するとして、シーン基本クラスを virtual void Init(CD3DManager *pD3DManager, CInputManager *pInputManager) = 0; virtual void Update() = 0; virtual void Draw() = 0; と定義し、CSceneManagerにシーンスタックを持たせようと考えたのですが、 vector<CScene> m_SceneStack; で定義すると、 抽象クラスをインスタンス化できません。というエラーが出ます。 vectorを使うのは初めてで、どうも解決法が思いつかないのですが、どうすればよいでしょうか…?
>>541 新規で空のmogeプロジェクト作って、ファイル追加したほうが早くない?
>>554 抽象クラスをインスタンス化できないのは、vectorは無関係。それはそういうもの。
ポインタを使え。
>>556 ああなるほど。
単純なミスですね・・・orz
即レスありがとうございます。
558 :
541 :2006/09/09(土) 12:49:45
自己解決。
ソリューションエクスプローラの左上のmogeソリューションのプロパティから
リンカ→出力ファイルを選んで「hoge.exe」から
「moge.exe」に書き換えるとOKでした。
>>555 もうちょっとやってダメだったらそうしようと思ってましたw
559 :
554 :2006/09/09(土) 13:02:43
もう1つ質問があります。 例えばCSceneManagerというクラスがCSceneの制御をする構造で、 CSceneクラス側からも、若干の制御をしたいのですが、 CSceneはCSceneManagerが見えていないのでポインタを持つことも出来ません。 つまり、 CSceneManager → CScene は見える CScene → CSceneManager は見えない という状況でCScene側からCSceneManagerを制御する方法ってありませんかね? 以前作ったプログラムではCSceneにフラグを持たせて、 毎回CSceneManagerがチェックするという方法を取ったのですが、 どうもスマートじゃないな、と思ったので。
CSceneManagerがCSceneを登録するときに CSceneのコンストラクタにCSceneManagerへのポインタを渡してやる
>>558 どう見ても、ソリューションファイル内の文字列を書き換えてナインジャマイカ。
562 :
554 :2006/09/09(土) 15:36:34
>>560 ポインタを渡すことが出来ても、
CSceneからCSceneManagerのメソッドを呼び出せないですよね。
564 :
554 :2006/09/09(土) 15:56:10
>>563 [CSceneManager.h]
#include "CScene.h"
class CSceneManager{
private:
vector<CScene> *m_pSceneStack;
};
[CScene.h]
#include "CSceneManager.h"
class CScene{
private:
CSceneManager *m_pSceneManager;
};
これでビルドすると、CSceneManagerがCSceneを定義するのは認められるのですが、
CScene.h内でCSceneManagerというオブジェクトが定義されていないよー、
というエラーがでるんです…。
CScene hoge
あ、お手つき、すまそ
前方宣言
568 :
554 :2006/09/09(土) 16:56:03
>>567 [CScene.h]にて
Class CSceneManager:
の前方宣言で解決しました。
助言して下さった皆様、本当にありがとうございました。
569 :
デフォルトの名無しさん :2006/09/09(土) 21:16:11
最近c++ を勉強しようと思っているのですが、visualc++2005と6.0とで visualbasicみたいな、命令の違いってあるんですか?(ツッコミどころ満載だけど、超初心者なので許してクレ-)
>>569 大文字小文字w
うそ、ごめん、おれはわかんね
標準への準拠度 当然新しい方が準拠度は高い
572 :
デフォルトの名無しさん :2006/09/09(土) 23:29:21
>>571 ご回答ありがとうございます!!
準拠度が高いってことは、オリジナルのC++に近くなってるってことですかね。
実際よくわかりませんが、とりあえず、ExpressEditionで勉強してみます。
ついでといってはなんですが、お勧めのVC++勉強用の書籍とかサイトとかがあったら
ゼヒ教えてください
>>570 ご指摘ありがとうw
c++ を勉強したいんなら VC++勉強用の書籍とかサイトじゃなくて C++勉強用の書籍とかサイト
575 :
541 :2006/09/09(土) 23:36:27
>>561 え?
ctrl+Fで「hoge」を「開いている全ファイル」から検索して置換しても
まだ足りないんですか?
ここはC++スレじゃなくてVC++スレです VC++でC++もできるけどそれはVC++じゃなくてC++です。
578 :
デフォルトの名無しさん :2006/09/09(土) 23:48:50
>>573 VBも考えたのですがランタイムが必要だし、色々な心意気の面で、ちょっと...
javaはC++の後にやろうと思ってます、でもC#の方がC++より習得し易いんですかね、
初めて知りますた。
.netのような使いやすいネイティブライブラリはありませんか?
581 :
デフォルトの名無しさん :2006/09/09(土) 23:53:40
>>574 やっぱり、C++自体を学んだほうがいいんですよね、がんばってみます
二回もスマソ
MFCも実はそんなに悪くない。 悪くないよね?
583 :
デフォルトの名無しさん :2006/09/10(日) 04:18:19
MFCダイアログベースで作っております。ボタンを押すと参照画面が開き、指定したビットマップ画像がピクチャボックスに表示されるような ものを作りたいのですが CString FileName; // パス CFileDialog *myDlg; // コモンファイルダイアログ myDlg = new CFileDialog(TRUE,_T("bmp"),_T("*.bmp"),OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST,_T("*.bmp | *.bmp|")); if(myDlg->DoModal() == IDOK) { // 選択ファイル名取得 FileName = myDlg->GetPathName(); } ダイアログは出てくるのですが、これ以上がわかりません>< リソース画像をはっつけるやり方はわかってるんですが参照した場合こっからどうすればいいですか? LoadBitmapとかじゃだめですよね?わかりません>< どなたかよろしくお願いしますm(_ _)m
>>584 猫はWinアプなんでいまいちわからんのですよ・・・。
パスを取得するってのはあってますよね?そっからどうやれば??
>>585 マジレスすると、「猫でもわかるプログラミング」という神のページがある。
WinプログラミングのFAQ的疑問は、そこ見れば大抵一発で解決する。
詳しくはググれ。
神とは言い過ぎだと思うが、あの量の多さには脱帽するよ。
下手するとMSDN引っ張るよりも早かったりするしな。 一人でどんだけ書いてんだよと。
猫はWin32API中心だからMFCはあんまり載ってないですよ
と
>>585 は言ってるであろう
>>590 そのとおりでございますだ。。。
Win32とかMFCダイアログとかMFCフォームで書き方が初心者にはバラバラに見えますたい。
MFCに統一性を求めるのが間違い
MFCフォームなんて聞いたことがない
なぜVisual C++ 2005 Express Editionには リソースエディタが無いんですか???
.net用だから
StandardEdition買いなされ。 安いんだから。
597 :
デフォルトの名無しさん :2006/09/13(水) 12:44:40
質問です。 VS.NET2003のMFCを使っています。 テキストファイルの中身を表示するプログラムを作っているのですが、 エディットボックスに出力する文字列の色を変えることは出来ますか? 出来れば一行ごとに色が変えられるといいなぁ。
デバックして、動作チェックをしてたらこのようなエラーが出ました。 Run-Time Check Failure #2 - Stack around the variable 'max_tbl' was corrupted. (実行時チェックの失敗#2 - 可変的な『max_tbl』のあたりのスタックは、腐敗しました。) [中断] [継続] そのまま継続を選択したら、仕様書どおりの結果が返ってきました。 これは何が原因なのでしょうか?
原因は様々
>>599 すいません、自力で解決できました。
エラー文通り、テーブルの要領が小さすぎて溢れただけでした
>>597 リッチテキストボックス rt に、
rt->SelectionColor=Color::Red;
rt->SelectedText="red\n";
rt->SelectionColor=Color::Blue;
rt->SelectedText="blue\n";
でどうでしょ?
>>601 なるほど、エディットボックスは色表示出来ないのですね。
ちょっとわかってきました。
ありがとうございました!
603 :
デフォルトの名無しさん :2006/09/13(水) 19:08:56
Visual C++ 2005 では double と long double は同精度なのですか? 80 bit 精度はコプロセッサでも SSE でも サポートされてないから、ってことでしょうか?
意味不明
インテルに聞けばいいんじゃまいか
606 :
デフォルトの名無しさん :2006/09/13(水) 19:50:21
>>604 VC++6 あたりでは
double = 64bit精度
long double = 80bit精度
だったような記憶があったもので。
雑誌かなんか見たうろ覚えの知識で 店員に変な質問して得意がってるやつとか
>603>606 確かに今のVC++では、doubleもlong doubleもsizeofの結果は同じだ。 だが、どちらにしてもFPUレジスタは80bitあるので、 最適化されれば演算の中間結果は80bitで保持されるようにはなる。 (もちろんSSEなどを使うようにしていない場合だ)
SSEだと乗算内部何ビットだっけ?
32 or 64
ニュートンラフソン法だっけ? とか使わないで素のままだと、精度がとんでもないことになるのを思い出した。
612 :
デフォルトの名無しさん :2006/09/14(木) 09:45:16
TextReader^ tr = gcnew StreamReader("test.txt"); と StreamReader^ sr = gcnew StreamReader("test.txt"); って何が違うの?
613 :
デフォルトの名無しさん :2006/09/14(木) 10:09:09
あと、 while ( (s = sr->ReadLine()) != null ){ ってかくと error C2065: 'null' : 定義されていない識別子です。 って出るんですが、nullって無いの?
614 :
デフォルトの名無しさん :2006/09/14(木) 10:12:51
ぬるぽ
>>612 ただ使う分には両者特に違いはない。
StreamReaderはTextReaderから派生しているので、
前者のようにStreamReaderのオブジェクトをTextReaderとして扱うことができる。
TextReaderから派生したクラスはほかにもあるので、
関数の仮引数には、TextReaderにするほうが、関数の使える幅が広がって嬉しいことがあるかもしれない。
2005ってフレームワークはMFCじゃなくなったの?
すみません。超初心者です。 この度、VC6からVC2005に変えて勉強しています。 質問ですが、VC2005はCreateWindow()は使えないのでしょうか? また、文字列を引数とする関数全てに 「LPCWSTRに変換できません」 というエラーになってしまいます。(MessageBox()など) LPCWSTRでキャストすれば通るのですが、文字列指定する関数には 毎回LPCWSTRでキャストしないといけないのでしょうか? 低レベルな質問で申し訳ないですが、よろしくお願いします。
CreateWindow()は環境により使える。 LPCWSTRな文字列ならキャストいらない。 LPCWSTRじゃない文字列をキャストしてもLPCWSTRにはならない。
>>619 レスありがとうございます。
更に質問なのですが、
>CreateWindow()は環境により使える。
CreateWindowEx()で対処で問題ないですか?
>LPCWSTRな文字列ならキャストいらない。
MessageBox( hDlg, "aaa", "aaa", MB_OK );
だとLPCWSTRに変換できないと言われ、
MessageBox( hDlg, (LPCWSTR)"aaa", (LPCWSTR)"aaa", MB_OK );
にしたら、通ってしまいました。
私はもっと根本的なミスをしているのでしょうか?
すみません。解決しました。 プロジェクト->プロパティ->構成プロパティ->全般 の中にある 文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する] に変更で、いつもどおり文字列を使えるようになりました。 お騒がせしました。
CreateWindowはWindowsネイティブAPIだから、externすれば使えるはず どっかで定義を用意してあるので6.0ではwindows.hにあるが消されたのか? LPCWSTRのLPCとはポインタを表す表記でWSTRはユニコードを表す表記です つまりユニコード文字のポインタという意味です ソースファイルがSJISなら"aaa"はSJISなのでそのまま渡すとエラーになります SJIS終端コードが\0なのに対しユニコードの終端コードが\0\0だからです ていうかユニコードしか扱えなくなったのか?
変数 f_stockに前回入力した数値を入力して 今回の数値と比較して、一致すればf_flgに1を入れ、一致しなければ0を入れるサンプルを作っているのですが 更新するたびにf_stockに前回入力した数値が入らず、0が入ります。 どうしたら、更新しても変数の内容を変えないようにできるのでしょうか?
static 変数にするのは邪道かな?
>>625 staticだと更新は行けたけど、終了してたら変数は0になります。
終了しても変数を初期化したくないんですが無理なんでしょうか?
小出し野郎にはレスしない方がいいよ
628 :
デフォルトの名無しさん :2006/09/14(木) 16:48:16
神様教えて c++ってインターフェースってできないんでしょうか、、 class A{ public: double GetSignal(int i,int j); } class B{ public: double GetSignal(int i,int j); } みたいのがあって、どっちも引数でとれる double GetSignal(??? C){ return C.GetSignal(5,5); } みたいな関数を書きたいんですが。。
テンプレート
>>627 すいません
小出しにするつもりはないんですが、うまいこと説明できないんです。
double GetSignal(int i,int j)を持つクラスからAとBを派生させる。 double GetSignal(??? C)の???にはそのクラスを指定。
632 :
デフォルトの名無しさん :2006/09/14(木) 16:57:18
>629 検索してやってみて、でけた! ありがとう神様
633 :
デフォルトの名無しさん :2006/09/14(木) 16:59:04
>631 ほぉほぉ それもいいっすね
634 :
デフォルトの名無しさん :2006/09/14(木) 17:03:58
>>630 レジストリかini使えと言いたいけど
言っても無駄になる確立が90%以上だな
Visual C++ 6.0ではlong long型は使えない? longよりも大きな数扱える型ない? 符号付きの10^16を扱える整数型なら問題ないんだけど。
class C { virtual double GetSignal(int i,int j) = 0; }; class A : public C { double GetSignal(int i,int j); }; class B : public C { double GetSignal(int i,int j); }; C* instance[] = { new A(), new B() }; instance[0]->GetSignal( i, j ); instance[1]->GetSignal( i, j );
>>630 まず自分がどういう処理で何をしたいのか明白にする事をお勧めする。
うまく説明できない = サブルーチン含めて完成系が想像できていない
>>636 LONGLONG
LARGE_INTEGER
640 :
639 :2006/09/14(木) 17:15:29
__int64
>>638 流れですがこのような感じです
登録クラス:
入力画面で1〜50の通常数字を6個と1〜50の特殊数字1個を入力する
登録すると、数字を","ごとに区切ってtxtファイルに格納される
その際、特殊数字を変数に入れる。
次回入力の祭、通常数字6個と前回格納した特殊数字を比較する
数字が一致すれば1 一致しなければ0をtxtファイルに立てる (例 02,11,15,17,27,29,26,1
今回の特殊数字を変数に入れなおす。
解析クラス:
画面で1-50のエディタを用意して、特殊数字がヒットした回数を表示させる
>>641 ロト6の解析プログラムでも作ろうと思ってるのかw
しかし意味わからんな
人に説明できないソフトが作れるのか?
もっと抽象的に話をするか、もっと具体的に話しないと
変数なんて言葉が出てくると訳わからなくなるぞ
>>643 抽象的に言うと、
>>641 の比較用の特殊数字をプログラムを終了しても残す方法を教えていただきたい。
メモリの内容をセーブ(ゲームなんかと同じ)
紙テープついてないの? あれに穴あけるんだよ
>>644 writeprivateprofileint
getprivateprofilestring
これでググレばいいよ
間違った writeprivateprofilestring getprivateprofilestring で
>>628 JavaやC#のようなインターフェースを作りたいなら631方式が一番しっくり当てはまる。
???のクラスをインターフェースに見立て、メンバ関数は全て純粋仮想関数とするわけだ。
650 :
デフォルトの名無しさん :2006/09/14(木) 19:10:46
VC++2005 Express Editionで、さっき
>>2 の状況になったんだが、
なる直前に追加した行を削除したらなおった。
バグ?
>>641 特殊数字がうんたらかんたらじゃなくて、要は作成したツールに入力した値を
ツール再起動しても保持する方法を知りたいだけだろ?
だったら、
>>635 と
>>645 が既に答えを教えてくれている。
iniを使いたければ、
>>648 の言うこと聞いた方がいい。
>>645 の言うとおりゲームのセーブデータみたいにバイナリファイルを落とすのも手。
後は起動時に毎回落としたファイルを読み込めばおk。
君の場合レジストリは使わない方がいい。
>>648 ぐぐって調べます。ありがとうございます
>>652 レジストリはよく分からないのでiniを使ってみます
655 :
デフォルトの名無しさん :2006/09/15(金) 14:23:07
>>654 超初心者スレッドだから、大サービスで回答するけど
その書き込みじゃ誰も回答なんてくれないぞ
どう動かないのか?読み込めないということは書き込めているのか?
とか具体的な症状を書かないと
だいたい、648が関数名まで指定してググレと書いてあるのに
なぜ別の関数を使ってるんだよ
MSDNでCWinApp::WriteProfileStringの項目調べたのか?
MSDNでさえ、日本語版は疑ってかかれというご時世
HPに書かれていることを完全に鵜呑みにするのはダメ
>>656 大サービス感謝です。
MSDNは見てたんですが
CWinApp::WriteProfileInt
CString strSection = "My Section";
CString strStringItem = "My String Item";
CString strIntItem = "My Int Item";
↑これの意味が分からず、色々ググってあのHPにたどり着いたんです。
CWinApp* pApp = AfxGetApp();
pApp->WriteProfileString(strSection, strStringItem, "test");
CString strValue;
strValue = pApp->GetProfileString(strSection, strStringItem);
ASSERT(strValue == "test");
pApp->WriteProfileInt(strSection, strIntItem, 1234);
int nValue;
nValue = pApp->GetProfileInt(strSection, strIntItem, 0);
ASSERT(nValue == 1234);
上の例を実行すると
[テスト][テスト]
[1234] になるのですか?
658 :
デフォルトの名無しさん :2006/09/15(金) 16:59:01
シラネーヨ ヴォケ
メモリーリーク検出についての質問なんですが、
ロベールの部屋
プログラマーの友 第八報:メモリリークと crtdbg.h
ttp://www1.kcn.ne.jp/~robe/pf/pf008.html ↑のサイトに書いてあるように行い、new int のような一つのオブジェクトを
作成する場合のメモリーリークの検出はできるようになりました。
では、new int[10] のように配列を取得する場合は
どうすればいいのでしょうか?
よろしくお願いします。
660 :
デフォルトの名無しさん :2006/09/15(金) 18:20:50
VC++.NETで、 動的にDISABLEになっているコントロールの色を持ってくることは可能ですか?
>>659 デバッグ用に特殊なコード書く必要あるんだったら
そういう機能使う意味ないと思うが
(゚д゚)ハァ?
>>657 iniファイルってのは、テキスト形式だから、開けば読める
xpでやってるんだったら
c:\windows\
フォルダに、xxx.iniって形で入ってるんだからテキストエディタで開いてみればいい
(xxxはアプリケーション名)
どういう形になってるかわかるだろ
大体、[テスト]って何処から出てきてるんだよw
664 :
add :2006/09/15(金) 21:20:51
すんません。 Visual Studio 6と Visual Studio 2005 Expressは共存できないのでしょうか? Visual Studio 6でコンソールアプリが急にコンパイルできなくなったので…
共存可能でもデフォルトは
>>664 パスの指定どっちが優先になってるかみてる?
とりあえず、コンパイラのバージョンを見てみれば
プロジェクト(ソリューション)の拡張子は異なるのでIDE環境で困ることはない。 コマンドプロンプトの場合はどちらも環境変数に登録はしないで、 必要なvcvars32.batを呼び出すようにバッチファイルを用意する。 .cppとかの拡張子の関連付けが気になるなら新しいほうが後からがいいだろう。
>>657 ini使わないなら、
C言語のファイルの読み込み・書き出し勉強してきな。
>>657 君の場合は下手にiniなんて使わないで、fopen()を使った方がいいと思う。
iniファイルってデータの順番変わってもよめるから、将来力技が期待できるからオススメ 「5年前のデータを復元してください」て無茶な要望あったりするけど バイナリ保存は厳しいが、INIのデータ変更パッチとかなら何とかなる
低レベルな話題だと盛り上がるなw
w
w
vv
貧乏性のせいか、高いお金を払って買ったVS6を未だに使っているのですが、 無料版のVC2005EEを使ったほうがいいでしょうか? 参考書も古いものばかりなので、変更点なども心配です。
無料版にはリソースエディタついてないからそのつもりで
あ、ドトネトで作るなら使える
システムフォルダにコピーするために VisualC++ランタイムをダウンロードしたいのですが Vectorのどれをダウンロードすれば良いでしょうか?
必要なVer.が判らないと答えられない。
Visual C++ 6.0だそうです
685 :
669 :2006/09/17(日) 23:29:52
>>679 俺も、vs6、ずっと使い続けてきたが、,netでの開発が必要になってvs2005pro買った
proだと、msdn subscriptionつけても15万程度(vsだけだと12万位)なので、そんなに高くない
vcだけだったら正直vc6のままでもいいかも・・・って感想だけど、c#は思った以上に良い言語だね
参考書の件だけど
使ってる言語が何かによるけど、vbだったらvb6までの参考書はほとんど役に立たないと思う
違う言語として考えたほうがとっつきやすい
vcだったら、cwとかなくなったので最初は戸惑うけどmfcとかはほとんど違いはないから問題ないと思う
VC++6.0を使っています。 プログラムを起動中に指定したフォルダの中のファイルが更新されたかどうかを判断するMFCかAPIはありますでしょうか?
FindFirstChangeNotification
690 :
デフォルトの名無しさん :2006/09/18(月) 13:41:24
初歩的な質問ですみません。 VC2006.net を使用しています。 クラス内から、アプリ側の関数を呼び出したいので、 アプリ側から関数を登録するようにしました。 以下の記述でコンパイルエラーが出てしまい解決がわかりません。 (続く)
691 :
デフォルトの名無しさん :2006/09/18(月) 13:42:32
-----アプリ側----- [ヘッダファイル] class CDlgAAA : public CDialog { public: bool CDlgAAA::TourokuFunk(int n); }; [ソースファイル] bool CDlgAAA::TourokuFunk(int n) { if(…略…)return true; elsereturn false; } アプリ内の関数にて CSubClassZZZ* pKKK; pKKK->SetAPFunk( TourokuFunk ); // @ (続く)
692 :
デフォルトの名無しさん :2006/09/18(月) 13:43:46
-----クラス側----- [ヘッダファイル] class CSubClassZZZ : public CListCtrl { private: bool(* lpfnAPFunk)(int n); public: voidSetAPFunk( bool (*lpfn)(int n) ); } [ソースファイル] voidCSubClassZZZ::SetAPFunk( bool (* lpfn)(int n) ) { lpfnAPFunk = lpfn; return; } クラス内のメンバ関数にて (*lpfnAPFunk)(i) ; @でエラーが出ます。 「1番目の引数を'bool(int)'から'bool (__cdecl *)(int)'に変換できません。」 どうしたら良いですか?
>>691 クラスの非静的メンバ関数は、thisが存在するため、通常の関数とは扱いが異なる。
まあメンバへのポインタでググれ。
手っ取り早く解決するにはBoost使え。
こんな感じ。
#include <boost/function.hpp>
class CSubClassZZZ
{
public:
typedef boost::function<bool (int)> APFuncType;
void SetAPFunk(const APFuncType& fn);
private:
APFuncType fnAPFunk;
};
void CSubClassZZZ::SetAPFunk(const APFuncType& fn)
{
fnAPFunk = fn;
}
そんでもってこう使う。<boost/bind.hpp>のインクルードが必要。
CSubClassZZZ* pKKK;
pKKK->SetAPFunk(boost::bind(&CDlgAAA::TourokuFunk, this, _1));
CDlgAAAの中でなければ当然thisを何かに書き換えろ。
CDlgAAAへのポインタでも参照でも受け付けてくれる。
静的メンバ関数や非メンバ関数は、関数へのポインタのように、
そのままboost::functionへ初期化や代入ができる。
リストコントロールのコールバックかな?
DLLであると同時に実行ファイル形式(コマンドラインなりエクスプローラなりから 単独実行できる)でもあるようなDLLって作れる? 可能ならやり方おせーて
exeからエクスポートすればいいじゃん。
すみません.教えてください. JoyStickを4つ使用するプログラムを書いているのですが, JoySetCapture関数を使って2つまで認識させることができたのですが, 3つめ,4つめはキャプチャに失敗してしまいます. JOYSTICKIDは1と2しか定義されていないようですし, これは3つ以上は使えないということでしょうか?
>>697 なんか、2個しか出来なさそうな雰囲気だね
DirectInputとか使ってみたら
>>696 その場合DllMainはどうなるの?書いておかなきゃだめ?
>>698 ありがとう
DirectInputの方向で頑張ってみます
すみません教えてください。 VC2005で、リソースエディタでダイアログを作ったのですが、どのように呼べば良いですか? VC6の頃は、リソースエディタで作ったら、リソースヘッダを自動で作成してくれたのですが、2005では作成してくれません。 呼び出しは DialogBox( hInst, MAKEINTRESOURCE( IDD_DIALOG ), NULL, (DLGPROC)DlgProc ); で呼び出していますが、呼び出しも間違っていたら、指摘してもらえると助かります。
DLGPROCのキャストはわざわざする意味がないと思わないのか。
なんとなくです。。呼び出しはそれで呼び出せると思うので、ヘッダの作成方法をお願いします。
要らんものは消せ。 それはともかく2005でもヘッダは作られているはずだと思うが。
>要らんものは消せ。 了解です。 >それはともかく2005でもヘッダは作られているはずだと思うが。 マジですか?!う〜ん。。今確認しても出来ていない。。 でも自動で作成されると分かったので、色々いじってみます。ありがとうございました。
ども705です。
無事解決しました。ありがとうございます。
【原因】
ファイル→新規作成→ファイル→VisuialC++→リソーステンプレートファイル(rct)
で作成。
【解決】
プロジェクト→新しい項目の追加→リソースファイル(rc)
で作成。
拡張子がrctなので、おかしいとは思っていました。。
>>704 さんありがとうございました。
707 :
デフォルトの名無しさん :2006/09/18(月) 22:02:21
691です。 >693 ありがとうございます。解決しました。 >694 リストコントロール?なんだろ?
質問させてください。 この度PC上で起きるイベント(作業ウィンドウの変更やウェブページの移動等)を記録するプログラムを作る事になりました。 ネット上等を調べてどうやらSetWindowsHookExという関数を使う事は分かったのですが、具体的なコードの書き方(例題等)が分かりません。 どこか詳しく述べているサイト等を知っている方が居ましたら教えてください。 流れ的には、作業ウィンドウ変更→プログラムが感知(フック)→その内容をテキストに書き込み、という感じにしたいです。 よろしくお願いします。
一刻も早くネカフェに設置したいんです。よろしくお願いします。
710 :
デフォルトの名無しさん :2006/09/19(火) 05:02:06
>>708 なんで専用のソフトウェア導入しないの?
ウェブページの移動の記録はできなくてもいいの?
碌な事に使われない予感。
犯罪者はけん
713 :
デフォルトの名無しさん :2006/09/19(火) 17:36:46
VC++2005ExpresEditionで、 殆どCなwin32コンソールアプリ void main(){ printf("hell,world"); } をビルドしてできたexeを配布するには どうすりゃいいですか? .NETFrameWorks2をインストールしたマシンならOKでしょうか?
Visual C++ 2005 Express Editionを使っているのですが 何らかのDLLをLoadLibraryし、何らかの関数のアドレスをGetProcAddressして、その関数を実行します。 関数はちゃんと実行できるのですが、main関数を抜けると(return 0;すると)プログラムの外でアクセス違反が発生します。 gccで同じコードをコンパイルして比較すると、gccではこのような事は起こりません。 どうすればいいですか('A`) ExitProcessならクラッシュしないので、一応の回避策として今は #if (_MSC_VER >= 1300) ExitProcess(0); #else return 0; #endif こんなことをしていますが…
>>713 Win32プロジェクトで作れば、.NET Frameworkは要らない。
せいぜいランタイムを動的リンクにしていればそれが要るだけ。
>>714 ExitProcessで問題ないならそれでいいじゃん
>>715 >せいぜいランタイムを動的リンクにしていればそれが要るだけ。
その場合の再配布モジュールはこっち vcredist_x86
.NET Frameworkでもmsvcr80.dllだけはインストールされたりするので誤解が多い。
718 :
713 :2006/09/19(火) 20:22:44
>>715 >>717 デフォルトの状態から、
プロパティ/Release/構成プロパティ/全般/MFCの使用=スタティック ライブラリで MFC を使用する
とすると、なんかダイジョウブそうなんですが、どうでしょうか?
転がっていた、NT4サーバーに入れたら動いたんですが。
>>718 コード生成のランタイムライブラリも関係する。
まあ何もいじっていなければ静的リンクするほうになっているはずだけど。
>>718 これだけあれば十分かなぁ。
構成プロパティ>全般
スタッティックライブラリでMFCを使用する(MFCを使う場合)
ATLを静的にリンク(ATLを使う場合)
構成プロパティ>C/C++>コード生成
マルチスレッド(/MT)
.net framework2.0のインストールは何で時間がかかるのか〜と思ってたら、
クラスライブラリ全体にngen走らせてるのね。そらかかるわ。
ランタイムだけとはいえライブラリをビルドするのと同等だからなぁ。 まあ自動でやってくれるんだからPortageみたいなもんか。
722 :
デフォルトの名無しさん :2006/09/19(火) 23:02:11
VC71 を使っています。 静的ライブラリ Lib1 で Func0.cpp と Func1.cpp というファイルがあります。 Func0.cpp では Func0 を実装しています。 Func1.cpp では Func1 を実装しています。 Func0 は Func1 からしか使用されないので 本来 static なのですが、別ファイルにしているので、static にしていません。 このとき、静的ライブラリ Lib1 をビルドすると、Func0 もエクスポートされてしまいます。 ここまでは問題ありません。 次に、同じような静的ライブラリ Lib2 を作成し、 Func0.cpp では Func0 を実装し Func2.cpp では Func2 を実装したとします。 このとき、静的ライブラリ Lib2 をビルドすると、Func0 もエクスポートされてしまいます。 ここでもまだ問題はありません。 Test1.exe プログラムで、Lib1 の Func1 と Lib2 の Func2 を使用したいとき、 Lib1.lib と Lib2.lib をリンクすると、Func0 が二重定義されているという リンカ エラーが発生します。 このエラーを回避するには、どうしたらよいでしょうか。 Func0 を別ファイルに実装するという設計は変えたくない。
Lib1とLib2のFunc0の中身は似ているか? 似ているなら合体して1つにしてしまえ。似たようなものがいくつもあるのは良くない兆候。 そうでなければ、Lib1とLib2の中身をそれぞれ名前空間で閉じ込めたらどうか?
724 :
722 :2006/09/19(火) 23:11:29
>>723 > Lib1とLib2のFunc0の中身は似ているか?
いえ、プロトタイプ自体違うものです。
> Lib1とLib2の中身をそれぞれ名前空間で閉じ込めたらどうか?
うーん、実は C++ じゃなくて C を使っているんです。
ダイアログを最小化した時に、画面右下のアイコンのところに収まるようにすることは可能でしょうか?
func1.cppで、include "func0.cpp"する。もちろん、Func0はstaticにする。
>>724 なんでライブラリを分けたいのかな?ひとつにまとめるじゃダメ?
cl /c func0.cpp func1.cpp func2.cpp
lib /out:libx.lib func0.obj func1.obj func2.obj
>>727 ああ名前が同じだけで別物なのか。別物なら別の名前をつけるこれが原則。
729 :
デフォルトの名無しさん :2006/09/21(木) 10:42:37
c++ でファイルからバイト数を指定してファイルの内容を読み込むにはどうしたら良いですか
freed
>>729 istream::read(vhar*str, streamsize count)
×vhar ○char
ヴェラー
言い忘れたけど、ストリームはstd::ios::in | std::ios::binary で openしておく。
735 :
デフォルトの名無しさん :2006/09/21(木) 10:59:41
LONGLONGとint64はまったく同じものですか?
同じ。 __int64をtypedefしてLONGLONGが作られている。 VC7からはC99のlong longも使える。
738 :
デフォルトの名無しさん :2006/09/21(木) 23:07:55
すみません。 bool と BOOL の違いって何ですか?
typedef int BOOL
そんでもってboolはintなどと同じくC++の組込型。 迷ったらboolにするほうが俺のお勧め。
WinAPIとWin32とMFCとSDKとVC++の概念は、 VC++{ ・SDK{WinAPI=Win32} ・MFC } という感じでしょうか? 中括弧は「含まれる」みたいな意味で。
class VC++ { MFC m_MFC; }; class MFC { SDK m_SDK; }; class SDK{ void API(); };
どっちかというとWin32はWindowsそのものを指すのに近いような感じ。 Win32を使うためのインターフェースがWin32API。 だから等号には少々違和感を感じる。
Windows Update関連の処理の勉強してるんだけど、 Wuapi.hっていうファイルがあって、ファイルの最初に /* File created by MIDL compiler version 6.00.0347 */ /* Compiler settings for wuapi.idl: Oicf, W1, Zp8, env=Win32 (32b run) protocol : dce , ms_ext, c_ext, robust error checks: allocation ref bounds_check enum stub_data VC __declspec() decoration level: __declspec(uuid()), __declspec(selectany), __declspec(novtable) DECLSPEC_UUID(), MIDL_INTERFACE() */ //@@MIDL_FILE_HEADING( ) って書いてあるんだけど、 MIDL(Microsoft IDL)って一体どういう風に使うの? ググっても、msdnライブラリのヘルプ見ても、よくわからんかった。 wuapi.libってファイルは一応あるんだけど、 自分で新たにwuapi.libを用意する場合、 どっかからソース持ってきて、自分でコンパイルしなきゃだめなのだろうか?
>>745 それ位の英文読めよ。
そのWupai.hは、wuapi.idlをそこに書いてあるとおりのオプションでMIDLコンパイラにかけて作られた。
こういう旨が書いてあるだけだろ。
もはやWuapi.hは単なるヘッダなんだからC/C++ソースから普通にインクルードして使ってよい。
SDKで組んでいたら、MFCで組んでいる人に鼻で笑われました。 何故ですか?SDKってレベルが低いのでしょうか? ちなみに私はMFCは勝手にソースに書き込む&専用DLLが必要(exeに組み込むとサイズ喰う)ので SDKで組んでいます。
MFCはソースに書き込まないと思うんだ。
>>748 あ、言い方悪かったです。
コントロールを作成すると、勝手に記述されてしまうって意味です。
750 :
デフォルトの名無しさん :2006/09/22(金) 17:42:27
ウィザードで自動生成される見えない部分のコードの事を言ってるんじゃね?
それです
それはウィザードを使わなければいいだけじゃないのかな? MFCを使うかどうかと直接の関係はないと思うんだ。
753 :
745 :2006/09/22(金) 20:49:07
>>745 ですが、質問の仕方が悪かったかもしれない。
知りたいのは、
(1)MIDL compiler は、どういう風にしたら使うことができるのか?
(環境はVC6.0です。)
(2)wuapi.libやWuapi.hを自分で入手したい場合、
どこかのサイトでダウンロードできるのか?
(ファイル自体は持ってるし、使用方法も分かっているが
その出所が知りたい)
よろしくお願いします。
>>747 いっそ、WTLで組んでさらに笑われてみるとかw
いや、俺はWTL好きだけどね
専用DLLが無いので軽量だし
つーか、MFCだって別にウィザード使わなくたって組めるけどな
>>747 確実に言えることは、そんなことで笑うようなやつのレベルが低いということ。
>>753 コマンドプロンプトからmidlというコマンド。
wuapi.libもwuapi.hも基本はPlatform SDKに入っているものを使うのが原則だが、
libのほうは、DLLからインポートライブラリを作るツールがあるし、
wuapi.hはmidlでwuapi.idlから作れる。そのwuapi.idlは、Platform SDKにしか入っていないんだけどな。
>>755 まったくだな、そんなやつ無視すりゃいいよ
ただ、745も
MFCが使えるけど、明確な理由で使っていないというならいいが
MFCくらいは出来るようにしといたほうがいいけどな
758 :
745 :2006/09/22(金) 22:45:53
>>756 おお〜!レスどうもです!
midlコマンドは、今日やってみましたが、
「そのコマンドは認識されていません」でした。
msdnヘルプに書いてある設定画面にいかないので
そこで止めて、web検索に走ってしまいました。
.hと.libファイルは、psdkのCD-ROMがあるので、
それを調べるかインスコフォルダ調べれば良さそうですか。
問題解決まで、もう少しのような気がします。
とりあえずサンクスです。
759 :
デフォルトの名無しさん :2006/09/23(土) 10:01:53
Visual Studio 2005 StandardのC++で、 .NETのクラスライブラリは使わないでプログラム作ってるんだが 出来上がったプログラムは.NET Frameworkなくても動く?
.NETのプロジェクトを選ばなければいらない。
761 :
デフォルトの名無しさん :2006/09/23(土) 10:38:00
VC++8 のランタイムはいるけどな。 .NET Framework 2.0 インスコすると勝手に VC++8 のランタイムも入るから、見た目には .NET Framework 2.0 が無いと動かないように錯覚するので注意。
char a = '5'となっているものをint b = 5に変換したいのですが、どうしたらよいのでしょうか
764 :
(^-^) ◆MONSOON/qo :2006/09/23(土) 18:09:20
自己解決しました。atoi関数を使えばよかったのですね。
>>764 ・・・
766 :
(^-^) ◆MONSOON/qo :2006/09/23(土) 18:23:46
>>766 48なんてマジックナンバー使うな。せめて'0'と書け。
768 :
デフォルトの名無しさん :2006/09/23(土) 18:33:28
すみません。教えてください。 今あるソースコードをコンパイラー(VC++ 6.0)でコンパイルしようとしています。 コマンドプロンプトからの実行を行いたいのですが、 エラーとして、 nmakeはバッジファイルとして認識されません と表示されます。 どうもVCVARS32という名前のバッチファイルの環境変数を設定しないといけないみたいのですが、 全く何をどう設定したらいいものか分かりません。 どうかご教示をお願いします。
設定は必要ない 実行するだけ
770 :
デフォルトの名無しさん :2006/09/23(土) 22:47:26
誘導されたので、こちらで質問します 環境 OS WinXP コンパイラ Visual C++ if文を用いたプログラムを作りたいので質問します 最初に[F5]を押し、もしパケットの受信(なんらかの通信)があったなら、5秒後にまた[F5]を押し もし、パケットの受信がなければ、そこでプログラム停止 というプログラムを作りたいのですが、全くわかりません ある程度のコマンドを表記してもらえれば後は自分で独学するので 使うコマンドだけ教えてくれませんか? 2ちゃんねるの実況などのオートリロードに役立てたいのです(Janeですと、制限があるので…)
何に対してF5の押下メッセージを投げるのか? パケット云々言ってるが、更新ボタンを押せば、 何かしらパケットのやりとりはするだろうだから、 そんなものチェックしても意味無しと思われ。
コマンドなんてない
773 :
デフォルトの名無しさん :2006/09/23(土) 23:00:15
>>771 では、パケットが〜以上の場合、〜未満の場合
って分けれる事はできますか?
774 :
デフォルトの名無しさん :2006/09/23(土) 23:01:14
>>772 では、とりあえず、[F5]を何秒か語とに押すプログラムは作れますか?
775 :
(^-^) ◆MONSOON/qo :2006/09/23(土) 23:05:24
776 :
デフォルトの名無しさん :2006/09/23(土) 23:07:43
>>775 できれば、一から自作してみたかったのですが、とりあえずこれ使わせてもらいます
どうもありがとうございます
777 :
デフォルトの名無しさん :2006/09/23(土) 23:48:58
test
778 :
768 :2006/09/24(日) 00:23:55
>>769 えーと、設定しないと実行出来ないのですが・・・
逆だ。VCVARS32を実行すると、設定される。 何が設定されるかというと、nmakeその他のコマンドを実行できるようにするために環境変数を設定する。
780 :
768 :2006/09/24(日) 01:19:47
すいません。混乱してきました・・・ その、nmakeのコマンドを実行できるようにするための設定(環境変数の設定)は どのようにすればいいのでしょうか??
単にVCVARS32.BATを実行するだけ。
782 :
768 :2006/09/24(日) 01:49:35
ようやく理解しました。。。ありがとうございます。 VCVARS32.BATをクリックすることで環境変数が設定される! ってことですね!? しかし、やっぱり、nmakeは・・・認識されていません。 ってなるのですが、他に考えられる原因ってあるのでしょうか??
クリック→x 設定はひとつのcmd.exeの中のみ有効。画面内で全部実行する。
784 :
768 :2006/09/24(日) 02:09:51
どうもありがとうございした。 解決しました。
785 :
デフォルトの名無しさん :2006/09/25(月) 11:40:56
MBCS か UNICODE かを決めるための 構成プロパティ→全般→プロジェクトの規定値→文字セット って、プロパティシートでは設定することができませんよね? 特に指定しない限り UNICODE にしたいのですが、どうすればいいでしょうか?
786 :
デフォルトの名無しさん :2006/09/25(月) 11:52:28
VC++.Netでの画像取得の質問。 CWnd*myWnd= (CWnd*)GetDlgItem(IDC_FIGURE); CDC*myDC1= myWnd->GetDC(); myDC1->Ellipse(点を書く場所); これでIDC_FIGURE内に点を描いているのですが、これをメモリ上(or BMPなどの画像フォーマット)で保存するのは可能ですか? よろしくお願いします。
叶姉妹
指定したbmpファイルをリソースに埋め込まず Cbitmapに読み込むにはどうしたらいいでしょうか。
DCとは相手がメモリだろうがデバイスだろうがその違いを吸収するラッパーのようなものです CWnd に関連図けられたDCに操作を行えばCWndを表示しているデバイスに操作が行われます ビットマップに描画してやりたければビットマップをターゲットにしたDCを作ればいいんです ビットマップはビット深度などでいろいろな種類があってその辺はDCでもカバーできないので 指定しないといけません 一番簡単な方法はCWnd互換のビット深度を持ったビットマップを生成する方法です CreateCompatibleBitmap及びCreateCompatibleDCというAPIがあります 普通はビットマップを保存するなどの必要がある場合は二度手間になるのでビットマップだけに描画して BitBltを使ってそれぞれのデータをコピーして画面に出すという方法が一般的です このコピーの作業もDCがデバイスの差異を吸収して一発で出来ます
>>788 ビットマップを自前で解析してメモリに割り当てないといけません
サードパーティのライブラリを使ったほうがいいです
791 :
788 :2006/09/25(月) 12:46:41
>>790 そうですか。C++やめてC#に移ります。
>>788 Win APIのLoadImageで読み込み、
CBitmap::FromHandleでCBitmapのオブジェクトを作ったらどうか。
Attachした方が管理しやすいかも。 788=790=791の自演だろうけど。
794 :
734 :2006/09/25(月) 20:16:17
DirectXなどのライブラリで引数にfilename文字列を取ってファイルを 読み込む関数があると思いますが、例えばa.bmp b.bmp c.bmpという3つ のファイルをdata.datというファイルにまとめた場合、 どうやってそのライブラリでa.bmp b.bmp c.bmpを読み込めばよいのでしょうか? data.datを自分でメモリ上に展開して、ライブラリ側でメモリからロードできる関数を使う と考えているのですが、そういう関数が無い場合など、他に考えられる方法はありますか?
テンポラリに展開して読み込ませる
a.bmpやb.bmpのオフセットをdata.datのヘッダに書いとけばいいんじゃね あとはdata.dat内をシークして読み込めばdata.datをメモリ上に展開する必要ないし
797 :
デフォルトの名無しさん :2006/09/25(月) 20:53:32
>>795-796 レスありがとうございます
>>796 連続で質問で申し訳ないですが、data.dat内をシークして読み込むというは大体どんな感じのコードになるんでしょうか?
例えば先頭4byteにファイル数、
その後は16byteのファイル名+4byteのオフセットxN
とか適当にファイルのヘッダ形式を決めておく
例えばb.bmpを読みたい場合、
data.datを先頭から読み込んでファイル数を取得
ファイル数分ループしてファイル名とオフセットを取得
b.bmpを見つけたらオフセットも取得できている筈なんで
そこにfseek
あとは単体のb.bmpと同じ様に読み込む
※オフセットはdata.datの先頭からのオフセットでもいいし、
ヘッダ部を除いたところからの相対オフセットでもいい
..なんか分かり難いな
>メモリからロードできる関数
がない場合
>>795 で
Windowsならファイルマッピングとか使えるかも
>>794 >そういう関数が無い場合など、他に考えられる方法はありますか?
無ければ自分で作ればいいじゃん。
ひとつ作っておくと結構重宝するしな。 昔Javaで書いた奴なら出てきたんだが、読むかい? ソースが5KBほどあるんで、流石にここに貼り付けるわけにはいかんが。
801 :
デフォルトの名無しさん :2006/09/26(火) 00:12:02
>>798 >あとは単体のb.bmpと同じ様に読み込む
ここでhoge(char* filename)に渡せるんでしょうか?
どうもイメージがつかめません・・・
>>799 作り方がわからないというか
ファイル処理というものがどうなっているのかわからない
>>800 読んでみたいです
>>801 大したもんじゃないけどね。Javaだし。
どこか適当な捨てメアドかアプロダ指定してくれたら、送るよ。
>>801 >ファイル処理というものがどうなっているのかわからない
普通のファイル操作と本質は何も変わらんよ?
バイナリで全部読んで、ファイルフォーマットに応じた操作をすればおけ。
bitmapはbit深度によってパレット周りの操作が違ったりして、多少面倒だけど、
画像自体をコードの仕様に合わせれば良し。
805 :
デフォルトの名無しさん :2006/09/26(火) 01:38:20
>>803 bmpを例として挙げましたけど
ファイルフォーマットの資料が少ないものや複雑なものの場合
ファイル名を渡すだけでライブラリがオブジェクトを構築してくれるのは楽かなと思ったんです
>>804 うpた!7671.zipん中。
こっちは連結器だけだけど、読むのもすぐ作れると思う。
それって、tarの再生産?
まあ、そうだね。 すっぴんのtarを使う分には問題はないけど、 展開部分のコードをパクって来るわけにもいかないしなー。 ああ見えてtar、ソースだけなら結構でかいし。 tar自体のファイル構造はシンプルだけどさ。
つーか、OpenOfficeみたいにzip使うとか。
zlibは洗練されたライブラリだと思うが、今は自作してもいいんじゃないかね。
811 :
デフォルトの名無しさん :2006/09/26(火) 11:49:34
スレッドセーフの勉強をしたいと重いMSヘルプにあった一部をコピーして実行 しようとしているのですが、 Delegate void SetTextCallback(String text); が「無効なトークン 'void' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。」 とエラーになってしまいます。これはどうしてなのでしょうか?。
812 :
811 :2006/09/26(火) 11:56:35
スレ間違えました;; 移動します
813 :
デフォルトの名無しさん :2006/09/26(火) 14:21:39
質問です。 ファイル入力で取得したファイル名(xxx.mid)をCString型の変数fnameに格納し、 次にメニューからMIDIの再生を選択したときに fnameからファイル名を取り出しMIDI再生ルーチンへ渡したいのですが、 なぜかfnameにはファイル名ではなく、コンストラクタで初期化した値が入っています。 ファイル入力の後、一度fnameに格納されていることは確認済みです。 どのようにすれば正しくファイル名を取り出せるのでしょうか?
そのコードをちょっと見せてくれ。
815 :
813 :2006/09/26(火) 15:19:08
長いですが、、、 ReadSMF.cpp // SMFの読み込み BOOL CReadSMF::ReadSMF(CArchive& ar) { BOOLret = FALSE; CFile* cf; cf = ar.GetFile(); PutFilename(cf->GetFileName()); 〜省略〜 return ret; } void CReadSMF::PutFilename(CString fn) { CSMFDocm_doc; m_doc.PutFilename(fn); };
816 :
813 :2006/09/26(火) 15:19:46
続きです。 SMFDoc.cpp // コンストラクタ CSMFDoc::CSMFDoc() { fname = ""; } // ファイル名の格納 void CSMFDoc::PutFilename(CString fn) { fname = fn; } // ファイル名の取得 CString CSMFDoc::GetFilename() { return fname; } // メニュー【MIDIの再生】 void CSMFDoc::OnPlay() { CMainFrame* Frm = new CMainFrame; CString SmfName = GetFilename(); //ここでファイル名を取得できない。 Frm->MidiPlay(SmfName, TRUE); } よろしくお願いします。
void CReadSMF::PutFilename(CString fn) { CSMFDocm_doc; m_doc.PutFilename(fn); }; このメンバ関数が呼ばれた間にしか存在しないから
すごい単純なことをそんな長く書かなくてもいいだろうにw
819 :
813 :2006/09/26(火) 15:58:30
>>817 ありがとうございます。
fnameはCSMFDocクラス内で定義しているのに
CReadSMF::PutFilenameが呼ばれた間しか存在していないのですか?
では、どうしたらCSMFDoc::OnPlayでファイル名を扱えるようにできますか?
CSmfDoc.h class CSMFDoc { public: CString fname; OnSelect(); OnPlay(); }; CSmfDoc.cpp CSMFDoc::OnSelect(){ fname = ファイル選択 } CSMFDoc::OnPlay(){ CMainFrame* Frm = new CMainFrame; Frm->MidiPlay(SmfName, TRUE); }
821 :
813 :2006/09/27(水) 17:44:51
>>820 ありがとうございます。
無事に動きました。
SDK環境なんですが スプリッタウィンドウってMFCでしか利用できないんでしょか?
ないね
WTLもあるでよ。
825 :
564 :2006/09/27(水) 23:49:43
VC++.netの初期(2001ごろ)と2003と2005の違い、違いを埋めるための ノウハウなんかをまとめたサイトってご存知ないですか 手元には2001?のアカデミー版と2005のExpressがありますが かなり違うみたいで、また図書館で借りた2003準拠の本もまた違うようです。 なお2001はもっぱらC#を使っていました。
( ゚д゚)…
828 :
827 :2006/09/28(木) 03:47:23
822=827です WTLのはCSplitterWndのラッパーのようだったので 結局MFCのライブラリが必要ぽいので断念しました VCのMFCのフォルダにソースがあったので(afxext.h & WINSPLIT.CPP) これを見ながら自分で実装することにします
C++2005の場合、たとえばフォーム上にボタンを配置してそれが押されたときの イベントを登録しようとすれば、ボタンをダブルクリックすればそれが登録され ひながたがソースプログラムに作成されます。ボタンならクリック以外の イベントを登録しようとは思わないが、たとえばテキストボックスなら チェンジとかクリックとかいろいろなイベントがあるわけですが、 それを登録するにはどうするのですか。以前のバージョンならクリックして フォーカスをあわせて右クリックすればできたようですが。
>>828 WTLは全くMFCに依存していない。(ATLにはべたべただが)
MFCと同名・似た名前のものもMFC抜きで使える。
831 :
デフォルトの名無しさん :2006/09/28(木) 10:34:36
StreamReader って、C++2005 Express Edition でも使えるんですか ファイル操作関係で、CStdioFileも駄目なんですよね。
StreamReaderは.NET Frameworkの一部だから使える。 CStdioFileはMFCの一部だから使えない。
>>833 自己レスですがC#の事を思い出して
using namespace System::IO;
を入れたらコンパイルが通りました。
もっとピンポイントにusing System::IO::StreamReader;がいいよ。
>>834 入れ違いになりましたが、使えそうです。
C++がどんどんC#に似てきていますね。
それC++じゃないから
840 :
827 :2006/09/28(木) 18:18:10
>>830 そうなんですか
うーむ、関数名を見ただけで早とちりしてました
もう少し調べてみます
クラステンプレートについて質問です。VC++6を使ってます。 C++の入門書を読んでクラステンプレートを使ってみました。 ヘッダーファイルに全部記述しないとダメみたいですが使用できることがわかりました。 型が違うだけの同じクラスを、沢山作らなくていいので超便利です。 そこで、調子こいて、クラステンプレート内で、こんな感じで map.insert( pair< int, T* >)( iKey, aaa ) ); とSTLのmapやvectorを使ってみたのですが、そうすると 「typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。」 とかエラーがでてしまいました。 そこで質問です。STLの関数の引数にクラステンプレートのクラスを 指定するのは可能なんですか? よく考えたらSTLもクラステンプレートだから無理なんですか?
>>841 >map.insert( pair< int, T* >)( iKey, aaa ) );
↑の括弧の付け方がおかしいだろ。下のようにしてみたら?
map.insert( pair< int, T* >( iKey, aaa ) );
>>841 それmap.insert(pair<int, T*>(iKey, aaa));だと思う。
余計な閉じ括弧が付いている。あと、make_pair便利だよ。
まあそんなんでコンパイルできるようになるとは思えないけどな。
そもそもVC++ 6は、テンプレート周りがだめだめなことで有名。
それどころか現在の標準C++からもだいぶ外れている。
VC++ 8 (2005)がただで使えるからそっちも試してみるといいよ。
844 :
841 :2006/09/29(金) 23:08:38
>>842 >>843 本当だ!orz
余計な「)」を取り除いたらコンパイルできました!ありがとうございます。
これからいろいろ勉強しようと思っているので、VC8とか入れてみようと思います。
VISUAL C++ 2005 Express Edition で 文字列5000個の配列を作るにはどうすればいいですか。 個数指定なしでは array<String^>^ aName; でコンパイルはいけますが 実行エラーが出るので、サイズが関係していると思い array<String^>^ aName = gcnew String[5000]; だとコンパイルエラーになります。
array<String^>^ aName = gcnew array<String^>(5000); プログラムの移植(ry - C++/CLI移行ガイド - マネージ型 - CLR配列の宣言 を参照するといい。
>>846 ありがとうございます、コンパイルは通りました。
ご教示の場所はこれから見てみます。
フォーカスについて質問です 現在親ウィンドウに子ウィンドウを一つだけ貼り付けています 子ウィンドウでキーボード入力を処理したかったので SetFocusを使うとキーボード入力を受け付けました しかし、キーを一つ入力すると、 すぐに親ウィンドウにフォーカスが移動します 特に何もしてないのに勝手に親ウィンドウにフォーカスが移動するのは なぜなのでしょうか # MSDN(ウェブ)の検索のコツってあるんですかね # フォーカスがないとWM_KEYDOWNがこないというのも # 個人のホームページで見つけるまでわからず。
849 :
848 :2006/10/01(日) 03:38:43
すいません勘違いでしたスルーでお願いします
レイヤー管理を行うプログラムを作っています. PhotoShop,Painter,Sai等の様なレイヤーコントロールのGUIを作りた いと思っているのですが,どのように実装したらよいでしょうか? リストビューを使って行列表現をしてアイコン画像を表示する方法が 一般的かと思いますが,他に良い方法があったら教えてください?
>>850 作ろうという意気込みは立派なもんだ
でも、PhotoShopしかり、あんな値なソフト
を、一朝一夕でつくるのは厳しい。
でも、がんばっちゃえ。
すごく簡単なはずの事がわからないです。 Visual C++.net(2002)で画面を閉じてプログラムを終了するのって何ですか。 C++2005やC#ではthis.Close(); なのですが
自己レスですが this->EndDialog(0); でうまくいったようですが、これでいいのですか。
さあ
しるかよ
ここは初心者に過酷な初心者スレですね
>>853 MFCのダイアログを閉じるとかなら、まあそれでも。
外から閉じたい時の常道は、WM_CLOSEをSendMessageする、
CloseWindowを呼ぶ等。
で? 結局これでいいのですか?
>>856 852です。
先に
this->CloseWindow();
をやったけど最小化するだけどした。
メニューもなく×ボタンも無いのでデバッグのデバッグの停止で終了させると
いう動作になりました。
this->Close();
>>859 Visual C++.netではコンパイルエラーになります。
C++2005ってthis.Close()でコンパイルとおるん?
VC.netでプログラムを使ってリリースして、 VC環境の無いPCで実行しようと思ったらできなかったんだけど 何か特別なことしないといけないのかな?
int a[10]; と、宣言した配列変数aを事情があって、プログラム実行中に a[11]に増やしたいんですけど、どうすればいいのでしょう? もちろん、それまでa[1]〜[10]に入ってた値はそのままで
馬鹿は放っておこう
>>862 リリースしたなら大丈夫
何か特別なことはいらない。
>>861 this->Close();
ならC++2005でコンパイル通ります。
this.Close()はC#ですね。
>>852 プロジェクト作るとき、何を選択したか書けよ…
C++2005だって、プロジェクトの種類によってはそれは通らんよ。
>>863 C++ならstd::vector使え、Cならmallocを使え。
馬鹿は放っておこう
馬鹿は869だろうが、スレタイすら読めんのか
>>867 サンクス。
mallocは、何回か使うと、メモリ関連が原因で不安定になると書いてあったので
躊躇してたのですが、std::vectorでいってみます。
872 :
デフォルトの名無しさん :2006/10/04(水) 14:48:46
おいおい、そんなバカなことよく信用するな。 それに独自のアロケータ書かない限り、同じヒープから割り当てられると思うよ。
>>871 >mallocは何回か使うと、メモリ関連が原因で不安定になると書いてあった
何その糞本。今すぐ焼いて捨てた方がいいよ。
なんでreallocじゃなくてmallocなんですか?
馬鹿は放っておこう
876 :
デフォルトの名無しさん :2006/10/04(水) 20:44:47
Borland のCコンパイラ 5.5.1を使っています。 char str[] = "我輩は猫である。"; とすると配列の長さをあわせてくれますが、 char *s; s = (char *)malloc(100); strcpy (s, "我輩は猫である"); この、文字列の長さに合わせて配列を宣言したいのですが、 どうしたらよいでしょうか? char str[] = s; とか char str[strlen(s)+1]; とかしても 型が変換できないというエラーが出るものでわかりません。
char* s = (char *)malloc(strlen("hoge")+1);
ここVCスレですよ
879 :
876 :2006/10/04(水) 21:00:42
すみません。 スレを間違えました。
880 :
デフォルトの名無しさん :2006/10/04(水) 21:13:40
VC++Expressを使っているのですが、行番号の表示をするにはどこをいじれば良いんでしょうか。
ツール->オプション->テキストエディタ->すべての言語(ないしは任意の言語)->全般
スレ違いかもしれませんが VCで作ったプログラムのテスト項目書を作りたいんですが どういった項目を作ったらいいか分かりません こういうことを解説してるサイトとかありますか?
先輩に聞け。 すぐ側に居眠りして仕事してないのがいるだろ?
>>882 馬鹿みたいな動作をツリー状に派生させていけばおk
>馬鹿みたいな動作をツリー状に派生 「びっくりするほどユートピア」 からどう派生しよう・・・?
すべてのプログラムをフックし、ダイアログメッセージを表示する際に そのメッセージの内容を取得し、ダイアログを表示する代わりに画像を表示したいのですがどうしたら よろしいでしょうか。
apiフック?
890 :
デフォルトの名無しさん :2006/10/06(金) 21:31:17
ポインタのポインタの意味をおしえてください。
□ ポインタのポインタ ↓ □ ポインタ ↓ □ 変数
つ【多次元配列】
多次元配列とポインタのポインタは等価か?
その話題秋田
>>890 ポインタで出来る事を考えろ。
ポインタとは何かを考えろ。
行儀良いグローバル変数の使い方が出来るようになる…かもな。
896 :
デフォルトの名無しさん :2006/10/07(土) 00:37:54
コードエディタでよく使うキーボードショートカットで おすすめあったら教えて。 Ctl+DELで次の単語まで削除とか知ったとき嬉しかった。 カスタマイズしたらviみたくできるの?
タブ切り替え (Alt + W)×2 前のタブ Ctrl + Tab キーマクロ Ctrl + Shift + R Ctrl + Shift + P 現在の単語の終わりまで移動する方法ない?(≠次の単語の先頭) マクロ組むときに欲しい
Ctrl+カーソルキーじゃだめ?
俺もそれだが、駄目か? まあ、ちょっと中途半端な動作するよな。 馴染んじまったので、嫌いな動きじゃないんだけども。
900 :
デフォルトの名無しさん :2006/10/07(土) 03:34:01
デリゲートを素人にも優しく簡単に説明してちょ。
ちょっと腹の調子が悪くて下している日の事。
902 :
デフォルトの名無しさん :2006/10/07(土) 09:33:12
それはゲリデートではないのでしょうか?
>>900 電話すると30分以内に門を持ってきてくれる商売
キーボードの/のコマンドの右横のコマンドを押すと¥が出るんですが どうすれば直りますか?
>>898-899 それだと、次の単語の先頭、なんだよな
もちろんそれも大事なんだけど、それとは別に欲しいんだよ('A`)
はて、キーボードにコマンド? キーのことでいいのかな? それはさておき素朴な疑問だが、"/"の隣には"."とSHIFTしかないのだが。
英語キーボードかよ!
すいませんバックスラッシュの話です ariaに直そうと思うんですが officeのオプションで確認するとarial unicode msとなっているのに バックスラッシュを押しても¥が出ます
>>909 日本語キーボードのアサインだとそれが普通じゃない
>>911 まず、何に使いたいのかを聞きたいんだけど
プログラム書くときに使うので
\ とバックスラッシュは、内部的には同じもの
>>874 ていうか元の質問の回答はreallocだろ。
916 :
デフォルトの名無しさん :2006/10/08(日) 12:33:51
MFCを使わずにWin32だけで作ってきたプロジェクトで MFCを使ってダイアログ表示させたいんだが むり?
917 :
デフォルトの名無しさん :2006/10/08(日) 18:29:44
enum型のデータ(ここではD3DFORMAT)を保存したいんだが int型にキャストして戻しても大丈夫?
enum型のままでいいじゃん。
919 :
デフォルトの名無しさん :2006/10/08(日) 22:08:51
今、ダイアログボックスにスライダーを配置したのですが、 いざ実行し表示させてみると、スライダーの背景が白になってしまい、 スライダー以外の背景が灰色なのでどうも違和感が出てしまいます。 どうすればスライダーの背景色を灰色にできるのでしょうか? 開発環境はVisualC++6.0でWindowsXP、MFCは使わずWin32APIで作っています。 どうか、よろしくお願いします。
>>909 ツール→オプション→互換性→「バックスラッシュを円記号にする」のチェックをオフにし、OKを押す。
初期状態でこれがオンになっており、オンになっているとMS Wordでは欧文フォントを使っていても、
バックスラッシュを円記号の字体を持っている日本語フォントで表示するようになる。
もちろんこれは見かけだけの問題であり、
>>914 のいうとおり。
何から手をつけたらいいのかわかりません、。
とりあえず手を動かせ! MSDNを「チュートリアル」で検索して、めぼしい所から読み進めていけ!
923 :
デフォルトの名無しさん :2006/10/09(月) 13:52:29
919です。自己解決しました。ダイアログのプロシージャの戻り値の型を 小文字のboolから、大文字のBOOLに変更するとうまくいきました。 boolとBOOLって違うのですか?
>923 BOOL の上にマウスカーソルを持っていって右クリック、 出てくるコンテキストメニューにある [定義に移動] を左クリック。
925 :
デフォルトの名無しさん :2006/10/09(月) 17:38:23
次スレまだ〜
>>923 boolはC++の組み込み型。
BOOLはWindows APIの一部としてintからtypedefして作られた型。
>>925 慌てるな、まだ早い。
2005にしてから間違ってF1キーを押すとうちだとブラクラだお(^ω^;)
MFC8.0を学びたいのですが、どういった書籍を買えば良いでしょうか?
932 :
デフォルトの名無しさん :2006/10/10(火) 03:49:37
>>924 ,926さん
どうもありがとうございました。おかげでスッキリしました♪
933 :
デフォルトの名無しさん :2006/10/10(火) 11:46:49
はじめまして。 わけあってC++でプログラミングをしなければならなくなった者です。 プログラミングの完全なる初心者で、参考書の最初のほうの初歩レベルでストップしてます。 …こんなプログラムを作りたいんだけどどうしたら良いですか? みたいな質問も受け付けてくれますか?
>>933 そのプログラムがどうしても、VC++でないと作れないということでしたらどうぞ。
そうでなくても叩かれる覚悟があるならどうぞ。
>>935 既に>934で叩かれてるねw
>>933 「わけあって」のわけ次第だな。
仕事でお鉢が回ってきて、周囲にプログラミングを判るのが誰もいないなら、
案外プログラムを作る以外の解決策があるかもしれない。
他の部署からプログラミングに配置転換ということなら、諦めた方が早いがな。
937 :
デフォルトの名無しさん :2006/10/10(火) 11:58:54
>>935 ありがとうございます。
C++Builder 6を用いて、画像解析をしたいのですが…
まずは、『画像ファイルを開く』
『画像のピクセルデータ(R・G・B)の取り出し』
『計算結果の可視化』
『可視化画像の保存』
という4つが出来ればいいものと考えています。
説明不足でしょうか?
( ゚д゚)ポカーン
939 :
デフォルトの名無しさん :2006/10/10(火) 12:04:13
>>936 『わけ』は、アカハラってことで。
さらにご説明を…
2枚のデジタルカメラ画像をそれぞれR・G・Bに分解して、そのデータ同士で計算します。
NDVIっていう値をご存知でしょうか?
マルチはするし、スレ違い(ここはC++Builderスレじゃない)だし、 アカデミックハラスメントが理由だし、植生指標なんてどう見ても専門ネタだし。 この板で解決策が得られる可能性は完全に消えたな。
>935を読んだ上で敢えて書いているのだから、よっぽど叩かれる覚悟があるんだろ。 植生関係か。取り敢えず学会誌に登録しているアドレス宛てにメールでもばら撒くか。
943 :
デフォルトの名無しさん :2006/10/10(火) 12:23:00
了解です。 お騒がせいたしました。ありがとうございました。
皆、見事に釣られたな。
945 :
デフォルトの名無しさん :2006/10/10(火) 12:30:55
インテルのサンプルプログラムが見れるって聞いたんですがどこにありますか?
946 :
デフォルトの名無しさん :2006/10/10(火) 12:34:30
947 :
デフォルトの名無しさん :2006/10/10(火) 12:36:24
もうちょっと詳しいのはありますか?
>>939 c++の基礎からすべてを教えるとなるととても1スレじゃ足りない
とっかかりが解らないのならばまず参考書を眺めなさい
そして実際にサンプルでもいいので動かすことです
そうすると次に何をしないといけないかが明確になってきます
それをただひたすら繰り返すだけです
途中でどうしても行き詰ったら専門のスレに質問してみましょう
何がわからないのか明確であれば大抵は質問の必要性はありません
大抵の情報はネット上にいくらでも転がっているからです
質問するのは、どうしても情報が見つからないマニアックなネタか
ただの馬鹿です
マニアックネタは運が良くないと叩かれるだけですw
このスレの存在意義に関わる発言だなw お前たちゃ何か、初心者さんが釣れるのを待って袋叩きにしたい人々か。
オイ、サマージャンボしろよ
>>949 >C++Builder 6を用いて、
人を馬鹿にするのも大概にしてもらいたいね。
だよな。 せめて、BDS2006を使えよ。
くだすれVisual C++(超初心者用)
スルーすりゃいいのに、自分に向けられた発言だと思い込む人もいるんですね。
うん。
うんにゃ。
>>933 は何を思ってこのスレッドを質問対象にしたのだろう
そんなことを考えて眠れなくなりそうだ
つーか、眠れないw 明日4時おきなのに・・・
>>958 後26時間もあるんだから、今眠れなくても問題ないだろ。
>>959 間違った、今日の4時
あと2時間半でおきなきゃ
その状況で寝ると、大音響の目覚ましをスルーするか、 さもなくばスヌーズつきの目覚ましをきっちり止めて棚に戻したことも 記憶に残らずそのまま寝直す漏れがきましたよ。
>>937 スレ違いなんでこれ以上はレスしないけど。
MFCなら一応CBitmap, BCBならTBitmapというのがあるけど画像処理用では無いので細かい
ピクセル扱うには使い辛い、画像処理系ならこの辺は自作が基本、詳しくはCreateDIBSection等
でぐぐってみ、後画像のロードもヘッダ解析して自前でロードが基本、その辺が面倒なら描画
は遅いけどGDI+等のライブラリなどを使う方法もある、MSから落とせたりその辺にヘッダ込み
で置いてたりするけどVC++では無くBCBの場合はそのままでは使えないのでインポートライブラリ
は自分で用意の事。
ビットマップだけならLoadImage、JPEGとかも対応するならOleLoadPicture って感じで自分は手抜きしてる。ヘッダ解析('A`)マンドクセ
>>963 OleLoadPictureは使った事無いけどLoadImageってDDBじゃなかったっけ、ピクセル
参照するのにGetDIBitsでオリジナル以外にコピー作成するし、メモリ転送のオーバヘッド
や保存する場合結局BITMAPINFOでヘッダ作る必要があったりでイマイチ効率的で無い気が、、、
LR_CREATEDIBSECTIONでDIBゲット(゚Д゚)ウマー
>>961 スレ違いなので、これで最後
結局1時間だけ眠って、日帰り出張行ってきたよ
往復7時間の移動+防塵ルーム5時間の過酷なスケジュールだったけど
なんとかソフトも立ち上がって無事帰ってこれたw
さすがに眠い
967 :
デフォルトの名無しさん :2006/10/12(木) 17:34:48
VC2005 MFC ダイアログベースでやっております。 自分で関数を作ってそれを使おうと思ったらこのようなエラーがでました。 [ファイル名]Dlg.cpp ファイルの中に書いてあります。 error C3861: 'Get8': 識別子が見つかりませんでした error C2365: 'Get8' : 再定義; 以前の定義は '以前は不明な識別子' でした これはどういうことでしょうか? 関数自体は正しく書けてるのですが、その関数を実際使おうとするとこのエラーになります。 お願いします><
>>967 「Get8」という名前が有効でない場所で使おうとしている。
それだけでは、これしか言えない。
>>967 Dlg.hにGet8のプロトタイプ書いてないなんてオチは勘弁な
>>969 別にプロトタイプなんて要らないじゃん。
#つーことは、>967はそれ以前の状態か。
外部のexeやdatに引数を渡して実行したいんですけど、どうすれば良いんですか?
>>971 datってなんだ?
exeは
system("a.exe aaaaabbbbcccc");
とか?
973 :
967 :2006/10/12(木) 22:12:46
>>968-970 うーん、それ以前の状態と。。。
私はただ、ボタンがクリックされた時のアクションとかを書くところに
void CpictORGDlg::OnBnClickedButton4()
{
・・・
a=Get8(2, i, j, pDC);
}
Get8(int a, int b, int c, CDC* pDC)
{
return ほにゃらら;
}
みたいにすぐ下にGet8を書いただけなんですけど他にやるべきことがあったのでしょうか?
Get8(int a, int b, int c, CDC* pDC) { return ほにゃらら; } void CpictORGDlg::OnBnClickedButton4() { ・・・ int a=Get8(2, i, j, pDC); }
975 :
デフォルトの名無しさん :2006/10/12(木) 22:29:02
VC++2005ですが、ヘッダーファイルを記述しなくても 関数が使えるのはなぜでしょうか?
976 :
967 :2006/10/12(木) 22:44:48
>>974 入れ替えるだけでできました><
すいません、こんな単純なことで><
>>975 C++ではなく、Cならプロトタイプ宣言(の含まれたヘッダをインクルードすること)なしでも関数を呼び出せる。
決して勧めはしないが。
978 :
デフォルトの名無しさん :2006/10/12(木) 23:40:44
>>977 VC++2005でもできましたが?
やはり、ヘッダ書いた方が動作が速かったり、誤作動起こさない
っていうのがあるのでしょうか?
は?
>974のように、先に定義がある場合はプロトタイプ宣言は必要ない。 逆に言えば、定義がない場合や定義より先に使いたい場合には必要となる。
>>972 間違えました、batです。
systemはbatも実行できますか?
文字列を渡してFindFirstFile関数でファイルをチェックする関数を作ったんですけど、 寿命の短い範囲にHANDLE変数を宣言して、頻繁に生成と破棄を繰り返すのは邪道ですか?
985 :
デフォルトの名無しさん :2006/10/13(金) 08:20:32
>>977 インクルードしなくても動作するのになぜインクルードしないと
いけないのですか?利点はなんですか?
もはやスレ違い
>>985 標準関数についてならば、標準インクルードファイルをインクルードすると型チェックが正しく働くと言うメリットがある。
例えば、string.hをインクルードせずにstrcpy()と書くとコンパイルはできるが当然まともには動かない。
VisualC++6.0を使ってBMPファイルをリソースから ロードするプログラムを作っているのですが、 コンパイルした後、EXEを別の場所にもっていって 実行すると、bmpファイルが見つからないエラー が発生します。 DebugおよびReleaseフォルダに作成される Script1.rcには間違いなく画像データが組み込まれて いるのですが、これは何故なのでしょうか。
990 :
989 :2006/10/13(金) 15:30:08
>>989 Script1.rcではなくて
「Script1.res」の間違いです
991 :
989 :2006/10/13(金) 15:45:21
すいません、自己解決です。 別のリソース(Xファイル)からbmpを コールしているところがありましたorn..
>>978 VC++ 2005だって拡張子がcのファイルをコンパイルさせればCコンパイラとして働く。
今DialogクラスのOnInitDialog内でリストにデータを挿入するコードを記述しております。 CListCtrl* pTeikouCtl = (CListCtrl*)GetDlgItem(IDC_LIST); for(int iCnt = 0; iCnt < (int)m_Vector.size(); iCnt++){ pTeikouCtl->InsertItem(iCnt, vector[iCnt]); } UpdateData(FALSE); 実行してみたのですがリストには何も入っていませんでした。 どこか間違いなどありましたらご指摘をお願いいたします。 開発環境 VS2005 MFC WinXP SP2
コードが少し間違っておりました。 今DialogクラスのOnInitDialog内でリストにデータを挿入するコードを記述しております。 CListCtrl* pListCtl = (CListCtrl*)GetDlgItem(IDC_LIST); for(int iCnt = 0; iCnt < (int)vector.size(); iCnt++){ pListCtl ->InsertItem(iCnt, vector[iCnt]); } UpdateData(FALSE); 実行してみたのですがリストには何も入っていませんでした。 どこか間違いなどありましたらご指摘をお願いいたします。 開発環境 VS2005 MFC WinXP SP2
>>994 IDC_LISTはリストビューコントロールのIDか?
リストビューの表示タイプ(Icon,Report等)は?
表示タイプがReportの場合カラムヘッダはちゃんと追加してあるか?
InsertItemの戻り値は?
996 :
994 :2006/10/13(金) 21:49:35
>>995 リストビューではなくリストボックスでした。リストビューに変更したほうがよろしいでしょうか?
ちなみにInsertItemの戻り値はすべて0でした。
997 :
995 :2006/10/13(金) 21:57:36
>>996 好きなほう使えばいい。
リストボックスを使うならGetDlgItemの戻り値をCListBoxにキャストして
AddStringすればいい。
998 :
994 :2006/10/13(金) 22:03:57
>>997 リストボックスのままで行きます。
教えてもらった方法でうまくデータを挿入できました。
ありがとうございます。
↓
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。