■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part17
1 名前:デフォルトの名無しさん :05/02/09 14:29:49
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

  質問の仕方については次のページが大変参考になります。
  http://www.hyuki.com/writing/techask.html
  http://www.geocities.co.jp/Beautycare/4965/public/template.html
  http://myu.daa.jp/osiete/

■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。

【前スレ】
★初心者にVisual C++を教えるスレ★ Part16
http://pc5.2ch.net/test/read.cgi/tech/1101022051/

過去スレ、関連スレなどは>>2-5ぐらい。

2 名前:デフォルトの名無しさん :05/02/09 14:31:26
【過去スレ】
Part15 http://pc5.2ch.net/test/read.cgi/tech/1097880265/
Part14 http://pc5.2ch.net/test/read.cgi/tech/1093672937/
Part13 http://pc5.2ch.net/test/read.cgi/tech/1089011118/
Part12 http://pc5.2ch.net/test/read.cgi/tech/1083585833/
Part11 http://pc5.2ch.net/test/read.cgi/tech/1077965179/
Part10 http://pc5.2ch.net/test/read.cgi/tech/1074933908/
Part09 http://pc5.2ch.net/test/read.cgi/tech/1068983609/
Part08 http://pc5.2ch.net/tech/kako/1063/10630/1063029371.html
Part07 http://pc5.2ch.net/tech/kako/1056/10562/1056280510.html
Part06 http://pc5.2ch.net/tech/kako/1052/10529/1052931903.html
Part05 http://pc5.2ch.net/tech/kako/1048/10486/1048698321.html
Part04 http://pc5.2ch.net/tech/kako/1044/10441/1044196393.html
Part03 http://pc5.2ch.net/tech/kako/1038/10381/1038160750.html
Part02 http://pc3.2ch.net/tech/kako/1030/10309/1030985362.html
Part01 http://pc3.2ch.net/tech/kako/1023/10235/1023530449.html

※「いや〜、ごめんなさい」により、紛失の可能性。

3 名前:デフォルトの名無しさん :05/02/09 14:34:48
【関連スレ】
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/l50

Win32API質問箱 Build27
http://pc5.2ch.net/test/read.cgi/tech/1106103119/

鬱だ氏のう DirectX (Part 15)
http://pc5.2ch.net/test/read.cgi/tech/1096649788/l50

C言語なら俺に聞け! Part 101
http://pc5.2ch.net/test/read.cgi/tech/1107128274/

C++相談室 part39
http://pc5.2ch.net/test/read.cgi/tech/1106527792/

C/C++の宿題を片付けます 40代目
http://pc5.2ch.net/test/read.cgi/tech/1107625122/

【初心者歓迎】C/C++室 Ver.13【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1104843249/

4 名前:デフォルトの名無しさん :05/02/09 14:36:22
【関連サイト】
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/

MSDN ライブラリ
http://www.microsoft.com/japan/msdn/library/

Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

Google
http://www.google.co.jp/

【このスレの前身 VisualC++相談室 過去スレ】
part 1 http://piza.2ch.net/tech/kako/970/970607517.html
part 2 http://piza.2ch.net/tech/kako/981/981630730.html
part 3 http://piza2.2ch.net/tech/kako/993/993186053.html
part 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 http://pc5.2ch.net/tech/kako/1036/10368/1036897197.html

5 名前:デフォルトの名無しさん :05/02/10 11:19:09
System::DateTime now = DateTime::get_Now();
String *msg = now.ToString();

now. のときインテリセンスが利かないのはなぜ?
DateTime::の時は利く。 よろしく。

環境は:VS2003 enterprize +XP + 初心者

6 名前:デフォルトの名無しさん :05/02/10 11:28:41
>>5
インテリセンスはおまけ
全然ないよりはありがたいから感謝しろ

7 名前:デフォルトの名無しさん :05/02/10 12:51:39
日本語で書かれたドキュメントすら読まずに質問するなら捨ててしまえ。

8 名前:デフォルトの名無しさん :05/02/10 13:12:18
VC++.Net2003のダイアログエディタでは、
BCBのようにマルチタブなものは作れないようですが、
自分でCreateWindowExで全部作るしかないんですか?

9 名前:デフォルトの名無しさん :05/02/10 13:54:17
>>8
愚痴ならチラシの裏へ
質問なら余計なことは書くな

10 名前:デフォルトの名無しさん :05/02/10 15:10:17
>9
 答えるなら的確に。答えないなら余計なことは書くな。

11 名前:デフォルトの名無しさん :05/02/10 15:19:10
>日本語で書かれたドキュメントすら読まずに質問するなら捨ててしまえ。

 読んでも解らんお前はだまっとれ。喋りたかったら答えを書け。

12 名前:デフォルトの名無しさん :05/02/10 15:21:39
Vs2003のC++用のUMLエディターの起動方法を教えてください。

13 名前:デフォルトの名無しさん :05/02/10 17:20:18
ここは初心者スレ

14 名前:デフォルトの名無しさん :05/02/11 01:14:03
int _tmain(int argc, _TCHAR* argv[])
{
static DWORD dwReadByte ;
LPSTR lpszBuf ;

HANDLE hFile = CreateFile("Sample.txt", GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) ;
if(hFile == INVALID_HANDLE_VALUE){
cout << "file open error" << endl ;
CloseHandle(hFile) ;
return 1 ;
}
lpszBuf = (LPSTR)malloc(GetFileSize(hFile , NULL));
ZeroMemory((LPVOID)lpszBuf, GetFileSize(hFile , NULL)) ;
ReadFile(hFile, &lpszBuf, GetFileSize(hFile, NULL), &dwReadByte, NULL) ;
//free(lpszBuf);
if(CloseHandle(hFile) == 0){
cout << "error" << endl ;
return 1 ;
}
return 0 ;
}

Run-Time Check Failure #2 - Stack around the variable 'lpszBuf' was corrupted.
が出てしまいました。
mallocにてファイルサイズ分確保してると思うんですが駄目みたいです。
デバックでlpszBufを追っていくとReadFileまでいったとこで「不正な ptr」って出てるみたいです
どこが駄目なんでしょうか?

15 名前:sage :05/02/11 01:49:47
ReadFile に &lpszBuf ではなく lpszBuf を渡すべきでは...

16 名前:デフォルトの名無しさん :05/02/11 02:00:18
>>15
エラーでなくなりますた
ありがd

17 名前:デフォルトの名無しさん :05/02/11 12:04:37
>>16
エラーになった理由わかってなさそう・・・

18 名前:デフォルトの名無しさん :05/02/11 19:52:20
TCHARszFilter[]=TEXT("BMP Files(*.BMP)\0*.bmp\0\0");

ZeroMemory(pOFN,sizeof(OPENFILENAME));

pOFN->lStructSize= sizeof(OPENFILENAME);
pOFN->hwndOwner= hWnd;
pOFN->hInstance= NULL;
pOFN->lpstrFilter= szFilter;
pOFN->lpstrCustomFilter= NULL;
pOFN->nFilterIndex= 0;
pOFN->lpstrFile= NULL;
pOFN->nMaxFile= MAX_PATH;
pOFN->lpstrFileTitle= NULL;
pOFN->nMaxFileTitle= MAX_PATH;
pOFN->lpstrInitialDir= NULL;
pOFN->lpstrTitle= NULL;
pOFN->Flags= 0;
pOFN->nFileOffset= 0;
pOFN->nFileExtension= 0;
pOFN->lpstrDefExt= TEXT("bmp");
pOFN->lCustData= 0L;
pOFN->lpfnHook= NULL;
pOFN->lpTemplateName= NULL;

19 名前:デフォルトの名無しさん :05/02/11 19:53:22
↑の続き
pOFN->hwndOwner= hWnd;
pOFN->lpstrFile= pFileName;
pOFN->lpstrFileTitle= pTitleName;
pOFN->Flags= OFN_HIDEREADONLY | OFN_CREATEPROMPT;

GetOpenFileName(pOFN);

これでダイアログは表示されるけど、ダイアログのフィルタの部分の
文字列がバグってます。
どこか間違ってますか?このコード。
フィルタがダメだから、どのファイルも表示されない。
pFileNameはMAX_PATH分、確保されてるので、十分有ると思います。
文字列最後にヌル文字入れてます。pFileName[MAX_PATH-1]のように。

20 名前:デフォルトの名無しさん :05/02/11 20:15:11
pFileName[MAX_PATH-1]=0;の間違い

21 名前:デフォルトの名無しさん :05/02/11 21:22:55
Aというバッファにゴミが入っていたとしよう。
A[n]='\0'; としても、n>0 ならやはり先頭からn文字はゴミである。
それはそれとして、フィルタがおかしいならszFilterが腐ってるんでないの?

22 名前:デフォルトの名無しさん :05/02/11 21:38:44
一目見て間違ってるから
ろくに調べもしないで質問してるに違いない。

23 名前:デフォルトの名無しさん :05/02/11 21:38:45
うにCode関連じゃない?

24 名前:18 :05/02/12 02:19:48
自己解決しました。前にも同じ事悩んでた気がする。
しかも、その時も時間掛かった。

25 名前:デフォルトの名無しさん :05/02/12 13:26:22
>>8をおねがいします

26 名前:デフォルトの名無しさん :05/02/12 16:35:29
>>25
1日待っても回答がないということは、
質問の仕方が悪いのかな?
>>1をよく読んで見たら?

> ■質問するにあたって
> ・エラーや警告のときはエラーメッセージを書きましょう。
> ・開発環境も書きましょう。
> ・できるだけ具体的に。
>
>   質問の仕方については次のページが大変参考になります。

27 名前:デフォルトの名無しさん :05/02/12 17:22:10
MFC使いは一般的にBCBを知らないだろうからね。
MFCにはTabCtrlがあるけど、そのTabPageの中身は自前で用意するのがMFC流だね。

28 名前:デフォルトの名無しさん :05/02/12 22:08:44
リストボックスの中身を消すためにはどの命令を使えばいいでしょうか。
使っているのはVC6です。ご教授お願いします。

29 名前:デフォルトの名無しさん :05/02/12 22:24:13
命令って何?
APIか?

30 名前:デフォルトの名無しさん :05/02/12 22:27:48
そのリストボックスの中身がどうやって出てきたかによるだろうな

31 名前:デフォルトの名無しさん :05/02/12 22:31:57
28です。すいません説明が足りませんでした。
ダイアログボックスのリストボックスです。


32 名前:デフォルトの名無しさん :05/02/12 22:53:51
28です。自己解決できました。


33 名前:  :05/02/13 17:00:45
Visual C++
とはちょっと違うんですけど
突然MSDNが見れなくなりました
ヘルプC:\Pro〜98.colが開けません
ってダイアログが出ます
どうしたら見れるようになるんでしょうか?

34 名前:デフォルトの名無しさん :05/02/13 17:10:34
ウイルスまたはHDDが壊れる前兆

35 名前:デフォルトの名無しさん :05/02/13 17:57:26
warning C4201 が
#pragma warning( disable : 4201 ) で無効化できない件について。

なんで?

36 名前:デフォルトの名無しさん :05/02/13 18:03:36
 C++でAPIを使ってWindowsProgrammingをしようと思うんですが、どうも綺麗にまとまった
プログラムを書くことが出来ません。
 やはりMFCを使って書くのが良いのでしょうか?

37 名前:35 :05/02/13 18:14:52
事故解決。
windows.h が悪さしてますた。orz

38 名前:デフォルトの名無しさん :05/02/13 20:09:13
>>36
たぶんあなたはMFCでも綺麗に書けない。

39 名前:デフォルトの名無しさん :05/02/14 08:47:24
>>26
自己解決しました
プロパティシートとやらをつかうらしい

40 名前:デフォルトの名無しさん :05/02/14 09:05:57
そういうことか
マルチタブって何のことかわからんかった

41 名前:デフォルトの名無しさん :05/02/14 09:09:03
タブが1個ならタブにする意味ないから
タブがマルチのは当然だし
いったい何を意味不明なこと言ってるのかと

42 名前:デフォルトの名無しさん :05/02/14 09:21:21
マルチタブでぐぐってみたらサプリメントだった。
「明治製菓 ザバス プロ スーパーマルチタブ 」とか orz

てっきり吊りだと思ってた。

43 名前:デフォルトの名無しさん :05/02/14 14:40:44
if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != DialogResult::OK){ return; }

と参考書にあったコードをそのまま書いてビルドしたんだけど

------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(348) : error C2039: 'OK_DialogResult' : is not a member of 'System::Windows::Forms::Form'
stdafx.cpp : see declaration of 'System::Windows::Forms::Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(348) : error C2039: 'OK' : is not a member of 'Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(348) : error C2065: 'OK' : undeclared identifier
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

こんなエラーをはいたんで、DialogResult::OKの記述がおかしいの?と思い

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsdialogresultclasstopic.asp
へ飛んで見てみたら
ダイアログ ボックスの戻り値は OK です (通常は "OK" というラベルが指定されたボタンから送られます)。
って書いてるから、

if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != OK)
と書き直したところ

44 名前:続きです。 :05/02/14 14:41:33
------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(348) : error C2065: 'OK' : undeclared identifier
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

と、またエラーをはくのでOKじゃだめなの?と思い、通常は "OK" というラベルが指定されたボタンから送られます。って
書いてあるから今度は

if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != "OK")
と書き直したら

------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(348) : error C3063: operator '!=': all operands must have the same enumeration type
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

って今度は != がなんかおかしいみたいに言うんです。

45 名前:長くてすみませんこれで最後です。 :05/02/14 14:42:17
しょうがないので今度は、

if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != OK)
のOKCancelの上にカーソル置いたら
value enum System::Windows::Forms::MessageBoxButtons::OKCancel = 1
って表示されたので、1か?1でいいのか?と思い

if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != 1)

にしたのですが

------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(348) : error C3063: operator '!=': all operands must have the same enumeration type
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

またこのエラーが吐かれました

たぶん"OK" か 1 が当たりかなと思ってるのですが、それでもエラーが吐かれるので
一体どう書けばいいのかわからず困ってます。どなたか助言いただけないでしょうか。
ちなみに、VC++ 2005 Express Beta1 を使ってVisual C++.NET Version2003 の参考書を見ながらいじってます。
参考書には、
if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != DialogResult::OK)
と書かれてるから、きっと2003では通るんでよね。
2005と2003ではMessageBox::Showメソッドが返す値が違うんでしょうか?

46 名前:デフォルトの名無しさん :05/02/14 15:15:30
>>45
そのShow()の定義を調べよ。
DialogResult::OKの定義も調べよ。

47 名前:デフォルトの名無しさん :05/02/14 15:40:47
MessageBox::Show なんて初めて見た
.netだろうか

48 名前:デフォルトの名無しさん :05/02/14 16:20:49
ぐぐっても出てこないな
コーディングミスだろ
それか参考書の活字が間違ってる

49 名前:42 :05/02/14 16:29:24
>>46
ヒントありがとうございます。

>>47
VC++ 2005 Express Beta1で.NETでプロジェクト生成していじってます。
なので.NETのクラスだと思います。

MSDNで、MessageBox::Showで検索かけてみました。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsmessageboxclassshowtopic5.asp

で、C++でコードが書いてあって

String* message = S"You did not enter a server name. Cancel this operation?";
String* caption = S"No Server Name Specified";
MessageBoxButtons buttons = MessageBoxButtons::YesNo;
System::Windows::Forms::DialogResult result;

result = MessageBox::Show(this, message, caption, buttons);

if (result == DialogResult::Yes)
{
// Closes the parent form.
this->Close();
}

とあったので

if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != DialogResult::OK){ return; }

と比較してみました。
MSDNのMessageBox::Showは、4つ要素が入ってるのがまず違いますね。
何か書き足し忘れてる?と思い

50 名前:続きです。 :05/02/14 16:30:03
if(MessageBox::Show("本当に削除しますか?", "HomeBank", "追加", MessageBoxButtons::OKCancel) != DialogResult::OK){ return; }
追加という文字列を入れてみてビルドしてみました。

が、
------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2665: 'System::Windows::Forms::MessageBox::Show' : none of the 21 overloads could convert all the argument types
stdafx.cpp: could be 'System::Windows::Forms::DialogResult System::Windows::Forms::MessageBox::Show(System::String ^,System::String ^,System::Windows::Forms::MessageBoxButtons,System::Windows::Forms::MessageBoxIcon)'
stdafx.cpp: or 'System::Windows::Forms::DialogResult System::Windows::Forms::MessageBox::Show(System::Windows::Forms::IWin32Window ^,System::String ^,System::String ^,System::Windows::Forms::MessageBoxButtons)'
while trying to match the argument list '(const char [21], const char [9], const char [5], System::Windows::Forms::MessageBoxButtons)'
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2039: 'OK_DialogResult' : is not a member of 'System::Windows::Forms::Form'
stdafx.cpp : see declaration of 'System::Windows::Forms::Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2039: 'OK' : is not a member of 'Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2065: 'OK' : undeclared identifier
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

長々としたエラーがはき出せれてしまいました。

どうやら要素の数が間違ってたわけではないようです。

51 名前:続きです。 :05/02/14 16:31:32
しょうがないので
MessageBoxButtons buttons = MessageBoxButtons::OKCancel;
if(MessageBox::Show("本当に削除しますか?", "HomeBank", buttons) != DialogResult::OK){ return; }

に変えてみた。これだと1行で記述できないなあと思いながらビルド

------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(350) : error C2065: 'Mbuttons' : undeclared identifier
c:\VCNET\HomeBank\HomeBank\Form1.h(350) : error C2039: 'OK_DialogResult' : is not a member of 'System::Windows::Forms::Form'
stdafx.cpp : see declaration of 'System::Windows::Forms::Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(350) : error C2039: 'OK' : is not a member of 'Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(350) : error C2065: 'OK' : undeclared identifier
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

これも違うらしい。

52 名前:長々と申し訳ありません。最後です。 :05/02/14 16:32:09
ちょっと考え方を変えてみて、定義を調べよ。だから

[C++]
public: static DialogResult Show(
String* text,
String* caption,
MessageBoxButtons buttons
);

if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != DialogResult::OK){ return; }

を比較してみた。
要素数もあってる。なにが違うのかわからない(T T)
何か見るとこ間違ってるでしょうか?もうちょっとヒントいただけるとうれしいです。

53 名前:43 :05/02/14 16:35:14
>>48
コーディングミスですか(T T)
if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != DialogResult::OK){ return; }
のコードには何も問題ないということでしょうか。
ちょっとまたいろいろ試行錯誤してみます。

54 名前:デフォルトの名無しさん :05/02/14 16:37:02
.netだし、
thisポインタ抜けてるし。

55 名前:デフォルトの名無しさん :05/02/14 16:46:05
1行にいっぱい詰め込んであると、どこが間違ってるかわかりにくいし、
戻り値の型がわからなくなる。

MSDNのサンプルの方がよさそうだな
System::Windows::Forms::DialogResult result;
これが戻り値じゃん

56 名前:43 :05/02/14 16:48:34
>>54
新ヒントありがとうございます。
thisポインタがどんなものなのかよく理解してませんが

MSDNの
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsmessageboxclassshowtopic5.asp
のC++のコードよく見てみると

result = MessageBox::Show(this, message, caption, buttons);

と、4つ要素があってそういわれてみればthisが先頭要素に入ってますね。
ああこれが抜けてたのかと思い。

if(MessageBox::Show(this, "本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != DialogResult::OK){ return;}

に書き直してビルド

------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2039: 'OK_DialogResult' : is not a member of 'System::Windows::Forms::Form'
stdafx.cpp : see declaration of 'System::Windows::Forms::Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2039: 'OK' : is not a member of 'Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2065: 'OK' : undeclared identifier
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

を吐かれて失敗。

57 名前:続きです。 :05/02/14 16:49:08
今度は
if (result == DialogResult::Yes) {
// Closes the parent form.
this->Close();
      }

の記述見つけて

if(MessageBox::Show(this, "本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != DialogResult::OK){ this->Close();}

に変えてみたけど

------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2039: 'OK_DialogResult' : is not a member of 'System::Windows::Forms::Form'
stdafx.cpp : see declaration of 'System::Windows::Forms::Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2039: 'OK' : is not a member of 'Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(349) : error C2065: 'OK' : undeclared identifier
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

また失敗。

58 名前:デフォルトの名無しさん :05/02/14 17:05:54
C++で.netは超マイナーなのか?
そういうスレが存在しないようだ。
今から.netやるならC#のような気がする。

59 名前:デフォルトの名無しさん :05/02/14 17:12:26
>>55
ヒントありがとうございます。

System::Windows::Forms::DialogResult result;

result = MessageBox::Show(this, "本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel);

if (result == DialogResult::OK)
{
return;
}

に変更してビルドしてみました。

------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(353) : error C2039: 'OK_DialogResult' : is not a member of 'System::Windows::Forms::Form'
stdafx.cpp : see declaration of 'System::Windows::Forms::Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(353) : error C2039: 'OK' : is not a member of 'Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(353) : error C2065: 'OK' : undeclared identifier
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

また失敗。

60 名前:続きです。 :05/02/14 17:12:58
result = MessageBox::Show(this, "本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel);
の先頭の要素のthisをのけてビルドもしてみましたが

------ Build started: Project: HomeBank, Configuration: Debug Win32 ------
Compiling...
Form1.cpp
c:\VCNET\HomeBank\HomeBank\Form1.h(353) : error C2039: 'OK_DialogResult' : is not a member of 'System::Windows::Forms::Form'
stdafx.cpp : see declaration of 'System::Windows::Forms::Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(353) : error C2039: 'OK' : is not a member of 'Form'
c:\VCNET\HomeBank\HomeBank\Form1.h(353) : error C2065: 'OK' : undeclared identifier
Build log was saved at "file://c:\VCNET\HomeBank\HomeBank\Debug\BuildLog.htm"
HomeBank - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

でまた失敗。

更に、このVC++ 2005 Express Beta1は、主にLink関係のエラーの時にですが、再起動したらなぜか
ビルドが通るようになることもあったので、再起動も試してみましたが。
同じことでした。

これは結局、こっち側の記述ミスとかコーディングミスとか設定ミスに原因があるんでしょうか。
それともベータ版だけに開発環境の問題ということはないでしょうか。

61 名前:43 :05/02/14 17:18:53
>>58
えっ?.netでC++って超マイナーなんですか?

Visual Studio 2005 Beta 入れる時にC++をダウンしようかC#をダウンしようかさんざん迷ったんです。
で、C++の方が歴史が長いわけだし、その分C++ユーザはいっぱいいるだろうと思って
C#よりもC++の方が書籍もサイトも多いだろうと思って
なにかあったときに情報収集がしやすいんじゃないかと思ってC++にしたんです。

それが、.netだとマイナーなんですか?
今からでもC#に鞍替えしたほうがベターでしょうか。
まだ VC++ 2005 Express Beta1 入れて、まだ開発環境の操作方法勉強してるぐらい初期段階なんで
C#がいいなら、またダウンしてインストールするのすごい手間と思うけど、がんばって鞍替えしようかと
思いますけど、長い目で見た場合C#のほうがかしこい選択だったんでしょうか。

62 名前:デフォルトの名無しさん :05/02/14 17:23:06
マイナーってかVC6と比較してインターフェースが色々変わったって
話を聞いて乗り換えられない俺。

63 名前:デフォルトの名無しさん :05/02/14 17:56:17
質問です。

CFileクラスを使ってファイル操作をしています。

2GBを超えるファイルを扱った際、2GB以上のポイントにシークすると例外が発生して
「無題のファイルのシークに失敗しました」と表示されます。

これを回避する方法をご教授ください。


64 名前:43 :05/02/14 18:07:36
開発環境の問題かもしれない可能性もはっきりさせたいので

Visual C++ 2005 Betaスレでちょっと確認してみようかなと思います。

65 名前:デフォルトの名無しさん :05/02/14 18:20:06
すいません、初歩的な質問なんですがVC6.0でexit以外で
何か最適なプログラム終了方法ってありますか?

66 名前:デフォルトの名無しさん :05/02/14 18:24:01
PostQuitMessage(0);

67 名前:デフォルトの名無しさん :05/02/14 18:25:50
>>65
深い所から一気に抜けるなら例外投げるといいかもしれない。

68 名前:デフォルトの名無しさん :05/02/14 18:32:03
>>63
CFileのseekじゃ無理。
SetFilePointerを使う。

しかし俺の環境だと何故かSetFilePointerExが使えない。
何だこれ?


69 名前:デフォルトの名無しさん :05/02/14 18:46:47
>>68
Platform SDK Update
最新の入れてるならWINVERを適切に。

70 名前:デフォルトの名無しさん :05/02/14 19:22:37
>>58
スレは一応ある。
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/l50

71 名前:デフォルトの名無しさん :05/02/14 21:02:15
VC++6.0(Visualstudio6.0)はWindowsXPホームエディションにインストールしても
問題なく使えますか?
OSの一部が古いのに置き換わってしまいそうで躊躇してます。
ご教授を

72 名前:デフォルトの名無しさん :05/02/14 22:21:57
>>71
ここはパソコン初心者板じゃないよ
インストールしておかしくなったら自分で直せるだろ
入れて自分で試せ

73 名前:デフォルトの名無しさん :05/02/14 23:05:41
つまんない質問ですが、外部エディタでプログラム書いてコンパイルするのって、一々プロジェクトを作らないといけないのでしょうか。

74 名前:デフォルトの名無しさん :05/02/14 23:58:31
VC++にてコンソールアプリケーションを作っております。
拡張子は".c"です。

malloc等で動的に確保したメモリの中身を
デバッガで見たいのですがどうしたらよいのでしょうか

ローカル変数ですと
char ss[80];
ssの中身を見たいときに
クイックウォッチに"ss"と入力すれば
ss[0], ss[1], ss[2], ・・・, ss[77], ss[78], ss[79]
の中身が一気に表示されて楽なのですが

動的に確保したメモリですと
char *str;
str = (char *)malloc(80);
クイックウォッチに"str"と入力しても
strの中身(*str)しか表示されなくて
デバッグする際に
str[0], str[1], str[2], ・・・, str[77], str[78], str[79]
といちいち入力するのが面倒で仕方ありません。

75 名前:デフォルトの名無しさん :05/02/15 00:20:37
>>73
コマンドラインコンパイル

>>74
メモリビュー

76 名前:デフォルトの名無しさん :05/02/15 01:08:23
すいません、MSFlexGridを使ったダイアログベースのDLLを作っているん
ですが、コンパイルは通るのに、実行時にDebug Assertion Failedが出て、
「occmgr.cppのライン410にエラーがある」と表示されます。

ActiveX実行に必要なAfxOleInit()と AfxEnableControlContainer()は
DLLのInitInstanceに配置しています。DLLでなくダイアログベースの
MFCアプリケーション(ActiveX有効)にするとエラーは発生しませんでした。

この点から、子ウィンドウのポインタ辺りが原因と思うんですが、occmgr.cppを
読んでもよく分からないでいます。


実行環境はVS.2003+Win2000です。CodeProjectを読んでもよく分かりませんし、
どなたかこのような症状を経験した事のある方は居られますでしょうか?

MSFlexGridを使っている方はあまり居られないかもしれませんが、
お心当たりのある方はどうぞご助言ください。



本当は.net framework使ってインターフェースで楽したかったんですけどねえ、
過去遺産の問題でmanaged C++で作れないもので・・・。

77 名前:デフォルトの名無しさん :05/02/15 09:32:13
>>71
一時しか使った事ないけど特に問題無かったと思う。

78 名前:デフォルトの名無しさん :05/02/15 09:35:07
下のプログラムでこのままだと意図した通りにファイルが出力されます。
しかし、一段目のループで y < 11 とすると、なぜかファイルに郵便屋さんが
大量に出現します!!どなたか、解明お願いします。

int x, y, count = 0;
CString ss;
CStdioFile fout;
fout.Open("Test.txt", CFile::modeCreate | CFile::modeWrite);        
for (y = 0; y < 10; y++){
    for (x = 0; x < 8; x++){                
        if (count == 16) {
            count = 0;
            ss = ",\r\n";
        }
        else if (count > 0) 
            ss = ", ";
        else 
            ss = "{";
        fout.WriteString(ss);
        ss.Format("0x%02X", count);
        fout.WriteString(ss);
        count++;
    }
}
ss = "};\r\n";
fout.WriteString(ss);
fout.Close();  

79 名前:デフォルトの名無しさん :05/02/15 09:52:27
>>78
郵便屋さんってなんだ?

80 名前:デフォルトの名無しさん :05/02/15 10:17:49
一画面に限ってのシミュレーションゲーム(仮にファイアーエンブレム)を
作ろうと思ったら、フォーム一杯にピクチャーボックスを敷き詰めるわけですか?

81 名前:デフォルトの名無しさん :05/02/15 10:37:00
>>80
フォーム一杯のサイズでピクチャボックス1個
ていうか、フォームに描画

82 名前:デフォルトの名無しさん :05/02/15 10:41:13
ユニットとかマップチップの画像をメモリに読み込んで、
フォームに描画するような処理を1マスごとにするんですか?

83 名前:デフォルトの名無しさん :05/02/15 10:45:58
好きにすればいい

84 名前:デフォルトの名無しさん :05/02/15 12:21:30
>>82
必要なら既存のライブラリを使えばいい。

85 名前:デフォルトの名無しさん :05/02/15 12:57:41
>>82
それをクラス化して使いまわせばいい。

86 名前:デフォルトの名無しさん :05/02/15 22:08:52
>>78
やってみたけど、特に問題なかったでー。

87 名前:デフォルトの名無しさん :05/02/15 22:26:45
>>76
あてずっぽうで。
AfxGetStaticModuleStateを使ってみるってのは如何?

88 名前:デフォルトの名無しさん :05/02/15 22:45:19
環境
・win2000pro sp4
・Visual C++ .NET 2003 スタンダード

ローカルフックの質問です。
ttp://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_10125997.html
ttp://www.kab-studio.biz/Programing/Codian/DLL_Hook_SClass/07.html
↑を参考に自作フッククラス内にメソッドを押し込んだんですが、

>error LNK2001: 外部シンボル ""private: static struct HHOOK__ * CKeyboardHook::m_hHook" (?m_hHook@CKeyboardHook@@0PAUHHOOK__@@A)" は未解決です。
>fatal error LNK1120: 外部参照 1 が未解決です。
が出てきてしまいます。

解決方法のご教授願います。

89 名前:デフォルトの名無しさん :05/02/15 22:52:14
見てないけど DLL_Hook と書いてあるな

90 名前:デフォルトの名無しさん :05/02/15 23:01:48
HHOOK CKeyboardHook::m_hHook = NULL; とか

91 名前:デフォルトの名無しさん :05/02/15 23:11:33
>90
クラス外でこれをやればよかったんですね…orz
お世話かけました、ありがとうございます。

>89
一応中身はローカルフックのことが書いてありますです。

92 名前:76 :05/02/15 23:15:16
DLL化を諦め気味ですが、とりあえず明日試してみます。
結果は後ほど。

93 名前:76 :05/02/15 23:16:19
あ、すいません>>87さんへの返事です。↑

94 名前:デフォルトの名無しさん :05/02/15 23:36:16
なんか平凡なリンクエラーの模様

95 名前:デフォルトの名無しさん :05/02/16 05:03:00
いったん仮想画面?に描画して、画面にコピーする、
というのをほかのソースの見よう見まねでやってみたんですができません・・・
case WM_PAINT :
hDC = GetDC( hWnd );
hDC2= CreateCompatibleDC( hDC );
SelectObject(hDC2, CreateCompatibleBitmap( hDC , 600, 400) );
SelectObject(hDC2, (HBRUSH)GetStockObject(WHITE_BRUSH) );
PatBlt( hDC2, 0, 0, 600, 400, PATPAINT );
MoveToEx( hDC2, 100, 100, NULL );
LineTo( hDC2, 400, 400 );
BitBlt( hDC, 0, 0, 600, 400, hDC2, 0, 0, SRCCOPY );
DeleteDC( hDC2 );
ReleaseDC( hWnd, hDC );
return 0;
これなんですけど、何がダメなんでしょうか・・・?

96 名前:78 :05/02/16 09:39:56
>>86
ありがとうございます。
お手数おかけしました。
出来たファイルをメモ帳で開くと、Y < 11 の時に文字化けするんです・・・
一応、改行のつもりの\r\nの箇所を\nにしたら、何故か直りました。

97 名前:デフォルトの名無しさん :05/02/16 10:36:14
>>95
できない、だけじゃわかんねーよ。

98 名前:デフォルトの名無しさん :05/02/16 10:50:08
見よう見まねで偶然できても何の意味もないよな

99 名前:デフォルトの名無しさん :05/02/16 12:13:25
プロジェクト全体をビルドするのじゃなくて、
一つのソースをコンパイルする方法って有りません?
コマンドラインじゃなくて。

100 名前:デフォルトの名無しさん :05/02/16 12:20:32
>>99
盲人?
メニューにもツールバーにもあるだろ

101 名前:デフォルトの名無しさん :05/02/16 13:00:10
>>95
なんでBeginPaint使わないの?

102 名前:デフォルトの名無しさん :05/02/16 13:43:28
>>100
ありがと!!

103 名前:デフォルトの名無しさん :05/02/16 18:26:12
6.0から.net2003にバージョンアップしたのですが、
6.0のころにあったClass Wizardがなくなって困っています。
関数の追加やオーバーライドはどうやったらいいのでしょうか。
直接ソースに書いてもいいんですか?

104 名前:デフォルトの名無しさん :05/02/16 18:37:17
>>103
関数・変数の追加 -> クラスビューの任意のクラスで右クリック
オーバーライド -> プロパティウインドウにある、雷マークの右のボタン

105 名前:デフォルトの名無しさん :05/02/16 18:43:53
ありがとう。
もう一つ質問ですけど、プロジェクトとソリューションの違いは何ですか?

106 名前:デフォルトの名無しさん :05/02/16 18:59:33
>>105
プロジェクト + プロジェクト = ソリューション

107 名前:デフォルトの名無しさん :05/02/16 20:40:53
質問です。
アプリケーションに新しい機能を実装するときに、
バージョンアップではなく独立性の高いプラグインを入れる方法を用いたいのですが、
アプリケーション開発にプラグイン方式を使ったことがありません。
概要で良いので、プラグイン方式ってどうやるものなのでしょうか?をお教えください。

もし掲示板では解答が面倒で、この疑問に対して良著があるのでしたらそれをご紹介願います。

108 名前:デフォルトの名無しさん :05/02/16 20:53:20
>>107
Susieのプラグインあたりで練習してみれば?

109 名前:デフォルトの名無しさん :05/02/16 20:54:08
Susie関連を参考にしてみたら?

110 名前:デフォルトの名無しさん :05/02/16 22:19:52
>>107
プラグインをDLLにして、サーバ側ではLoadLibrary

111 名前:デフォルトの名無しさん :05/02/17 00:02:59
>>110
LoadLibraryするのはクライアント側だろ。
プラグインは機能を提供する側(サーバ)なんだから。

112 名前:107 :05/02/17 08:45:53
参考になりました!
thx!

113 名前:デフォルトの名無しさん :05/02/17 11:01:56
すみません。教えてください。
<略>
int a;

while(1){
cin >> a;
if(・・・・略
}

という感じでソースを書いて、ビルド&実行してみると、
数字が入力された場合は問題ないのですが、
数字以外が入力された場合永久ループとなってしまいます。
入力値を数字かどうか判断するか数字以外だとエラーとする方法はないでしょうか?




114 名前:デフォルトの名無しさん :05/02/17 11:27:39
>>113
標準関数でも自分で判定してもどちらでもいいと思いまする。

115 名前:デフォルトの名無しさん :05/02/17 12:11:07
エディットコントロールを数字専用にする

116 名前:デフォルトの名無しさん :05/02/17 12:22:19
質問。
誰か>115が何の積もりでレスしているのか教えてください。

117 名前:デフォルトの名無しさん :05/02/17 12:35:32
ES_NUMBER

118 名前:デフォルトの名無しさん :05/02/17 12:40:43
>>115-117
いやだから、質問者がcin使っているのにあんたらは阿呆ですか。

119 名前:デフォルトの名無しさん :05/02/17 14:30:42
113はWindowsアプリでエディットコントロールを使って書いたのに
うっかりしてcinを使ってしまったのだろう。

120 名前:113 :05/02/17 15:01:47
初心者ですので、本を見ながら勉強しています。
で、最初のプログラムが
Win32 Consol Aplication
を選択して書き始めるもので、
その中でCinが出てきます。
本のとおりに書くと113のような現象となります。
無視して次に進んでもいいのですが、
気になってしょうがないので
皆様のお知恵をお借りしたいです。
対処法をもう少し詳しく教えてください。
初心者ですみません。。
よろしくお願いします。

121 名前:デフォルトの名無しさん :05/02/17 15:10:25
C++初心者はC++スレへ

122 名前:デフォルトの名無しさん :05/02/17 15:17:03
つまり、VC厨はstd::iostreamを使ったことが無いから答えられないと。

123 名前:デフォルトの名無しさん :05/02/17 15:28:46
C++向きの話題をわざわざここでやる意味がない。

124 名前:113 :05/02/17 15:36:41
C++もVC++も使ったことないんですが、
この話題はC++の話題になるのですか??
VC++で書いてるのに??
ちなみにC++の板でCinの話題をみて
解決法らしきものがあったのですが、
VC++で同じようにしたらコンパイル出来ませんでした。。

125 名前:デフォルトの名無しさん :05/02/17 15:57:30
>>124
VC++スレはWin32API、MFC、COMやVC++自体の操作法など標準C++には含まれない物のためのスレ。
cinは標準C++の一部なのでコンパイラにVC++を使っていようがVC++スレではスレ違い。

126 名前:デフォルトの名無しさん :05/02/17 16:16:48
こんなわけわからん宇宙語みたいなのをよくやるよな

もっと有意義な事に時間を使えよ

頭脳土方をそんなにやりたいのかねぇ

127 名前:デフォルトの名無しさん :05/02/17 16:17:09
結構シビアですね、、、
多少のすれ違いでも
困って書いてるので
分かるなら教えてくれても・・・と思うのですが。。


128 名前:デフォルトの名無しさん :05/02/17 16:26:04
「多少違う」 ように見えるかもしれんけど、
解ってくるようであれば 「結構違う」 ことに気づくだろう。

というわけで
>>3

129 名前:デフォルトの名無しさん :05/02/17 17:05:41
とりあえずコード全部書け

130 名前:デフォルトの名無しさん :05/02/17 17:29:23
例外はスルー
スレ違いは適当なスレへ投げろ
見苦しい

131 名前:デフォルトの名無しさん :05/02/17 18:47:05
>>113
CPPはよく分からんので、Cの場合。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
char str[BUFSIZ];
int num;

puts("数値を入力してください");

if(fgets(str, sizeof(str), stdin) == NULL)
{
puts("入力が不正です");
exit(1);
}

if(sscanf(str, "%d", &num) != 1)
{
puts("入力内容が不正です");
exit(1);
}

printf("%d\n", num);

return 0;
}

132 名前:デフォルトの名無しさん :05/02/17 18:55:48
いまさらだけど、VC++6.0のリソースエディタで、バージョン情報の
特定の項目(スペシャルビルド等)を削除することってできますか?

今は使ってない項目は、リソーススクリプトをテキストエディタで
編集して削ってます。

133 名前:デフォルトの名無しさん :05/02/17 18:59:28
>>132
右クリックで消せそう

134 名前:デフォルトの名無しさん :05/02/18 12:30:16
>>133
ブロック丸ごと削除されるけどな。

135 名前:デフォルトの名無しさん :05/02/18 19:37:37
Visual Studio 6 と .NET 2003って同じ環境にインストールできますか?
またしても問題なく動きますか?

136 名前:デフォルトの名無しさん :05/02/18 19:41:14
またしても、問題なく動くことも動かないこともあります。

137 名前:デフォルトの名無しさん :05/02/18 19:50:00
テスト用の環境ないんじゃしょうがない
運は天にまかせろ

138 名前:デフォルトの名無しさん :05/02/18 20:34:56
>>135
VS2003のDiscにある readme.htm を見てみると良い。

139 名前:デフォルトの名無しさん :05/02/19 02:14:10
質問です。VC++5.0久しぶりに駆動させたらマニュアルみれませんでした。
サポート切れ?オンラインマニュアル?
ふるいVC使ってる人、教えてください。

140 名前:デフォルトの名無しさん :05/02/19 02:14:42
二週間ほど込み入っていた問題がようやく解決しそうなので
記念カキコアゲ

141 名前:デフォルトの名無しさん :05/02/19 03:17:02
>>140
ここはおまえの日記帳じゃねぇんだよ。

142 名前:140 :05/02/19 05:18:43
141さん、ここは僕の日記帳ですぽ

143 名前:デフォルトの名無しさん :05/02/19 10:31:15
日記はチラシの裏の裏へ

144 名前:デフォルトの名無しさん :05/02/19 17:39:05
msxml4.dllをインポートして
XMLファイルの内容をXSLファイルに記述してある形式で
CMapStringToStringにKey(タグ名)とValue(エレメント名)に格納したいと思っています
ファイルに落とすのは、普通にTransformNodeメソッド使ったあとにテキストファイルに書き込めばいいのはわかったのですが
そのテキストファイルを読むことなくIXMLDOMDocumentのメソッドを使って、
バッファーにタグ名とエレメント名を格納する方法はあるんでしょうか
おしえてください

145 名前:デフォルトの名無しさん :05/02/19 18:45:08
初心者にVisual C++を教えるスレ

146 名前:デフォルトの名無しさん :05/02/19 19:02:43
質問させてもらいます。
一つのクラス内で処理される変数の個数に限界など存在するのでしょうか?

というのも、VisualC++6.0でダイアログベースのプログラミングをしているのですが、
その中のとある一つのヘッダに変数を二つ追加したらプログラムが正常に動作しなくなりました。
その変数はただ宣言しただけなのでプログラムに直接の影響を及ぼすはずは無いのですが…
ちなみにそれとは別のヘッダに変数を追加したところ問題なく動作しました。

よろしくお願いします。

147 名前:デフォルトの名無しさん :05/02/19 19:32:59
宣言すればメモリを消費するよね

148 名前:デフォルトの名無しさん :05/02/19 21:03:10
名前がぶつかっていたりって落ちはないよな。

149 名前:デフォルトの名無しさん :05/02/19 21:23:07
もともと潜在的なバグがあって、変数を追加することによりメモリ配置が変わって
バグが表面化したんだろ。

150 名前:デフォルトの名無しさん :05/02/19 21:35:35
ヒープ上にインスタンス生成しなきゃいけないクラスとかを
いきなりフレームスタック上のメンバ変数にしたとかいうオチ。

151 名前:デフォルトの名無しさん :05/02/19 22:24:00
>>146
結局プログラムの構造によってそれは起きるの結論で、C++のせいじゃない。

152 名前:デフォルトの名無しさん :05/02/20 03:27:03
>>139
>質問です。VC++5.0久しぶりに駆動させたらマニュアルみれませんでした。
>サポート切れ?オンラインマニュアル?
>ふるいVC使ってる人、教えてください。
だれかおしえてくれ。ヘルプが参照できなくて困っているのだ...

153 名前:デフォルトの名無しさん :05/02/20 05:02:21
質問です。
ウィンドプロシージャ関数内でダイアログを呼び出そうとして
DialogBox(GetWindowInstance(hWnd),MAKEINTRESOURCE(IDD_MYDIALOG),
hWnd,DlgProc);
としました。すると以下のような警告が出てしまいました。
warning C4312: '型キャスト' : 'LONG' からより大きいサイズの 'HMODULE' へ変換します。
どうやらGetWindowInstance関数でインスタンスハンドルを取得した場合に出るようなのですが
その先の改善の仕方がどうにもわかりません、この警告を消す方法を教えてください、お願いします。

154 名前:デフォルトの名無しさん :05/02/20 05:13:19
>>152
HDDのそのセクタかなんかがぶっ壊れてんだろ。

155 名前:デフォルトの名無しさん :05/02/20 06:46:57
>>153
Win64への以降を睨んで、VCやWindows.hは64bitへ対応する準備がなされている。
まずWin64ではハンドル・ポインタが64bitになるのに、int/longは32bitのまま。
だからハンドル・ポインタを格納する整数型にint/longを使っているとまずいので、
そういう警告が出る。(ハンドル・ポインタ→int/longも警告が出る)

http://pc5.2ch.net/test/read.cgi/tech/1108815602/32
ハンドル・ポインタを整数に格納するときは*_PTRを使うことになっている。
すると64bit対応したと見て警告が出なくなる。

今回のGetWindowInstanceは古いものだとGetWindowLongを呼び出すマクロだが、
最近の物だとGetWindowLongPtrを呼び出すように変更されている。
PlatformSDKをアップデートしてみろ。(直接書き替えても別に悪くは無いが)

156 名前:デフォルトの名無しさん :05/02/20 13:54:23
>>154
>HDDのそのセクタかなんかがぶっ壊れてんだろ。
そうなの?
ヘルプみれなくなった
=オンラインマニュアル
=サポート切れ
かとおもっていたが。。。

157 名前:デフォルトの名無しさん :05/02/20 14:25:36
↑インストールし直せよ。

158 名前:デフォルトの名無しさん :05/02/20 14:34:52
パソコン初心者板か?

159 名前:デフォルトの名無しさん :05/02/20 15:39:21
つーかMSに訊けよ

160 名前:デフォルトの名無しさん :05/02/20 18:19:54
C++でCのSprintfの代わりは何? Stringと DoubleとIntegerしか使わない
んだが、IntegerをStringにして表示したい。 (Char*でもCStringでもなく)
StringにするにはConvertとかつかうの? 普通に計算したやつを表示する
だけなんだが。

161 名前:デフォルトの名無しさん :05/02/20 18:22:27
sprintf

162 名前:デフォルトの名無しさん :05/02/20 18:45:31
>>160
SprintfもStringもDoubleもIntegerもない。あー、Charもないな。

163 名前:デフォルトの名無しさん :05/02/20 18:47:13
debugとreleaseってどう使い分けるのですか?

164 名前:デフォルトの名無しさん :05/02/20 18:56:23
プロシージャって何Cじゃー?

165 名前:デフォルトの名無しさん :05/02/20 19:04:12
>>163
デバッグするとき->debug
リリースするとき->release


166 名前:デフォルトの名無しさん :05/02/20 19:11:50
デバッグするとき〜〜〜〜〜 ->自分でモンモン・かりかりする時。
リリースするとき〜〜〜〜〜 ->世の中に解き放つ時。

167 名前:デフォルトの名無しさん :05/02/20 19:34:04
>>165-166
どうも^^
debugフォルダの実行ファイルを実行すると、画像が表示されないのですが、releaseにしたら表示されるんですか?

168 名前:デフォルトの名無しさん :05/02/20 19:35:30
>>160
C++でも#include <cstdio>でstd::sprintfは使えるが、
C++っぽいやり方がお望みならstd::stringstreamを。

169 名前:デフォルトの名無しさん :05/02/20 19:49:21
>>167
両方とも直接実行したらほぼ同じ、debugの方が少し遅いかな。
exeのサイズもデバック情報が入っているので大きいし。

170 名前:デフォルトの名無しさん :05/02/20 19:52:01
>>169
では、配布するときはreleaseフォルダに画像をいれて配布すればいいのですか?

171 名前:デフォルトの名無しさん :05/02/20 19:53:26
+ 自分でデバックコードを書いてあると、ユーザーもそれが見えてします。
リリースする時はデバックコードが入っていない。

172 名前:デフォルトの名無しさん :05/02/20 19:55:01
>>170
ソフトに必要なファイルは、releaseファイルと一緒に入れる。
同じフォルダーかどうかは、設計による。

173 名前:デフォルトの名無しさん :05/02/20 20:04:59
>>171-172
なるほど〜分かりました。
ありがとうございました。

174 名前:160 :05/02/20 20:49:53
>C++でも#include <cstdio>でstd::sprintfは使えるが、
>C++っぽいやり方がお望みならstd::stringstreamを。

sprintfではString変換できないでしょ。
stringstreamはできるんでしょうが、意味的に目的が違うような気がするんですが。
VBだとIntegerがObjectだからInteger.ToString()で変換できたはず。この方が
すっきりするが、Formatなどの表示変換もある。

 ManagedではIntegerのオブジェクトがあるの?




175 名前:デフォルトの名無しさん :05/02/20 21:00:31
>>174
std::string toString(int foo)
{
char buf[sizeof(int) * 3];
sprintf(buf, "%d", foo);
return buf;
}

176 名前:デフォルトの名無しさん :05/02/20 21:02:40
自分でIntegerクラス作ればいいじゃん。

177 名前:デフォルトの名無しさん :05/02/20 21:08:50
インテジャーってなんじゃー

178 名前:デフォルトの名無しさん :05/02/20 21:13:50
>>175
それだったらここまでやろうよ
template<typename T> inline std::string toString(T n)
{
  return (std::ostringstream() << n).str();
}

179 名前:146 :05/02/20 21:19:13
お答えくださった皆さん、ありがとうございました。レス遅れてすみません。
皆さんのヒントを参考にソースを見なおしていたら間違いらしい箇所を発見しました。
今度はそこの直し方で困っていますが、とりあえず独力で頑張ってみようと思います。

本当にありがとうございました〜!

180 名前:175 :05/02/20 21:25:00
>>178
うん、そうも思ったんだけどsprintf()の代わりと書いてたから躊躇してsprintf()仕様にしてみた。

181 名前:デフォルトの名無しさん :05/02/20 22:16:20
ここVCのスレだよな?

182 名前:153 :05/02/20 22:38:40
>>155
ありがとうございます。ためになりました!!
スタートページからPlatformSDKをアップデートしようとしたんですが
更新できる項目がなにもなかったのでwindowsX.hの中を見ていたら
GetWindowInstace関数はGetWindowLongPtr関数を呼び出すように
書かれていました。
それでもこの警告が出てしまうので、実行時には今のところ問題なさ
そうだし、この警告を消すのはあきらめることにしました。


183 名前:デフォルトの名無しさん :05/02/21 00:15:03
>>156
>>HDDのそのセクタかなんかがぶっ壊れてんだろ。
>そうなの?
>ヘルプみれなくなった
>=オンラインマニュアル
>=サポート切れ
>かとおもっていたが。。。
フルインストールし直してもだめだ。
半年くらい前にいじったときにはヘルプみれたのになー。
こういう現象になった人いないの?

184 名前:デフォルトの名無しさん :05/02/21 00:45:51
>>183
ttp://www.microsoft.com/japan/msdn/vs_previous/visualc/techinfo/tips.htm
↑の下から4つ目のQの現象じゃないの?

185 名前:デフォルトの名無しさん :05/02/21 02:22:51
>>160
「どうしても」というわけじゃないなら可変引数の関数は
使用しない方がよろしいかと。

boost::lexical_cast, boost::format でほとんど事足ります。


186 名前:デフォルトの名無しさん :05/02/21 05:52:15
WindowsとUNIXの両方で走るプログラムを書いているのですが、
ところどころOS固有の処理が必要な箇所があり、プリプロセッサの定義でスイッチしているのですが、
#ifdef _WINDOWS と
#ifdef WINDOWS のどちらを使えばいいのでしょうか。どちらでも通るようなのですが。

187 名前:デフォルトの名無しさん :05/02/21 05:55:15
【芸スポ本スレ】強盗自白で非難をあびる優れたタレント活動自粛★99箱【窃盗】@ニュース実況+板
http://live14.2ch.net/test/read.cgi/liveplus/1108932664/

100へ向け協力Plz

188 名前:160 :05/02/21 11:21:31
>175
やってみましたがエラーがでます。std使うための追加コードとか
ありますか?


189 名前:デフォルトの名無しさん :05/02/21 11:26:54
>>188
#include <string> // for std::string
#include <cstdio> // for sprintf()

190 名前:160 :05/02/21 11:29:43
>178
やってみましたが
C++\prjVCtest\prjVCtest\Form1.h(2): error C2059: 構文エラー : ')'
C++\prjVCtest\prjVCtest\Form1.h(2): error C2065: 'T' : 定義されていない識別子です。

になります。

使ってるnamespaceは
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
です。


191 名前:デフォルトの名無しさん :05/02/21 11:29:44
ここC++スレだっけ?
VCスレと思ってたけど気のせいかな?

192 名前:160 :05/02/21 11:35:12
>189
>#include <string> // for std::string
>#include <cstdio> // for sprintf()

これってCのstringのことですか? あのー質問の趣旨は
C++のString(オブジェクト?)に変換したいんですが。


193 名前:デフォルトの名無しさん :05/02/21 11:44:43
>>192
>>162


194 名前:デフォルトの名無しさん :05/02/21 11:45:18
ManagedC++スレってなかったっけ?

195 名前:デフォルトの名無しさん :05/02/21 11:47:01
>>194

>>70

196 名前:デフォルトの名無しさん :05/02/21 11:53:52
>>160 は C++ を知らずに Managed C++ をやろうとしている模様。
sprintf で編集して String に変換汁。

197 名前:160 :05/02/21 12:13:09
>185
これベストのようですね。ありがとう。
>196
 boostのメーリングリストができるくらいだから、まともな方法がないみたいですね。


198 名前:デフォルトの名無しさん :05/02/21 15:05:30
.NETのStringならString::Format()で一発

199 名前:デフォルトの名無しさん :05/02/21 15:37:45
>>182
Win32ではGet/SetWindowLongPtrは単にGet/SetWindowLongを呼び出すマクロになっているだけだからどうしようもない

200 名前:160 :05/02/21 15:53:56
>198
例で示して。

201 名前:デフォルトの名無しさん :05/02/21 15:57:39
っていうか、欲しい機能がなかったら自分で作れよ
それがC++流

202 名前:160 :05/02/21 16:09:16
>201
 作るための最初の例を探してる。

203 名前:デフォルトの名無しさん :05/02/21 16:14:20
ヘルプ読めよ。サンプル載ってる。
それともサンプルが理解できないのか?

204 名前:デフォルトの名無しさん :05/02/21 16:28:26
.netはスレ違い

205 名前:160 :05/02/21 16:35:14
Stringの結合はどうやるの?
MessageBox::Show ("data=" + get_str(123)); //これはエラーする

public:
String* get_str(int i)
{
return String::Format(S"{0}",__box(i));
}


206 名前:160 :05/02/21 16:36:39
>204
えっ、.net以外にもVC++ってあるのか?

207 名前:デフォルトの名無しさん :05/02/21 16:40:24
>>206
スレ見つかるまでROMってろ

208 名前:160 :05/02/21 16:44:05
以後.netも可とする。VC++なので当然だ。

209 名前:デフォルトの名無しさん :05/02/21 16:45:38
>>208
http://pc5.2ch.net/test/read.cgi/tech/1014486422/l50
managed C++ やろうぜ!!

210 名前:160 :05/02/21 16:57:14
>209
 サンクス。

 別スレがあったよ。 208はキャンセルしとく。
色々ありがとさん。
 

211 名前:デフォルトの名無しさん :05/02/21 17:02:41
とことん他人の書いていることを読んでない香具師だなぁ。

212 名前:デフォルトの名無しさん :05/02/21 20:25:19
>>139 >>152 >>156 >>183
Windows XP にSP2入れなかったか?
俺もXP SP1 + VC5にSP2 入れたら見られなくなった。
だから、XP SP2 ははずした。そしたら見られるようになたヨ。


213 名前:182 :05/02/21 21:59:30
>>199 thx!
そうだったんですか、実質的には変わってないということなんですね
移行期間か・・まぎらわしぃーですね

214 名前:デフォルトの名無しさん :05/02/21 22:30:03
初歩の初歩で大変申し訳ないです。

VC++自体はまだ手をつけていないのですが、いずれやってみたいなと思っています。
仮にVS.NETでWin32アプリを作ったとしても、利用側に.NET Frameworkが無いと使用できませんか??
C#は.NET Framework利用してるものなので無くてはならないとわかるのですが...

ホントにすみません・・・

215 名前:デフォルトの名無しさん :05/02/21 22:35:50
".NET Framework"を使用するプログラムなら必要だね。

216 名前:214 :05/02/21 23:16:46
>>215
レスどうもありがとうございます m( _ _ )m

.NET Frameworkに含まれるクラスを使用するなら必要で、
純粋(?)なC/C++/APIを使う程度なら必要ないということですか??

217 名前:デフォルトの名無しさん :05/02/21 23:18:42
>>216
そうだよ。
C/C++だってCのみを使うときは*.cファイルでコンパイルできるだろう

218 名前:214 :05/02/21 23:44:42
どうもありがとうございます。
.NET環境ない人でも利用できるソフトを作りたいな〜と思っていまして(^^

レスありがとうございました m( _ _ )m

219 名前:デフォルトの名無しさん :05/02/22 00:48:25
>>212
>Windows XP にSP2入れなかったか?
>俺もXP SP1 + VC5にSP2 入れたら見られなくなった。
>だから、XP SP2 ははずした。そしたら見られるようになたヨ。
サンクス!
問題解決すますた!
しかし....どういうこっちゃい!

220 名前:182 :05/02/22 10:05:33
おはようございます
>>153の警告を消すのをあきらめるとか言っておい
てやっぱりあきらめられず色々やってました。
結局、WinUser.hというヘッダーファイルにたどり着き
そこにGetWindowLong関数が記述してあったので、
戻り値がLONGとなっていたのをLONG_PTRに書き変えて
リビルドすると警告はきれいさっぱり消えてくれました。

結果目的は達成することができました!ですが最後に質問させてください
勝手に上のようにヘッダーファイルを書き換えてしまったのですが
それによって不具合が生じることなどが考えられるでしょうか?
よろしくお願いします。

221 名前:デフォルトの名無しさん :05/02/22 10:10:11
それなら戻り値をLONG_PTRにキャストしてやれば良いんじゃね?

222 名前:182 :05/02/22 10:25:03
どうもです
戻り値をLONG_PTRにキャストするとLOGN_PTRをHINSTANCEに
変換できないという旨のエラーが出てしまいました。
それと書き換えてない状態でGetWindowInstance関数が戻すの
はあくまでLONG型のデータらしくそれをキャストしても同じ旨の
警告がでるみたいです・・

223 名前:デフォルトの名無しさん :05/02/22 15:37:41
開発環境:Visualstudio .net 2003
症状: 「リリースビルド」でビルドし、「デバッグなしで開始」(Ctrl+F5)で起動すると
プログラムが意図したとおりに動かない。
デバッグビルドおよび、リリースビルドをデバッガ込みで起動したときは正常に動く

質問があいまいですいませんが、このような症状の原因としては何が考えられるでしょう?

224 名前:デフォルトの名無しさん :05/02/22 15:40:12
>>223
バグ。
起動時の作業フォルダの違いの影響もあるかな。
デバッグビルドでCtrl+f5を試してみるとか、
リリースビルドでもExplorerから起動してみるとか、
試してみるよろし。

225 名前:デフォルトの名無しさん :05/02/22 15:54:28
>>224
> デバッグビルドでCtrl+f5を試してみるとか、
これは正常に動きました
> リリースビルドでもExplorerから起動してみるとか、
だめだった

デバッガが使えないとつらい……
printfデバッグでがんばります。

226 名前:223 :05/02/22 16:11:05
原因があっさり判明しました。
メンバ変数のひとつを初期化し忘れ。情けない……

227 名前:デフォルトの名無しさん :05/02/22 20:42:57


228 名前:デフォルトの名無しさん :05/02/22 20:51:57
環境が変わると動かなくなる、良くあるバグだね。

229 名前:デフォルトの名無しさん :05/02/22 23:32:38
SDIでプログラムを作っています
次のような機能を実装するにはどのようにすればいいでしょうか?
  SDIからメニューを選択→自分で作ったダイアログを開く

次の方法を試してみました
まずダイアログベースでCSettingDlgを作る
次に新たなSDIプロジェクトを作って,CSettingDlg.hをインクルードする
この方法ではリソースがうまくCSettingのリソースが利用できず,断念しました

230 名前:デフォルトの名無しさん :05/02/22 23:39:35
>>>222
GetWindowLong の代わりに GetWindowLongPtr を使ってみる?

231 名前:デフォルトの名無しさん :05/02/22 23:54:45
1.挿入−リソース−Dialog
2.挿入−クラスの新規作成−クラスの種類はFormクラス、クラス名適当、
  基本クラスはCDialog、ダイアログIDはさっき作ったやつのIDを

232 名前:デフォルトの名無しさん :05/02/23 00:10:40
>>230
Win32の場合はただのマクロだよ。

#define GetWindowLongPtrA GetWindowLongA
#define GetWindowLongPtrW GetWindowLongW
(WinUser.hより)

233 名前:デフォルトの名無しさん :05/02/23 00:19:38
それにしても、なんで>>232みたいなマクロがあるのかね。
おとなしくインライン関数にしてくれればいいのに……
メンバ関数の名前がその手のマクロとぶつかってちょっと悩んだ。

234 名前:デフォルトの名無しさん :05/02/23 00:21:12
?

235 名前:デフォルトの名無しさん :05/02/23 00:32:41
C言語時代の名残ではなかろうかと。

236 名前:デフォルトの名無しさん :05/02/23 00:45:50
>>229
ttp://mtakahashi.com/cgi.cgi?12813
マルチポストは氏ねや

237 名前:デフォルトの名無しさん :05/02/23 02:37:45
Edit Controlを使って,double型の数字を表示させようとすると
0.123456790123
のように必要以上に桁が多く表示されます(>_<)
0.123
程度で表示させる方法があれば教えてください



238 名前:デフォルトの名無しさん :05/02/23 04:57:47
_stprintf()
CString::Format()

239 名前:デフォルトの名無しさん :05/02/23 11:29:25
>>233
>メンバ関数の名前がその手のマクロとぶつかって
定義位置を表示させたら、そのマクロ定義してるトコロが出て
イラッとさせられる。

240 名前:デフォルトの名無しさん :05/02/23 17:56:03
>>220
>>199
それと221はたぶんGetWindowInstanceを一旦LONG_PTRにキャストしてから
HINSTANCEにキャストするように直せということじゃないか?

241 名前:岐阜 :05/02/23 21:19:10
TRACE();を使いたいんだけど、
引数を照らしあわしてもそんなのないと、
コンパイルが通りません。
なにか、includeかリンクが必要ですか?

242 名前:デフォルトの名無しさん :05/02/23 21:20:09
>>241
MFC使ってる?

243 名前:岐阜 :05/02/23 21:28:30
VisualStudio.net 2003ですよ。

244 名前:デフォルトの名無しさん :05/02/23 21:32:28
メ モ この機能は、MFC ライブラリのデバッグ環境でのみ利用することができます。

245 名前:デフォルトの名無しさん :05/02/23 21:38:27
Visual C++を使っている ⊇ MFCを使っている。

246 名前:岐阜 :05/02/23 21:41:53
つまり、コンパイルを通すにはどうすればいいんですか?

247 名前:デフォルトの名無しさん :05/02/23 21:52:46
>>246
MFCのライブラリをリンクするようにする。
それが嫌ならprintfデバッグをやる。(もちろんstd::coutでもいい)

248 名前:デフォルトの名無しさん :05/02/23 22:51:08
VS2003なら、ATLに似たようなマクロがあったと思われ。

249 名前:182 :05/02/23 23:04:13
>>240

そっか・・そうですよね!気づきませんでした
そのことをまったく考えてなかったです。
目が覚めました。ありがとうございます!

250 名前:デフォルトの名無しさん :05/02/24 01:59:17
岐阜を逆から読むと溥儀
恐れ多いあいしんかくら様になる!


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.