★初心者にVisual C++を教えるスレ★ Part17

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
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
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
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」って出てるみたいです
どこが駄目なんでしょうか?
15sage: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関連じゃない?
2418: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を使って書くのが良いのでしょうか?
3735: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
ぐぐっても出てこないな
コーディングミスだろ
それか参考書の活字が間違ってる
4942: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)
何か見るとこ間違ってるでしょうか?もうちょっとヒントいただけるとうれしいです。
5343: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;
これが戻り値じゃん
5643: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関係のエラーの時にですが、再起動したらなぜか
ビルドが通るようになることもあったので、再起動も試してみましたが。
同じことでした。

これは結局、こっち側の記述ミスとかコーディングミスとか設定ミスに原因があるんでしょうか。
それともベータ版だけに開発環境の問題ということはないでしょうか。
6143: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以上のポイントにシークすると例外が発生して
「無題のファイルのシークに失敗しました」と表示されます。

これを回避する方法をご教授ください。
6443: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
一応中身はローカルフックのことが書いてありますです。
9276:05/02/15 23:15:16
DLL化を諦め気味ですが、とりあえず明日試してみます。
結果は後ほど。
9376: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;
これなんですけど、何がダメなんでしょうか・・・?
9678: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するのはクライアント側だろ。
プラグインは機能を提供する側(サーバ)なんだから。
112107: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を使ってしまったのだろう。
120113: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++向きの話題をわざわざここでやる意味がない。
124113: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
ここはおまえの日記帳じゃねぇんだよ。
142140: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
なるほど〜分かりました。
ありがとうございました。
174160: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();
}
179146:05/02/20 21:19:13
お答えくださった皆さん、ありがとうございました。レス遅れてすみません。
皆さんのヒントを参考にソースを見なおしていたら間違いらしい箇所を発見しました。
今度はそこの直し方で困っていますが、とりあえず独力で頑張ってみようと思います。

本当にありがとうございました〜!
180175:05/02/20 21:25:00
>>178
うん、そうも思ったんだけどsprintf()の代わりと書いてたから躊躇してsprintf()仕様にしてみた。
181デフォルトの名無しさん:05/02/20 22:16:20
ここVCのスレだよな?
182153: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
188160: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()
190160: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スレと思ってたけど気のせいかな?
192160: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
194デフォルトの名無しさん:05/02/21 11:45:18
ManagedC++スレってなかったっけ?
195デフォルトの名無しさん:05/02/21 11:47:01
196デフォルトの名無しさん:05/02/21 11:53:52
>>160 は C++ を知らずに Managed C++ をやろうとしている模様。
sprintf で編集して String に変換汁。
197160: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を呼び出すマクロになっているだけだからどうしようもない
200160:05/02/21 15:53:56
>198
例で示して。
201デフォルトの名無しさん:05/02/21 15:57:39
っていうか、欲しい機能がなかったら自分で作れよ
それがC++流
202160:05/02/21 16:09:16
>201
 作るための最初の例を探してる。
203デフォルトの名無しさん:05/02/21 16:14:20
ヘルプ読めよ。サンプル載ってる。
それともサンプルが理解できないのか?
204デフォルトの名無しさん:05/02/21 16:28:26
.netはスレ違い
205160: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));
}
206160:05/02/21 16:36:39
>204
えっ、.net以外にもVC++ってあるのか?
207デフォルトの名無しさん:05/02/21 16:40:24
>>206
スレ見つかるまでROMってろ
208160:05/02/21 16:44:05
以後.netも可とする。VC++なので当然だ。
209デフォルトの名無しさん:05/02/21 16:45:38
210160: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 ははずした。そしたら見られるようになたヨ。
213182: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"を使用するプログラムなら必要だね。
216214: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ファイルでコンパイルできるだろう
218214: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 ははずした。そしたら見られるようになたヨ。
サンクス!
問題解決すますた!
しかし....どういうこっちゃい!
220182:05/02/22 10:05:33
おはようございます
>>153の警告を消すのをあきらめるとか言っておい
てやっぱりあきらめられず色々やってました。
結局、WinUser.hというヘッダーファイルにたどり着き
そこにGetWindowLong関数が記述してあったので、
戻り値がLONGとなっていたのをLONG_PTRに書き変えて
リビルドすると警告はきれいさっぱり消えてくれました。

結果目的は達成することができました!ですが最後に質問させてください
勝手に上のようにヘッダーファイルを書き換えてしまったのですが
それによって不具合が生じることなどが考えられるでしょうか?
よろしくお願いします。
221デフォルトの名無しさん:05/02/22 10:10:11
それなら戻り値をLONG_PTRにキャストしてやれば良いんじゃね?
222182: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デバッグでがんばります。
226223: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に似たようなマクロがあったと思われ。
249182:05/02/23 23:04:13
>>240

そっか・・そうですよね!気づきませんでした
そのことをまったく考えてなかったです。
目が覚めました。ありがとうございます!
250デフォルトの名無しさん:05/02/24 01:59:17
岐阜を逆から読むと溥儀
恐れ多いあいしんかくら様になる!
251デフォルトの名無しさん:05/02/25 02:34:24
非常に基本的な質問で申し訳ないです。

VC++で新しいプロジェクトを作ると、ソースファイル、ヘッダーファイルといった名前の
フォルダが自動的に作られますよね。

こいつらの中にソースを作っても、実際にはプロジェクトフォルダの直下に
ファイルが作られていくだけです。
自分でフォルダを作成しても、そのフォルダの作成は実際には反映されていません。

フォルダの作成が自動的に反映されるようにするにはどうすればいいんでしょうか?
252251:05/02/25 02:35:57
書き忘れました。
環境はVisualStudio.net 2003です。
253デフォルトの名無しさん:05/02/25 03:18:29
>>251
ファイルの在り処としてのフォルダと、プロジェクト内での分類としてのフォルダには関連性がありません。
どうしても、ということであれば自分でマクロでも書くしかないでしょう。
254デフォルトの名無しさん:05/02/25 19:32:54
8BitDIBのカラーテーブル(パレット)位置教えてください。

LPRGBQUAD pColor = (LPRGBQUAD)(pBMPTop +sizeof(BITMAPFILEHEADER)+
sizeof(BITMAPINFOHEADER));
で合ってますか?
255デフォルトの名無しさん:05/02/25 19:38:09
それはファイルに格納されたビットマップということ?
それなら良いよ。
256デフォルトの名無しさん:05/02/25 21:07:31
レス違いだったらすいません。
フリーソフトを使おうとしたら下記のようなエラーが表示されるのですが
全然意味が分からないので、教えて頂きたいのですが。
宜しくお願いします。

=== Microsofi Visual C++ Debug Library ===

Debug: Assertion Failed

program:c\ program files\Ghost Tracer\Ghost Tracer.exe
File:fpreintf c
Line:56

Expression:str!=NULL

For information on how yor program can cause an assertion
failure see the Visual C++ docuentation on asserts.
(Press Retry to debug the application)
257デフォルトの名無しさん:05/02/25 21:23:12
fpreintf c の56行で文字列ポインターにヌルポが発生したのでもう一度デバックしろ。
258デフォルトの名無しさん:05/02/25 21:33:36
>257
早々のレスありがとうございます。(^_^;)
折角レスを頂いたのですが
257さんの言っている単語などがわからないので
257さんの言っていることを勉強してきます。
ありがとうございました。
259254:05/02/25 22:51:00
>>255 Thanks
260デフォルトの名無しさん:05/02/26 01:11:54
テキストファイルから特定の文字列の入った行を一行だけ
削除することは出来るでしょうか

abc
def
ghi

ってテキストファイルのdefの行を消して

abc
ghi

にするにはどうすればいいですか?
261デフォルトの名無しさん:05/02/26 01:18:21
>>260
abc
ghi
を出力する。
262デフォルトの名無しさん:05/02/26 01:47:49
>>261
すいません
意味がよくわかりません

特定の文字列defは、テキストファイルの何行目に入っているかはわかっていません
テキストファイルを読み込んでいる時に
defの行だけを消したいのですが
263デフォルトの名無しさん:05/02/26 02:18:11
grep -v '^def$' hoge.txt
264デフォルトの名無しさん:05/02/26 02:35:33
$0 != "def" {print;}
265デフォルトの名無しさん:05/02/26 02:43:09
質問です。

EMアルゴリズムを回してます。
「アクティブな構成」が「Win32 Debug」と「Win32 Release」の時で
結果が違うんですけどなぜでしょうか・・・。
収束するとこも違うし、Releaseだとエラーが出て止まってしまうんです。

Visual C++ 6.0、WindowsXPです。
266デフォルトの名無しさん:05/02/26 02:47:18
>>262
すいません

テキストファイルを読み込んでいる時にdefの行が見つかったら無視すれば如何でしょうか?
267デフォルトの名無しさん:05/02/26 03:28:53
268デフォルトの名無しさん:05/02/26 03:29:11
>>266
概出
269デフォルトの名無しさん:05/02/26 13:49:13
visual c++とCのborland c++ 5.5 の違いは?


270デフォルトの名無しさん:05/02/26 13:58:44
Visual C++:Microsoftの製品。MFCが付いてくる。Visual C++ ToolKitと称するIDE無しの無料版がある。
Borland C++ Builder:Borlandの製品。VCLが付いてくる。古いバージョン(5.5)のIDE無しの無料版がある。
271デフォルトの名無しさん:05/02/26 18:43:42
>>260
その一つのファイルで解決しようとするんじゃなく
もう一つファイルをオープンしてそれに反映させていけばいい
272デフォルトの名無しさん:05/02/26 21:11:27
ものすごい基礎的なことかと思うのですが、
VisualC++.netでプロジェクトの保存場所の履歴や、
文字列検索なとの履歴はどうやって削除できますか?
ツール→オプション→環境などをあさっても
それらしき項目が見つけることができませんでした
よろしくお願いします。
273272:05/02/26 21:28:38
すみません自己解決しました。
レジストリーのそれっぽいのいじったらいけました。
お騒がせしました。
274デフォルトの名無しさん:05/02/27 00:15:35
質問です。
CTextに表示されている文字を画面からはみ出たら改行
されるようにしたいのですが、どのように行えば良い
のか分かりません。MULTILINEとかいうプロパティを
指定すれば良いのでしょうか?
275デフォルトの名無しさん:05/02/27 01:45:26
CTextって .net のクラスか何か?
MSDN見たけど載ってない。@VS 2003
276デフォルトの名無しさん:05/02/27 09:15:40
MFCの文字を表示するためのコントロールです。
デフォルトのプロパティのまま文字表示しようとすると
表示文字がウィンドウの画面外から文字がはみ出てしま
い、文字切れしてしまいます。

これをどうにか文字がはみ出た分だけ改行させたいのです。

CButtonのコントロールではBS_MULTILINEと指定するとボタン
内の表示文字を改行表示出来ました。

Textでもそのようなオプションを探したところ見つかりません。
どなたかご存知の方おりましたらご教授お願いします。
277デフォルトの名無しさん:05/02/27 09:34:53
\nで改行
278デフォルトの名無しさん:05/02/27 09:58:45
だからCTextなんていうコントロール クラスはMFCには用意されてないっつーの。
279デフォルトの名無しさん:05/02/27 09:59:56
試したところ"文字1\n文字2" と指定してもうまくいきません。
表示が「文字1・文字2」となり、改行が無視されてしまいます。
280デフォルトの名無しさん:05/02/27 10:16:03
>>279
\r\n
281デフォルトの名無しさん:05/02/27 12:38:33
すいません初歩的な質問です。
visualc++ toolkit command promptとかいうのをタダでインストールしてん
ですが。このcommand promptにコードを打ち込んでいくのですか?
それとも、どこかにコードを打ち込んでそれをcommand promptを使って
callするのですか? 
282デフォルトの名無しさん:05/02/27 12:45:09
どっかに無料コンパイラのスレなかったかな?
283デフォルトの名無しさん:05/02/27 12:57:42
>>281
後者
284デフォルトの名無しさん:05/02/27 13:01:23
>>281
たしか cat コマンドを使って前者でも。(うる覚え。
285デフォルトの名無しさん:05/02/27 13:04:13
入力ファイル名をCONにすれば。
286281:05/02/27 13:04:56
度々、すいません。 コード書くのははnote padとかでもいいのでしょうか?
287デフォルトの名無しさん:05/02/27 13:06:00
今月号の日経ソフトウェアに特集はC/C++
VC++betaの使い方ものってる
288デフォルトの名無しさん:05/02/27 13:11:36
>>281
右も左もわからんようなら本ぐらい買え
289デフォルトの名無しさん:05/02/27 13:15:45
なんか右も左も分からない人用にわかりやすく
説明してるウェブサイトないかな?
290デフォルトの名無しさん:05/02/27 13:18:20
最適なウェブサイト↓

http://www.google.co.jp/
291デフォルトの名無しさん:05/02/27 13:36:42
292デフォルトの名無しさん:05/02/28 03:26:07
Visual C++ Toolkit + Platform SDK
でプログラムを書いてるわけだが、
cl menu01.cpp でエラーが出てしまう。
なんとかしてくれませんか。

Borland C++ ではコンパイルできるのでソースはあってると思う。

環境変数↓
Set PATH=C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin;C:\Program Files\Microsoft SDK\bin;%PATH%
Set INCLUDE=C:\Program Files\Microsoft Visual C++ Toolkit 2003\include;C:\Program Files\Microsoft SDK\include;.
Set LIB=C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib;C:\Program Files\Microsoft SDK\Lib

↓つづく
293デフォルトの名無しさん:05/02/28 03:26:53
エラーメッセージ↓
/out:menu01.exe
menu01.obj
menu01.obj : error LNK2019: unresolved external symbol __imp__DispatchMessageA@4
referenced in function _WinMain@16
menu01.obj : error LNK2019: unresolved external symbol __imp__TranslateMessage@4
referenced in function _WinMain@16
|
<同じようなメッセージ>
|
menu01.obj : error LNK2019: unresolved external symbol __imp__MessageBoxA@16 ref
erenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigne
d int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
menu01.obj : error LNK2019: unresolved external symbol __imp__SendMessageA@16 re
ferenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsign
ed int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
menu01.exe : fatal error LNK1120: 14 unresolved externals

ソース(menu01.cpp)↓
http://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm

SDKとToolkit はデフォルトでインストール後何も触ってないです。
294デフォルトの名無しさん:05/02/28 07:54:51
ライブラリが見つかってません。
295デフォルトの名無しさん:05/02/28 09:31:38
>>293
無料コンパイラのスレ探して質問してくれ
もし見つからないなら超マイナーで誰も使ってないから
あきらめて違うコンパイラに乗り換えるのが吉
296デフォルトの名無しさん:05/02/28 13:28:53
cl menu01.cpp kernel32.lib user32.lib gdi32.lib
で通るはず。
いちいちlibを指定するのが面倒なら、ソースの中にpragmaで書き込んじゃえ。
297292:05/02/28 23:39:05
>>294-296
ありがd

>>294
そこまではわかったんだけど。

>>295
そんなスレッドありません。。。
無料コンパイラスレ。
作ったほうがいいのかな。

>>296
できたできた。
ありがとうございますです。
しかし、環境変数LIBって何のためにあるんだろ。
298デフォルトの名無しさん:05/03/01 10:18:08
>>297
>環境変数LIBって何のためにあるんだろ。
実行時に DLL を検索するパス。
299デフォルトの名無しさん:05/03/01 10:22:47
へぇー
環境変数設定してないと実行できないんだ
知らなかった
300デフォルトの名無しさん:05/03/01 13:23:48
教えてください、VisualC++6.0の話しですけど。。。
ダイアログアプリケーションでボタンを置いて、これが押されたときはBN_CLICKED
というメッセージが発行されてメンバ関数を追加しておけばこれがコールされますけど、
ボタンを押している状態から放した状態に移行したイベントで関数をコールしたい
ときって、どうやったらいいんでしょうか?
普通にボタンを置くと、BN_CLICKEDとBN_DOUBLECLICKEDという2つのメッセージしか
使えないと思うのですが、メッセージを追加する方法とかあるんですかね?
301292:05/03/01 13:32:37

Set CL=/link user32.lib gdi32.lib
これであとは通常通りにコンパイルできるYo!
関連サイト↓
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcepbguide5/html/wce50consettingclenvironmentvariable.asp

報告カキコ。
Toolkit 質問箱ができたので
そっちに逝ってきます。
302デフォルトの名無しさん:05/03/01 13:41:04
>>300
BN_CLICKEDって押して離したときに来ると思ったんだけど違ったかな
303デフォルトの名無しさん:05/03/01 17:38:33
>>301
>>300 です。
そうでした、BL_CLICKEDは放したときのイベントでしたね。
そういう意味では、私が知りたいのは押した瞬間のイベントを捉える方法です。
(押した瞬間にある処理をさせて、放した瞬間にも別の処理をさせることをしたいので。。。)
そんな関数って定義できるんですかね?
304デフォルトの名無しさん:05/03/01 17:39:58
>>303>>302 に対するレスでした。スマソ。。。
305デフォルトの名無しさん:05/03/01 18:53:35
サブクラスすれ
306デフォルトの名無しさん:05/03/02 02:00:07
>>303
まずクラスの新規作成で、CButtonを基本クラスとする新しいボタンのクラス
を作成する。で、クラスWizardでダイアログに張り付けたボタンをさっき作
った新しいクラスの変数として割り当てる。さらにクラスWizardでさっき作
ったボタンに関してON_WM_LBUTTONDOWNやらのハンドラを追加して中身を作り
込むと。どすか。
307デフォルトの名無しさん:05/03/02 10:07:47
>>306
>>303 です。
レスどうもです。
アドバイスしてもらった方法でうまくいきました。
うまく利用すると(ボタンに限らず)色々な機能を実装できそうですね。
まったく目からうろこでございます。
ちなみに、当方今までC++BuilderばかりやっててVC++はお初なもので戸惑い多々あり。
またわからないことでスレ汚しするかも知れませんが、堪忍してやってくださいませ。
308デフォルトの名無しさん:05/03/02 18:39:02
309デフォルトの名無しさん:05/03/02 19:45:37
デバッグなしで実行するとエラーでプログラム落ちるのに、
デバッガで実行すると落ちないんですけど、
考えられる可能性は何なんでしょうか。

落ちる場所を特定(デバッガ使わない状態で)して、
デバッガで追ってみたけど落ちないし、落ちると思われる要素も無かった。

前、どこかでデバッグビルドで実行する時と、リリースビルドで実行する場合、
変数の挙動が変わるとか(うろ覚え)。
そういうのが関係してくるのでしょうか...?
310デフォルトの名無しさん:05/03/02 20:09:18
メモリリークあるいは解放アドレスアクセス
311デフォルトの名無しさん:05/03/02 20:12:07
リリース版では変数が最適化されたせいで文字列リテラルに書き込もうとして落ちてるとか
312デフォルトの名無しさん:05/03/02 20:14:10
デバッガでアタッチしてる時と通常実行時の話か?
313デフォルトの名無しさん:05/03/02 20:21:37
>>309
変数に隙間作ってご丁寧に初期化までしてくれるデバッガ使ってデバッグするのはネカマだけ
314デフォルトの名無しさん:05/03/03 02:32:36
MFCでXP、ダイアログベースなんですが、
モーダルダイアログでいくつかのボタンとエディットボックスがあります。
ボタンにフォーカスがあって、タブ押したらフォーカスが移動するんですが(タブオーダーで順番決めてます)
キーボードの↑↓キーでも移動してしまうんです。
しかもtabstopプロパティをfalseにしてるエディットボックスにまでフォーカスが移動してしまいます。

やりたいことは↑↓でボタン間をフォーカス移動するのはもう仕方ないとして、
tabstopがfalseなエディットボックスに、移動さてたくないんですが、どんな方法がありますか?

自分の考えた拙い方法
(1)エディットボックスのフォーカスイベントで、別のコントロールにフォーカスを移動
→エディットに入力できなくなるかも?
(2)キーボードフック?とかいうもので、↑↓キーを検出してどうにかする
→むずかしそう
315デフォルトの名無しさん:05/03/03 04:47:54
PreTranslateMessage()で、WM_KEYDOWN/UPを捕まえて止める。
316デフォルトの名無しさん:05/03/03 09:07:00
>>314
グループは設定してる?
同じグループ内のコントロールはカーソルで移動できるようになってるが。
317デフォルトの名無しさん:05/03/03 18:52:36
プログラムというかVC++自体の質問なんですがお願いします。
リソースエディタのString Table関連の日本語がツールから設定内容まで化けるんですけど、直す方法ってありますか?
環境はXP Home Edition のSP2で、VC++.NET 2003のアカデミックバージョンです。
318デフォルトの名無しさん:05/03/03 19:47:30
回答へのお願い
ここはパソコン初心者板ではないから
くれぐれも失礼のないように
319デフォルトの名無しさん:05/03/03 20:25:18
アカデミックバージョンはSP2では不具合出るよ。
Sp1に戻せ。
320デフォルトの名無しさん:05/03/03 20:32:31
そうなんですか・・・今の状態じゃ直せそうにないのであきらめます;
ありがとうございました。
321デフォルトの名無しさん:05/03/03 23:26:40
>>319 アカデミックバージョンをSP2で使ってた・・ぃゃ、別に問題出てないからイイカ・・・?)
322デフォルトの名無しさん:05/03/04 07:55:07
すいません質問です。
TrackPopupMenuEX();
で作ったフローティングメニューに、
TrackPopupMenuEX();のための一連の関数呼び出し時の前以外のタイミングで
ダイナミックにメニューを追加する方法はありませんでしょうか。


323デフォルトの名無しさん:05/03/04 09:41:05
>>322
WM_INITMENUPOPUP
324デフォルトの名無しさん:05/03/05 03:08:16
このスレのほとんどの質問がWIN32APIの質問である件について。
325322:05/03/05 03:30:48
>>323
丁寧でわかりやすい返答、本当にありがとう御座いました。
解決しました。
326デフォルトの名無しさん:05/03/05 03:35:28
丁寧...
327デフォルトの名無しさん:05/03/05 04:08:34
   (V)∧_∧(V)
    ヽ(・ω・)ノ  フォッフォッフォッ
.     /  /
    ノ ̄ゝ


.          (V)∧_∧(V)
           ヽ(   )ノ  フォッフォッフォッフォッ
.           /  /
       .......... ノ ̄ゝ
328デフォルトの名無しさん:05/03/05 19:06:06
Visual Studio.Net2003なんですが、プロジェクトのプロパティをいじっていたら、
「デバッグ」でビルドした際に固まってしまうようになりました。
ブレークポイントも「?」マークになって、効果がありません。
これってどこを設定すればいいんでしょうか?

または、プロパティをデフォルトに戻す方法があれば、教えていただきたいんですが・・・
329デフォルトの名無しさん:05/03/05 19:11:53
再インストールとかパソコン初心者板みたいな回答が出ませんように
330デフォルトの名無しさん:05/03/05 19:18:24
マネージ拡張がonになっていただけでした。
スレ汚しすいません・・・
331デフォルトの名無しさん:05/03/05 23:39:22
質問です。
プログラム本体から派生したショートカットから(というかショートカットから)実行すると、
プログラムに判定される現在のディレクトリ がショートカットがある場所 になってしまいます。
この問題を、使う人が本体ディレクトリをぐりぐり動かしても大丈夫なように解決するにはどうすればいいでしょうか。
332デフォルトの名無しさん:05/03/05 23:41:01
ショートカットのプロパティ5分見てからやり直し。
333デフォルトの名無しさん:05/03/05 23:59:02
>>331
微妙に言ってることがわからん。
使う人が本体ディレクトリをぐりぐり動かすってなんなんだ?
334デフォルトの名無しさん:05/03/06 00:06:18
>>331
GetModuleFileName でなんとかきりぬける。
335デフォルトの名無しさん:05/03/06 01:18:05
>>331
カレントディレクトリに依存しない作りにする。
ファイルは必ずフルパスで操作すればいい。
336331:05/03/06 01:43:15
>>332-225
ありがとうございます。
とりあえずGetModuleFileName()で切り抜けることにします。
さらに初心者っぽい質問でもうしわけないのですが
c:\xxx\xxxx\yyy.exeという文字列が抽出されましたが、
ここからc:\xxx\xxxx(\)というように実行ファイルが存在するディレクトリへのパスを抽出するにはどうするのでしょうか?
文字列操作関数で検討していますがいまいちです。
337デフォルトの名無しさん:05/03/06 02:00:02
_tsplitpath
338デフォルトの名無しさん:05/03/06 02:05:27
>>336
PathStripPathだったか、PathRemoveFileSpecだったかとにかくPath系の
APIでがんばる。
339デフォルトの名無しさん:05/03/06 02:21:07
Java使いなんですが
はじめてC++をやる場合、オススメの参考書とか勉強方法ってありますか?

Cができないとダメな本なら持ってるんですが、そもそもCがわからないし
すぐC++を覚えないと会社クビになりそうだし。
環境はVC++って言ってましたが、6なのか.NETなのか不明なのが最悪。
340デフォルトの名無しさん:05/03/06 02:41:34
>>339
Java使いならJava使ってたほうがいいよ。
くびになる前に転職考えたほうがいいような気がする。
341331:05/03/06 02:43:45
>>337,338
解決しました、本当にありがとう御座いました。
342デフォルトの名無しさん:05/03/06 02:49:49
>>340
転職したばかりの会社での最初の仕事なんです
前の会社は倒産寸前なので逃げました
343デフォルトの名無しさん:05/03/06 02:56:19
漏れがC++を勉強したときはCとC++を同時に勉強していったよ。
基礎からやって飽きて流し読みしながら行き当たりばったりで。
344デフォルトの名無しさん:05/03/06 04:38:58
Visual Studio 2003でC++を使っています。
VC6と違って、Ctrl + Shift + '8' を押しても
エディタにタブや半角スペースといった記号が表示されません。

空白を表示させるには、どうすればよいのでしょうか。
345デフォルトの名無しさん:05/03/06 08:42:05
編集 -> 詳細 -> スペース(ry
346デフォルトの名無しさん:05/03/06 08:53:29
>>339
javaがわかるなら楽勝でしょう。最初のうちは
ちょっと混乱するだろうけどね。

というか、プロがする質問には見えないんだけど……
347344:05/03/06 18:38:37
>>345
できました、ありが(ry
348デフォルトの名無しさん:05/03/07 01:30:18
>>339
Java使いでC++になって分からない(混乱する)所と言えば
メモリ管理とかポインタ関係か・・? 最初に詰まるのは文法かも?

そもそも、Java使いと言ってるけれど・・必要十分に使いこなせてないって印象を受けたのだが・・<プロの発言に聞こえない orz

Cを知ってる方がC++の習得は早いだろうけど、無くてもC++やりながらで問題ないと思う。

てか、会社にC++の参考書なり何なり無いのか?
とりあえず、明日会社で上司や先輩に相談して書籍を薦めて貰うのが良いかと
349デフォルトの名無しさん:05/03/07 11:34:37
>>339
取りあえず林 晴比古の入門書でも読んだら?
350デフォルトの名無しさん:05/03/07 12:45:39
VC6.0 Pro なんですが、以下のソースがコンパイル通らなくて困っています。

#include <stack>

typedef std::stack<long>STACK_TYPE;
class CHoge
{
STACK_TYPE m_stack;
};

スタックを扱いたいのですが、typedef のところで
「error C2039: 'stack' : 'std' のメンバではありません。」となってしまいます。
どう記述すればいいのでしょうか。宜しくお願いします。
351デフォルトの名無しさん:05/03/07 14:03:52
typedefの所が悪いんじゃなくて、それより上が悪いんじゃないの?
他の #include が影響してるとか。

ちなみに、私の環境では通った。
352350:05/03/07 15:31:54
>>351
どうもありがとうございます。
もうちょっと調べてみます。
353デフォルトの名無しさん:05/03/07 22:34:33
今ね、Doc/View無しのMDIアプリ作ってるんだけどなんか変だ。
354デフォルトの名無しさん:05/03/08 12:31:28
vc++にマーカーのような機能はありませんか?
ある行に印をつけて置いて、別の所に移動した後、
すぐにそのチェックした場所に戻るような機能が非常に欲しい。
エディタ
355354:05/03/08 12:33:45
ブックマーク発見。
356デフォルトの名無しさん:05/03/08 17:25:44
char[10]の配列に入った数値をint型にしたいのですが、出来るのでしょうか?
357デフォルトの名無しさん:05/03/08 17:55:12
>>356
atoi()
358デフォルトの名無しさん:05/03/08 18:40:03
>>357
char[10]の配列に入った文字列
ではなく
char[10]の配列に入った数値
だから違うのではなかろうか?
359デフォルトの名無しさん:05/03/08 18:40:27
エディットボックスコントロールを、"複数行"・"改行を許可"に設定して、
プログラム側からエディットボックスに文字を書き込んでいます。
XPで動作させると思った通りに動くんですが、
2000で動かすと改行するときに"・"がついてしまいます。
改行自体はできるのですが、行末に"・"がつくのが見苦しいと感じています。

どのようにしたら、"・"が取り除けるでしょうか。
ご存じの方いましたら、教えてください。

環境:Visual C++ 6.0, Windows2000
360デフォルトの名無しさん:05/03/08 18:45:35
>>359
改行コード何にしてます?
361359:05/03/08 18:49:10
>>360
\nを使っています。
362デフォルトの名無しさん:05/03/08 18:57:31
0D 0A で。
363デフォルトの名無しさん:05/03/08 20:07:24
\r\n
364デフォルトの名無しさん:05/03/09 18:32:34
環境 Microsoft Visual C++ .NET、WindowsXP Pro+サービスパック2です。
http://support.microsoft.com/default.aspx?scid=kb;ja;841226
これの、『Microsoft Visual C++ のプロジェクトを使用して C アプリケーションを作成する』
以降は再現出来ました。しかし、
http://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm
これをコピペして、コンパイルすると、
fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
と、エラーになります。どうしたらいいでしょうか?
365デフォルトの名無しさん:05/03/09 18:33:45
>>364
プリコンパイル済みヘッダを検索しなきゃいい
366364:05/03/09 18:41:00
>>365
>プリコンパイル済みヘッダを検索しなきゃいい
どこをいじれば、プリコンパイル済みヘッダを検索しないようになりますか?
367デフォルトの名無しさん:05/03/09 18:48:06
>>366
プロジェクトの設定。
368364:05/03/09 18:50:59
http://rararahp.cool.ne.jp/vc/vctips/build.htm
ここを見ると、
これを直すには、「プロジェクト」→「設定」→「C/C++」のプリコンパイル済みヘッダーにて
プリコンパイル済みヘッダーを使用しない、を選ぶ。
ってあるけど、俺の環境には、「プロジェクト」の中に「設定」って設定は無いのよね。
369367:05/03/09 18:55:30
>>368
あぁすまん、プロジェクトメニューの一番下にある「なんとか」のプロパティだね。
まさかその程度のメニューも追えないほど終わっていると思わなかったから書きそびれたよ。
370364:05/03/09 18:56:26
つか、「プロジェクト」→〜〜のプロパティーにありました。
どうも有り難うございます。
371デフォルトの名無しさん:05/03/09 18:57:01
ジョイパッドの検知するAPIと、
ジョイパッドを押している事にするAPI(SendMessageみたいな)は何ていうやつですか?
372デフォルトの名無しさん:05/03/09 19:08:18
ゲーム製作板へ
373364:05/03/09 19:50:43
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szClassNme[] = "ウィンドウクラス・ネーム";

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS myProg;
if (!hPreInst) {
myProg.style =CS_HREDRAW | CS_VREDRAW;
myProg.lpfnWndProc =WndProc;
myProg.cbClsExtra =0;
myProg.cbWndExtra =0;
myProg.hInstance =hInstance;
myProg.hIcon =NULL;
myProg.hCursor =LoadCursor(NULL, IDC_ARROW);
myProg.hbrBackground =GetStockObject(WHITE_BRUSH);
myProg.lpszMenuName =NULL;
myProg.lpszClassName =szClassNme;
if (!RegisterClass(&myProg))
return FALSE;
}
374364:05/03/09 19:51:09
hWnd = CreateWindow(szClassNme,
"猫でもわかるプログラミング",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
return (0L);
}
375364:05/03/09 19:54:07
http://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm
お目汚しすみません。ここからのコピペです。これをコンパイルすると、
sample01.cpp(20) : error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
sample01.cpp(43) : warning C4244: 'return' : 'WPARAM' から 'int' に変換しました。データが失われているかもしれません。

と、エラーになります。 どうしたらいいでしょうか?
376371:05/03/09 19:54:49
どっちに書き込もうか迷ったんですけどね・・・
すいませんでした じゃああっち行ってきます
377デフォルトの名無しさん:05/03/09 19:56:03
>>375
http://www.kumei.ne.jp/c_lang/setvc.htm
ここの蛇足読め。
ようするにキャストすればいいだけ。
378デフォルトの名無しさん:05/03/09 20:16:32
>>364

リンク先があるならコピペすんなよ


明示的にキャストしろって言われてるんだから、キャストすれば良い。

GetStockObject(WHITE_BRUSH);
 
(HBRUSH)GetStockObject(WHITE_BRUSH)


return (msg.wParam);
 ↓
return ((int)msg.wParam);
379364:05/03/09 20:18:46
>>377
>ようするにキャストすればいいだけ。
すみません。 
http://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm
これを出発点にしようと思ってるんですが、ここのドコをどういじったらいいでしょうか?
380364:05/03/09 20:19:43
>>378
おお、有り難うございます。試してみます。
381デフォルトの名無しさん:05/03/09 20:26:59
ついでに言うとstatic_castとreinterpert_castも覚えておいてほしい。
382364:05/03/09 20:31:34
>>378
ご指導の様に書き換えると、以下のミスになりました、
更なるご指導お願いします。

LIBCD.lib(crt0.obj) : error LNK2019: 未解決の外部シンボル _main が関数 _mainCRTStartup で参照されました。
Debug/sample01.exe : fatal error LNK1120: 外部参照 1 が未解決です
383デフォルトの名無しさん:05/03/09 20:44:21
コンパイルの仕方が悪い

環境が判らないと、それしか言えない。
384364:05/03/09 20:50:20
>>383
そうですか、じゃネコの所は諦めます。
http://support.microsoft.com/default.aspx?scid=kb;ja;841226
これはクリア出来たんですが、次はドコに行ったらいいでしょうか?
環境はVisual C++ .NETです。
385364:05/03/09 20:52:37
最終的には、SHBrowseForFolder、FindFirstFile、FindNextFile、
FindClose、CreateFileを使いこなしたいんです。
386デフォルトの名無しさん:05/03/09 20:53:54
多分プロジェクトが、
WIN32コンソール・プロジェクトになってるのかと。
ウィンドウプログラムはWIN32プロジェクトで作らないと。
387364:05/03/09 20:56:31
>>386
>WIN32コンソール・プロジェクトになってるのかと。
お、鋭い。
http://support.microsoft.com/default.aspx?scid=kb;ja;841226
これのやり方でWIN32コンソール・プロジェクトにしていました。
やり直してみます。
388デフォルトの名無しさん:05/03/09 21:00:35
とりあえず、IDEを使ってる物として、
コンソールとウィンドウを切り替えるのは、
構成プロパティ→リンカ→システム→サブシステムを
"Windows (/SUBSYSTEM:WINDOWS)"にすればいい。
389364:05/03/09 21:08:48
つか、無事コンパイル&実行、出来ました。
教えてくれた皆さん有り難うございました。感謝します。
390364:05/03/09 21:16:41
調べてみたらばそうなってました。 有り難うございます。 >>388
391デフォルトの名無しさん:05/03/11 01:01:07
>>372
関係ないだろ
ゲームプログラム板じゃねーんだぞゴルァ
392デフォルトの名無しさん:05/03/11 02:49:19
Win32 Debugではちゃんと動いてたのにWin32 Releaseにしたらちゃんと動かなくなる、なんてこと普通あるの?
393デフォルトの名無しさん:05/03/11 02:52:49
珍しい事じゃない。
394デフォルトの名無しさん:05/03/11 05:23:09
コンパイルオプションもリンクオプションも違うし
変数の初期化のされかたも違う。
Release側の設定をDebug側に写してやってみ。
395デフォルトの名無しさん:05/03/11 08:05:12
>>392 のようなことがあって、debugが大変だったな。最近ではもっぱら Release Mode だよ。
逆に Release ではOK、しかし Debug では落ちたり、というのも結構あるのかな?
396デフォルトの名無しさん:05/03/11 09:35:34
>>395
あるねぇ・・・・。
397デフォルトの名無しさん:05/03/11 10:03:35
要はプログラムの質が低いと。
398Rubyist!:05/03/11 10:53:08
そろいも揃って阿呆ばかり
399デフォルトの名無しさん:05/03/11 19:53:52
>>392
Debugで動くのにReleaseで動かない状況っていうのは、
90%以上の確率で初期化してない変数を利用している。
400デフォルトの名無しさん:05/03/11 20:01:58
5.0ってコード入力サポート機能ないんだな。
どうしよう。もうだめだ。
401デフォルトの名無しさん:05/03/11 21:22:12
入力サポートって言っても
頭から補完してくれるわけじゃないから
全然ないよりはあった方がいいかなと言う程度
402デフォルトの名無しさん:05/03/11 23:06:03
VC2005βを使えばいいじゃない。
403デフォルトの名無しさん:05/03/12 01:23:17
2005に比べたら2003も嫌になる
404デフォルトの名無しさん:05/03/12 14:42:37
マウスの座標取得する関数思い出せない。
405デフォルトの名無しさん:05/03/12 14:58:36
GetCursorPos
406デフォルトの名無しさん:05/03/12 17:52:59
事前に指定した座標を自動的にクリックするプログラムを書きたいのですが、
クリックを発生させるAPIが見つかりません(涙)。
ご存知の方教えてくだされ。
環境はVisualC++ 6.0です。
407デフォルトの名無しさん:05/03/12 18:03:27
鮮度めっせーじかぽすとめっせーじでいいのでは?
408デフォルトの名無しさん:05/03/12 18:03:27
mouse_event?
409デフォルトの名無しさん:05/03/12 19:29:44
メインウィンドウにの背景に画像を表示させて、
その上にボタン等のコントロールを配置、
というインターフェースを実装しようとしています。

が、WM_PAINTに画像表示コードを書くと、
ボタンの上に画像がかぶさって、見えなくなってしまいます。
うまいこと、画像の上にボタンを表示させたいのですが、
どのようにすべきなのでしょうか。

ウィンドウ、コントロール等はCreateWindowの手書きです。
410デフォルトの名無しさん:05/03/12 19:33:51
それはアルファチャネルを考慮したウインドウかな?
411デフォルトの名無しさん:05/03/12 19:41:02
いえ、別段考慮していません。
412デフォルトの名無しさん:05/03/12 19:56:27
XYZオーダー考慮すれば良いだけ
413デフォルトの名無しさん:05/03/12 20:39:39
>>409
WS_CLIPCHILDREN
414409:05/03/12 22:06:55
>>413
ありがとうございます。
期待通りの動作になりました。
415デフォルトの名無しさん:05/03/12 23:21:38
 Visual C++といえどもメニューやダイアログボックスはリソースエディタで
VBみたいに編集して作るのが普通なんですか。
416デフォルトの名無しさん:05/03/12 23:27:04
気に入らないならダイナミックに作ってください
417デフォルトの名無しさん:05/03/13 03:11:19
ウィンドウの形状を指定してウィンドウのサイズを取得する関数教えてください。
〜Adjust〜みたいな名前だったような気がします。
418デフォルトの名無しさん:05/03/13 05:40:50
AdjustWindowRectEx ?
419デフォルトの名無しさん:05/03/13 15:16:33
>>418
それ!
サンクス
420デフォルトの名無しさん:05/03/13 19:00:43
コードの折り畳みをコントロールしたいんですがいい方法ありませんか?
--- hoge.cpp ---
#include "a.h"         ) コード1
#include "b.h"         )
/*                 ]
  非常に長い行のコメント ] コード2
*/                ]
int hoge()            }
{                  } コード3
 // 省略            }
}                  }
というファイルがあるとき#includeとint hoge()だけ残して折り畳みをしたいんですが
実際折りたたもうとするとコード1とコード2は同時に折りたたまれてしまいます。
やりたいのはコード2だけを折りたたみたいのです。
コード1とコード2の間にvoid dummy(){}というコードを入れることによって対処してますが
何か違うような気がします。
知恵を貸してください。
421デフォルトの名無しさん:05/03/13 19:24:08
「折り畳み」を定義してくれ
422420:05/03/13 20:15:09
>>421
通じなかったかorz
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vxtskoutliningcode.asp
これの+とか...が折り畳まれた状態です。
>>420を折り畳んで
--- hoge.cpp ---
+[...]
#include "a.h"
#include "b.h"
+[...]
int hoge()
{
 // 省略
}
という風にしたい。
実際は
--- hoge.cpp ---
+[...]
int hoge()
{
 // 省略
}
という状態になってコメントとincludeがまとめて折り畳まれてしまう。
423デフォルトの名無しさん:05/03/13 21:50:16
>>420,422
.NETスレいったほうがいいと思うよ。
424デフォルトの名無しさん:05/03/13 21:59:11
へたれたIDEなんぞ使わずに、まともな折り畳み機能のあるエディタを使えって話かな?
つーか、別に気にするほどのことかいや。
425デフォルトの名無しさん:05/03/14 00:30:36
縮めたいところを選択して

右クリック -> アウトライン -> 選択範囲を非表示

じゃあかんの?
426デフォルトの名無しさん:05/03/14 03:25:33
VC.netってどうやって*.libライブラリのリンクするんですか(?_?)/
そんな項目が探してもみつからない・・・
427デフォルトの名無しさん:05/03/14 03:48:17
>>426
ソリューションエクスプローラでプロジェクト名を右クリック
リンカ、入力、追加の依存ファイル
428420:05/03/14 10:03:46
>>425
それだとタブ(ファイル)を閉じただけで非表示した場所を忘れてしまうんだよね。

>>423-424
どうもできないっぽいしあきらめます。
スレ微妙に違ってスマソ。
429デフォルトの名無しさん:05/03/14 10:12:19
そんなにしばしば折り畳んでしまいたいような情報なら捨ててしまえばいいのに。
430420:05/03/14 12:22:54
>>429
Doxygenに使ってるからあかんのだ。
431デフォルトの名無しさん:05/03/14 14:04:17
ゲームスレみたいな所なのでここで質問。
RPGやパズル、シミュレーションなどで、
独特なキー入力(十字キー)のやり方がありますよね。
キーを軽く押したら、1マス動いて、
しばらく押しっぱなしにしたら、そのままスムーズに押した方向へカーソルが
動くやつ。あれはどう実装すればいいのでしょう?
できればアルゴリズム or コードでお願いします。
432431:05/03/14 14:12:52
誤爆。スミマセン。
433デフォルトの名無しさん:05/03/14 14:14:24
>>431
アルゴリズムも何も
>キーを軽く押したら、1マス動いて、
>しばらく押しっぱなしにしたら、そのままスムーズに押した方向へカーソルが動く
をそのまんまコードにすればいいんだけど。
434デフォルトの名無しさん:05/03/14 14:42:13
キーが押されてる時間を見て、
押された時と、一定時間後だけ動かすようにすればいい。
435デフォルトの名無しさん:05/03/14 14:43:47
>>433
>431はDirectXスレで聞いてますから。

>>430
Doxygenなら尚のこと、別ファイルにすればいいのに。
436デフォルトの名無しさん:05/03/14 20:23:44
Visual C++ .NET Standard Version 2003 アカデミックパック
↑を購入しようと思うのですが、何か制限やアクティベートの必要はあるのでしょうか?
437デフォルトの名無しさん:05/03/14 22:24:03
>>436
Spoke買っとけ
438デフォルトの名無しさん:05/03/14 23:14:05
>>427
うおー。ありがとございました。
439デフォルトの名無しさん:05/03/15 00:31:54
>>436
アクチが必須
学生証もいるような
440デフォルトの名無しさん:05/03/15 02:25:49
Visual Studio .NET 2003を入れたのですが、
Visual Studioからでなく、Visual C++を一発で起動する
ショートカットを作りたいのですが、どうすればいいのですか?
441デフォルトの名無しさん:05/03/15 02:30:29
nmake.exeでも起動するようにバッチファイルでも作れば?
442sage:05/03/15 18:22:12
なるほど。
443デフォルトの名無しさん:05/03/15 19:28:07
VC++で作成したダイアログが、ある時を境に一回り小さく表示されるようになって
しまいました。
コントロールもフォントも全て約3/4のサイズで表示されます。
リソースビューを開いた段階で既に小さくなっています。
同じソースを使用しても他のマシンでは正常に表示されるので、恐らく描画用の
DLL(?)が何かの拍子に置き換わってしまったのではないかという気がしています。

お心当たりのある方がいらっしゃいましたらご教示下さい。
宜しくお願い致します。
444デフォルトの名無しさん:05/03/15 19:39:40
パソコン買い換えれば無問題
くだらない質問は迷惑です
445デフォルトの名無しさん:05/03/15 19:45:21
>>443
画面解像度を上げただけじゃね?
446443:05/03/15 19:54:45
>>445
いえ、そういう訳ではなく、元々800×600[px]のサイズだったものが600×450[px]くらいに
表示されています。
それに合わせてフォントも約3/4になっているので、ぱっと見は違和感がないのですが、
よく見るとバランスがおかしいです。
447デフォルトの名無しさん:05/03/15 20:12:55
ダイアログに合わせてフォントサイズが変わったんじゃなくて
フォントサイズに合わせてダイアログが変わったのだろう
448デフォルトの名無しさん:05/03/15 20:21:21
VC++.net2003なんですが
インクルードする時、stdio.hならインクルード出来るんですが
iostream.hでのインクルードが出来ないんですがどうしたら
いいですか?^^;
449デフォルトの名無しさん:05/03/15 20:22:29
#include<iostream>
450443:05/03/15 21:12:49
>>447
故意にフォントサイズを変えたりはしていません。
閉じてまた開いたら勝手に変わっていたといった感じです。
見直してみたら、全てのフォントが変わっていた訳ではありませんでした。
描画用のDLLの置き換わり(?)などによる現象ではないということでしょうか・・?
451デフォルトの名無しさん:05/03/15 21:25:17
>>450
OSの問題の可能性が高い。
本当にVCの問題なのかはっきりさせてから質問し直した方がいい。
452デフォルトの名無しさん:05/03/15 21:35:39
>>443
98系かNT系か晒したら?
453デフォルトの名無しさん:05/03/15 22:24:58
>リソースビューを開いた段階で既に小さくなっています。
だから、>>447に書いてあるじゃん
コントロールじゃなくてダイアログそのもののフォントを変更してしまったんだよ。
リソースエディタでダイアログのプロパティを見ると
フォントを設定出来るところがあるでしょ。そこでフォントのサイズを
変更すれば、設定したフォントに合わせてダイアログのサイズも変わるよ。
>それに合わせてフォントも約3/4になっているので
9ptを8ptにしたとか、まさにそういうこと。違うって?
じゃあ、もう一つ教えよう。リソースの種類が日本語になっているか他の
言語になっているか確認しろ。リソースの言語を変更するとフォントも
変わるよ。
454デフォルトの名無しさん:05/03/15 23:28:50
VS2003pro使ってるんですが
Win32のメインウィンドウだけはリソースエディタみたいなので
ビジュアルにGUIを設計できないんですか?
455デフォルトの名無しさん:05/03/15 23:32:14
>>454
もちつけ、VCプロジェクトで何を選んだらこうなったをいわないと
わからん
456455:05/03/15 23:37:35
>>455
Win32プロジェクト->Win32
です
457デフォルトの名無しさん:05/03/15 23:43:55
>>456
ごめん、初めて使ったが、できないみたい.
フォームアプリケーション以外は無理だな
458デフォルトの名無しさん:05/03/16 00:29:45
新たにダイアログを作ってメインウィンドウのクライアント領域に貼り付ければ
似たようなことはできる。
459デフォルトの名無しさん:05/03/16 01:15:40
ふつーはメインウィンドウを不可視で作って
代わりに一つ目の子ウィンドウをメインっぽく使う
460デフォルトの名無しさん:05/03/16 02:25:35
デバッガでライトアクセスブレークは設定できないのでしょうか?
VisualStudio.Net 2003を使っています。
461443:05/03/16 03:56:30
>>451>>452
なるほど、OSの問題の可能性ですか・・
ちなみに今使ってるOSはXPのSP2です
しかし昨日までは問題なく表示されていましたし、現時点で正しく表示されるマシンも
SP1だったり2だったりしますが、全てXPです
462デフォルトの名無しさん:05/03/16 09:13:59
>>451
だから、ダイアログのプロパティでフォントの設定が変わっていないか確認しろってば。
463443:05/03/16 14:43:05
>>447>>451>>453>>451、他

画面のプロパティやダイアログのプロパティを見ても元々設定したまま
だったので途方に暮れていましたが、
コントロールパネル>フォント
を見てみたら怪しいファイルが幾つか紛れていたので、削除したところ
元通りになりました。

フォント名のところに(#Set6)という風に書かれていたので、推測ですが
画面のプロパティで設定したものよりも優先されるシステムフォントのような
位置づけのフォントだったのではないかと思います。
※#Set6というのはうろ覚えです。またおかしくなったら怖いので入れ直して
 いません・・。

どうも有難うございました。
464デフォルトの名無しさん:05/03/16 23:00:40
>>454-459
つか、CFormView
465デフォルトの名無しさん:05/03/17 00:17:54
>>464
MFCじゃんか
死ねよカス
466デフォルトの名無しさん:05/03/17 02:00:19
VC++2003のデバッガなんですが
何らかの原因で実行行を指すカーソルやブレークポイントが
ずれて表示されてしまう現象がでます。
これはどんな原因でなってしまうのでしょうか?
ソリューションのリビルド等試しても直らないので
デバッガが非常に使いにくくて困っています…。
467デフォルトの名無しさん:05/03/17 02:01:33
最適化が掛かってしまってるとか。
468デフォルトの名無しさん:05/03/17 02:18:34
>>466
実行してからソースを修正してもずれることがある。
469466:05/03/17 02:20:28
>>467
設定はデフォルトから弄ってないです。
先ほど、プロジェクトを一回消去して作り直したのですが
直りませんでした…。
470デフォルトの名無しさん:05/03/17 02:25:25
よもやReleaseビルドじゃあるまいな。
471デフォルトの名無しさん:05/03/17 02:31:12
>>470
いえ。Debugビルドです。
昨日まで何ともなかったんですが、気づいたらずれてました。
472466:05/03/17 02:51:01
今、直りました。
変なコードでも混入したのかと思い、一度別のテキストエディターにコピーしてから
VCにコピーしなおしてみたらずれなくなりました。
473デフォルトの名無しさん:05/03/17 17:50:34
実はコンパイルしなおせばいいだけだったとかね。
474466:05/03/17 21:47:09
何となく予想がついたので確認してみたところ再現出来ました。
ソースコードにCR+LFとCRのコードが混ざっていたのが原因みたいです。
VSのエディターはにCR+LFとCRどちらでも改行表示されるのですが
デバッガーのカーソルはCR+LFのコードしか見ていないので実際の位置と
ずれてしまったようです。

昔のHELPファイルからAPIの引数をコピペしたときにCRだけのコードが混ざったようです。
デバッガーがCR+LFしか見てくれないなら
エディタ側でCR+LFに変換しくれてもいいと思うのですけどね…。
475デフォルトの名無しさん:05/03/18 07:00:07
勝手なことされちゃ困る
476デフォルトの名無しさん:05/03/18 09:42:02
変換されるのが普通だろ。
Microsoftの改行仕様なんだから。
477デフォルトの名無しさん:05/03/18 10:08:20
LFだけの場合も変換しないのはUnixでリビジョン管理をしていると助かる。
しかし、VisualStudio内で改行してしまうとCRLFになってしまうから、
結局フィルタリングする羽目になる。
478デフォルトの名無しさん:05/03/20 13:26:28
質問です

VC++2003のには、変数の読み書きを監視するウォッチポイント
のような機能はないのでしょうか?

あとメモリの表示も各進数でしか表示できないのですが
指定した構造体で表示したりできないのでしょうか?





479デフォルトの名無しさん:2005/03/22(火) 21:07:43
VC++.net非2003を使っているのですが、
これに付属のヘルプを見てるとよく英語のヘルプが出てくるのですが
これって日本語にならないものでしょうか?
480デフォルトの名無しさん:2005/03/22(火) 21:15:12
>>479
つ[翻訳サイト]
英語読めるようになったほうがいいよ。プログラマやってるなら必ず必要になるから。
481デフォルトの名無しさん:2005/03/22(火) 21:18:13
そうですか、英語しかないんですね。
必死に読むしかないか・・・。
482デフォルトの名無しさん:2005/03/23(水) 00:02:23
VC7(Version 7.0.9486、WinXP)で、
>>482 を実行すると "AAA未定義" と表示されます。
>>483 を実行すると "AAA定義済" と表示されます。

これに気付くのに3日間かかってしまったんですが、
この結果は正しいのでしょうか?
ただの知識不足?
483482:2005/03/23(水) 00:04:02
すいません、
>>482>>483
>>482>>484
と読みかえてください。

#define AAA

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
#ifdef AAA
cout << "AAA定義済" << endl;
#else
cout << "AAA未定義" << endl;
#endif
return 0;
}
484482:2005/03/23(水) 00:04:39
#include "stdafx.h"
#include <iostream>
using namespace std;

#define AAA

int _tmain(int argc, _TCHAR* argv[])
{
#ifdef AAA
cout << "AAA定義済" << endl;
#else
cout << "AAA未定義" << endl;
#endif
return 0;
}
485482:2005/03/23(水) 00:05:33
>>483>>484
#define AAA
の位置が違うだけです。
486デフォルトの名無しさん:2005/03/23(水) 00:27:05
>>485
なんでかはわからんけど、プリコンパイル済みヘッダが悪さしてるみたいだね。
offにすると期待通りになる。
487482:2005/03/23(水) 00:42:23
>>486
ほんとだ、正しく出ますね。
ありがとうございました。
488デフォルトの名無しさん:2005/03/23(水) 01:32:59
>>482
つーか、#include "stdafx.h"はただのインクルード行ではなく、
プリコンパイルの目安なんだからそれよりも前になんか書いたらリビルドしなくちゃダメ。
489デフォルトの名無しさん:2005/03/23(水) 06:56:53
ダイアログでテキストボックスなどのようにキャプションがないコントロールに関してALT+何かという操作をするにはどうすればいいのでしょうか?
またVBのようなTabIndexはどこで設定するのでしょうか?
質問ばかりですいません
490デフォルトの名無しさん:2005/03/23(水) 10:17:07
>>488
リビルドしても"AAA未定義"が出力されちゃうのよ。
#define AAA
が無視されてる感じに。
491デフォルトの名無しさん:2005/03/23(水) 10:50:06
#include "stdafx.h"
の上か下かで変わるのかね?
492デフォルトの名無しさん:2005/03/23(水) 10:58:53
>>491
int a = 1;
#include "stdafx.h"
int a = 2;

プリコンパイル済みヘッダが有効だと、こんなのも通ってしまう。
上のaが無かったことにされてる。
493491:2005/03/23(水) 11:37:08
ググって調べてみたけど、
プリコンパイルヘッダより前は全て無視されるみたいだね。

まあ確かにプリコンパイルヘッダより前に記述したらおかしくなるから
正しい仕様とは言えるけど。
494デフォルトの名無しさん:2005/03/23(水) 23:59:25
VC++ってすげーなw
495デフォルトの名無しさん:2005/03/24(木) 00:48:42
>>489
前半:意味不明
後半:ダイアログエディタでCtrl+D
496482:2005/03/24(木) 03:18:13
コンパイラオプション/Yufilenameの説明に書いてたんですね。
調査不足でした。
497489:2005/03/24(木) 06:19:42
>>495
ありがとうございます
前半は・・・例えばチェックボックスのキャプションに
CHECK(&C)ってかけばALT+Cでいける、みたいなのをキャプションがないテキストボックスにはどうすればいいのでしょう?
ということでした すいません
498デフォルトの名無しさん:2005/03/24(木) 17:46:58
VC++Toolkit 2003を取ってきたんですが、
コマンドプロンプトが出てきて
どうゆう入力をすればいいかわかりません。

でてくるメッセージは、

Setting enviroment for using Microsoft Visual C++ 2003 Toolkit.
(If you have another version of Visual Studio or Visual C++ installed and with
to use its tools from the command line, run vcvars32.bat for that version.)

Thank you for choosing the Visual C++ Toolkit 2003! Get started quickly by
building the code samples included in the "Samples" directory. Each sample
includes a short whitepaper discussing the Visual C++ features, and a batch
file for building the code.

Type "cl /?" for brief documentation on compiler options.

Visit  http://msdn.microsoft.com/visualc/using/documentation/default.aspx for
complete compiler documentation.

C:\Program Files\Microsoft Visual C++ Toolkit 2003>

って出てきます。                        ↑ここになんて入れれば・・・

環境は、
Cleron 2.4
メモリ 512MB
マザー  P4P800

の自作です。
499デフォルトの名無しさん:2005/03/24(木) 18:00:34
>>498
Toolkitスレがあるのでそちらで聞いたら?
つーか、そのレベルだと使いこなせないと思われ。
500デフォルトの名無しさん:2005/03/25(金) 01:05:06
ねえねえ、DLL内でnewしたポインタ値を使って、
呼び出し側(exe側)でdeleteしたらいけないって知ってました?
私は7年目ですけど、今初めて知りましたよ...orz
501デフォルトの名無しさん:2005/03/25(金) 01:06:55
>>500
うん
502デフォルトの名無しさん:2005/03/25(金) 12:26:03
なんでー?
503デフォルトの名無しさん:2005/03/25(金) 12:34:07
EXE側とDLL側のnew/deleteの実装が違うから
504デフォルトの名無しさん:2005/03/25(金) 21:13:42
抽象的な質問で申し訳ないけど、VC++.net2003で
皆さんは.net frameworkを使って作成してるのですか?
それとも6.0の頃と同様にMFCを使って作成?

また、配布方法はexeのみで配布できるのでしょうか。
それとも.net frameworkも一緒に配布する事に?
またMFCを使った場合は?

「?」ばっかりですまん。。
505デフォルトの名無しさん:2005/03/25(金) 21:35:39
506デフォルトの名無しさん:2005/03/25(金) 23:05:52
>>504
俺は.NETもMFCも使わない。
最近は、VC++も使わな(略。

あと、MFCは性的リンクでexe単体配布可。
507デフォルトの名無しさん:2005/03/25(金) 23:07:08
未だにDoc/Viewが理解できずにカッコイイViewがつくれない俺は・・・
508デフォルトの名無しさん:2005/03/26(土) 00:20:56
Doc/Viewなんかに頼るのは弱虫のすることだ。
キニスルナ
509デフォルトの名無しさん:2005/03/26(土) 03:07:34
でも、使えればそれなりかもしれんとは思う。
ただ、使えたからと言ってカッコイイViewができるとは限らない。
510デフォルトの名無しさん:2005/03/26(土) 03:09:26
>>503
実装が違うって具体的には?
new deleteの手法が違うってこと?
自分でも言ってる意味がわからないです...orz
511がっでむ:2005/03/26(土) 09:07:16
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
  _tprintf(_T("日本語\n"));
  return 0;
}

UNICODEにすると、ちゃんと動かない!

最初に
_tsetlocale(LC_ALL, _T(""));
したら動くようになったけど、そんな約束、どこに書かれてるよ・・・orz

MBCSなら何もしなくても「日本語」が出るのにさ・・・。
512デフォルトの名無しさん:2005/03/26(土) 09:33:40
>>510
例えばDLLはコンパイラAで作り,EXEをコンパイラBで作ったとする。
new/deleteの実装がコンパイラAは内部でHeapAlloc/HeapFreeを使っていて,
コンパイラBはGlobalAlloc/GlobalFreeを使っているという実装だったら……,と考えてみたらいい。

あるいは共に同一のコンパイラを使っていたとしてもそれぞれのスタートアップルーチンで
独自にCreateHeapしてそれを使っていたとしたらやっぱりアウト。
513デフォルトの名無しさん:2005/03/26(土) 09:36:36
MSDNを「UNICODE」で検索してるとそんな記述が見つかる
514デフォルトの名無しさん:2005/03/26(土) 10:36:18
>>511
エントリポイント変更した?
515デフォルトの名無しさん:2005/03/26(土) 10:50:29
>>510
new/deleteだけじゃないぞ。
C++のクラスも、またいで使うべきではない。
516デフォルトの名無しさん:2005/03/26(土) 11:12:44
std::string・MFCをスタティックリンクしたCStringをDLLからEXEに渡す・その逆とか。
ときどき見かけるよね。
517511:2005/03/26(土) 11:23:21
>>513
MSDNライブラリのprintfの解説のプログラム例で、
setlocale(LC_ALL, "Japanese") ;
が書かれていました。

printfなんて知ってるよ、と高をくくって、よく読まなかったのを反省してます。


>>514
wmainCRTStartupに変更してみましたが、setlocaleは不要になりませんでした。
518デフォルトの名無しさん:2005/03/26(土) 11:29:09
>>516
漏れは、
DLL内のクラスを継承した、EXE内の派生クラスの仮想関数を、
基本クラスから呼んでいるのを見た時は、ぞっとした。

まぁ、またいではいけないと言われたら、MFCすら使えないわな。
行儀悪くなくても、MFCの実装はDLL内にあるんだからさ。
519518:2005/03/26(土) 11:32:56
使っているMFCのバージョンが違うと、DLLをまたぐと危ない、というのもあるね。
MFC4.2と6.0では、バイナリ互換が保たれているので、リリース版なら問題ないらしい。

しかし、デバッグ版はバイナリ互換がないので、大変なことになる。
7.0では、バイナリ互換なくなったそうだから、やっぱり大変なことになるのかな。
520デフォルトの名無しさん:2005/03/26(土) 16:25:31
えええ〜。
では、DLLから得たヒープ(のポインタ)はどうやってdeleteするのでつか?
521デフォルトの名無しさん:2005/03/26(土) 16:32:21
DLL側

char* NewHoge( )
{
char* p=new[ 256];
strcpy(p,"Hogehoge");
return p;
}

EXE側
int main()
{
char* P=NewHoge();
printf( "%s", P);//正常に表示
delete P;//実行時エラー
return 0;
}

でPがどんな実装で生成されたヒープのポインタでも
printf()は正常に動作するのに、deleteはダメだなんて
なんかへんなのーーー。
522デフォルトの名無しさん:2005/03/26(土) 16:34:28
>>520
DLLにdeleteしてもらえばよかろう。
523デフォルトの名無しさん:2005/03/26(土) 16:34:33
プロトコルではなく決まり覚えろばか者
524デフォルトの名無しさん:2005/03/26(土) 16:36:14
延髄切りしたい人多い
525デフォルトの名無しさん:2005/03/26(土) 16:38:18
めんどくさいな。
526デフォルトの名無しさん:2005/03/26(土) 16:44:51
>>522
頼んだけどやってもらえませんでした。
527デフォルトの名無しさん:2005/03/26(土) 16:56:57
VCについているサンプルコードを利用して自作のプログラムを書いても良いのでしょうか?
著作権とかそこらへんはどうなっているのでしょう?
528デフォルトの名無しさん:2005/03/26(土) 16:59:56
>>527
ここでいいよと言われたからって、それを信じてもいいのかな?
あとで訴えられても知らんよ。
529デフォルトの名無しさん:2005/03/26(土) 17:15:42
まんまパクリならばれるだろうけど
特許取得されてるアルゴリズムとかじゃないかぎり
ほとんどの場合はばれようがない。
530デフォルトの名無しさん:2005/03/26(土) 17:29:28
>>521
変じゃないぞ。

土地に例えるとだな・・・
printfがやっているのは、指定された番地の土地に何があるか見に行くこと
deleteがやっているのは、指定された番地の土地の所有者の名義を帳簿上で書き換えること

前者は誰が見に行っても同じだが、
後者は、名義を管理している人以外がやったらダメでしょ。
531デフォルトの名無しさん:2005/03/26(土) 22:23:35
ほげー。リリースビルドだと何も起きないんだよな。
ってことはメモリリークしてるってか。やべーな。
もう遅いや。放っておこう。
532デフォルトの名無しさん:2005/03/26(土) 23:21:05
VC++.net2003を始めて勉強しようかと思うのですが
MS関係以外で、定番サイトは無いのでしょうか?
ざっと検索してみた所、意外に無かったので・・
533デフォルトの名無しさん:2005/03/26(土) 23:56:09
使用どころか、再配布まで許可されてるぞ。
ちゃんとRedist.txtに書いてあるぞ。
534デフォルトの名無しさん:2005/03/27(日) 00:21:01
それは一般まで含まれていないというオチとかない?
535デフォルトの名無しさん:2005/03/27(日) 00:56:05

現在職場5年目最大の壁にぶちあたっています。
WIN端末よりUNIXのファイル情報取得プログラムをつくっていたのですが
詳しい方法が検索してもでてこなかったのでFFFTPの
公開VCソースを解析し、UNIX上の管理ファイルをYYYY/MM/DD HH:MM
形式にて取得可能なソースコードを作成しました。
そこで、EXE形式だとパラメタ引継ぎ等、何かと不便なため
VCウイザード(非MFC)にてDLL化を行おうとかんがえました。
呼び出し元はVBのクラスモジュールなのですが、一応
EXE時代のソースコードをそのままVC DLLプロジェクトに移行できまして
、そのままプロトタイプまで作成完了しました。
現状ではVBからその関数化されたDLLをコールし、指定したUNIXサーバの
接続を実現し、要求した情報を取得できてます。
ただ、すごい問題点が宿題としてのこっているのですが
もともとEXEだったFFFTPソースコードはWindowをもっており
その画面のINITにより全てのプログラムを有効にしておりました。
しかし、私がつくっているのはDLL、画面を持たないプログラムリソースです」
すごく厨なコーディングなのですが、移植したプロジェクトのメインソースは
もちろんVC++なのでCPPがソースとなります。移植されるソースコードはFFFTP
となりCソースコードです。
ぶちゃけ、DLL化されたdefファイルにEXPORT宣言し、ヘッダとCPPに
メインとなる関数を定義し、それをVBから呼ぶつくりです。
なにをいいたいかというとFFFTPはEXE 私が作ったソースはDLL
アホなコードなのですが、FFFTPのWinMain関数を
DLLのCPPから直接コールしてたのです、当然処理はうごきます。
が、VB処理から呼ばれた、当該DLLは、処理さえ完了してくれるものの
親プログラムのVB画面が閉じられると 容赦なくワトソン君を出してくるのです
なんとかなりません?長文すみません
536デフォルトの名無しさん:2005/03/27(日) 00:58:41
ひさびさにワロタ
537デフォルトの名無しさん:2005/03/27(日) 01:02:09
ネタとしか思えんな
538デフォルトの名無しさん:2005/03/27(日) 01:03:56
読むのもめんどくさい
539デフォルトの名無しさん:2005/03/27(日) 01:11:50
FTP用のDLLを探してくればいいんじゃないかなぁ
540デフォルトの名無しさん:2005/03/27(日) 03:38:27
>535
一から作り直す。
FTPの仕様さえ判っていれば1日で作れると思うが
541デフォルトの名無しさん:2005/03/27(日) 09:11:42
>>535
5年も社会人やってる人間がこんな白痴的うんこ文書書くわけないだろ。ネタ決定。
542デフォルトの名無しさん:2005/03/27(日) 11:27:26
その前に5年もやってたらそのぐらいのプログラム一日で書いて下さい
543535:2005/03/27(日) 12:43:56
おまいら、そんな冷たい事いわないでなんとかなりませんか?
544デフォルトの名無しさん:2005/03/27(日) 12:49:12
何を期待してるのか知らんが、自分で何とかしなきゃならんだろ。
545535:2005/03/27(日) 13:27:08
期待はしておりませんが、解決方法、対策等を有能な方
よりアドバイスいただければ早期解決できるものかと希望をもってます。
実は今の作業完了を目処に今のプロジェクトを抜けたいと考えています。
当方 A型のため、中途半端で会社を去りたくないので何とか
パパっと解決したいと考えます。ご協力よろしくお願いします。
546535:2005/03/27(日) 14:27:26
マジレスながらVCに詳しい方の助言を戴きたいのですが
CPPソースに
EXPORT BOOL GetUnixInfo(LPSTR strIP,LPSTR strU,LPSTR strP,LPSTR strFile,LPSTR Getinfo){
WinMain();
}

と現状はDLLなので外部宣言のメイン関数は上記のコードとなります。
WinMain();はEXE時代の親コードとなり、現在呼び方が分からないので
やむなく直接コールしています。
多分このやり方が厨で、ワトソン君を誘発してるとおもいますので
要するにEXE時代のWinMain,InitApp,MakeAllWindow
あたりのメインコードをDLL用にすっきりまとめたいのです。
そのマイナーな方法を助言いただきたく思うのです。
547デフォルトの名無しさん:2005/03/27(日) 14:38:47
>>535
上司に相談しろ。
548デフォルトの名無しさん:2005/03/27(日) 16:27:07
質問です。
VC++ SDKで開発をしています。

別のアプリケーションのテキストウィンドウの
キャレットの位置を取得して、
その位置にポップアップメニューを出したいと考えています。

BOOL GetCaretPos(
LPPOINT lpPoint // address of structure to receive coordinates
);

というのがあったのですが、
自分のウィンドウのキャレット位置しか取得できませんでした。

何か良い手法はないでしょうか?
549デフォルトの名無しさん:2005/03/27(日) 17:32:53
デバッガの使い方とか表示の意味が良くわからないんですが
なんかいいサイトないですか?
550デフォルトの名無しさん:2005/03/27(日) 19:00:11
>>535
5年も何やってたんですか?(マジレス)
551535:2005/03/27(日) 20:08:52
煽りや冷やかしは要らないので
本当に技術ある方よろしくお願いします
552デフォルトの名無しさん:2005/03/27(日) 20:23:34
5年選手のネタレスに煽り以外何を書けと?
553デフォルトの名無しさん:2005/03/27(日) 20:24:51
>>551
マジレスすると、>>539-540が出来ないんだったら上司なりに相談するべき。
ここで説明できる量じゃないし、そんな暇な奴が居るとも思えない。
ちょっとした仕事だ。そしてそれは君のやることだ。
554デフォルトの名無しさん:2005/03/27(日) 20:37:18
処理も動いており 不具合のオオヨソの原因がわかってる内容に対して
改めてつくり直すとか別の手法を検討するなどあまりにも無意味じゃないですか?
イチからジュウ教えてくれと言ってる訳じゃなく
問題点と改善法を見出し
それについて助言を求めているのです。
あなたも素人じゃないなら不必要に
質問の回答とはほど遠いようなアドバイス等するべきじゃないんではないですか?
555デフォルトの名無しさん:2005/03/27(日) 20:46:34
> 問題点と改善法

・問題点
 あなたは根本的にこの仕事に向いていない

・改善法
 いますぐやめるべき

マジレス。
556デフォルトの名無しさん:2005/03/27(日) 20:53:28
せんせー>549
はネタじゃないんです、なんかいいサイト無いですか?
557デフォルトの名無しさん:2005/03/27(日) 20:55:22
もうわかりましたから
とりあえず質問に対する技術的な
回答をおねがいしますよホント。
vcが苦手なんであればすっこんでいてくだい。
よろしくおねがいします
558デフォルトの名無しさん:2005/03/27(日) 21:08:28
559デフォルトの名無しさん:2005/03/27(日) 21:10:57
誰か良いVC++.netサイトを教えてちょ>>532
560デフォルトの名無しさん:2005/03/27(日) 21:14:31
>>559
何を知りたいんだよ。
IDEの使い方ならマニュアルでも読め
561デフォルトの名無しさん:2005/03/27(日) 21:19:19
>>559
何が良いかはその人の持っている技術力による。
良いサイトが見つけられないなら、もっと探せ。
562デフォルトの名無しさん:2005/03/27(日) 21:50:53
>>560-561
了解です。
ネコでも・・みたいなサイトが無いかな、と思って。
定番サイトって無いもんなんですな。
563561:2005/03/27(日) 21:57:37
>>562
ネコでもほど親切じゃないが、探せばたくさんある。
564デフォルトの名無しさん:2005/03/27(日) 22:00:34
>>562
スタートページからいけるサイトが意外と使える。
565561:2005/03/27(日) 22:03:19
VC++.NETで聞いているってことは、マネージドC++か?
566535:2005/03/27(日) 22:20:58
理解しました。自分で何とか解決しようと思います。
多少イライラしてましたので心無い発言もしてしまいました。
本心では無いのでお許しください。
すいませんでした。
皆さんのおっしゃる通りです。
五年間いろんな壁をのりこえて来たので
今回もなんとか自力でがんばります。
親身に回答いただきありがとうございました。
567デフォルトの名無しさん:2005/03/27(日) 23:16:29
5年間もの間、度々こんな壁にぶつかってたのか…
南無…
568デフォルトの名無しさん:2005/03/28(月) 00:37:37
>>564
とんくす子
569デフォルトの名無しさん:2005/03/28(月) 02:40:16
>>549
マニュアル嫁

>>535
>>554>>557もお前さんか。
作り直したほうが早くて確実だから、作り直しを勧めているひとが大勢いるわけですよ。

しくみもわからずに人様のソースを盗むようなことやってるから、5年経ってもセンスがないのよ。
人様のソースを盗むのも悪くはないが、ちゃんとその中身を読んで理解して、
そのケースに最も適切なソースを盗むようにしようよ。

人様のソースであっても、盗んだ以上、その品質の責任は自分にあるんですよ!!!
570569:2005/03/28(月) 02:43:42
というだけではあれなので、もう少しアドバイス。

とりあえずVC++にくっついてくるMFCのWinINetクラスはどうよ。
VC++にマニュアルもサンプルもついてるんだからさ。
571デフォルトの名無しさん:2005/03/28(月) 04:20:02
VCのコンパイラは自動的にSIMDを利用してくれるのでしょうか?
たしかインテルのコンパイラは自動的に利用してくれたと思うのですが。
572デフォルトの名無しさん:2005/03/28(月) 08:58:26
> 今回もなんとか自力でがんばります。
 お ね が い だ か ら 辞 め て く だ さ い

その「自力でがんばった」コード誰が保守すると思ってるの?ねえ?あなたが一生責任持って保守してくれるの?ねえ?ねえ?
573デフォルトの名無しさん:2005/03/28(月) 10:11:49
>>571
VC7.1 (VC7も?) の場合、
コンパイルオプションを設定すれば、勝手に使ってくれるようになったはず。
574デフォルトの名無しさん:2005/03/28(月) 10:51:13
>>573
その場合、例えばsseの入っていないパソコン上でも実行可能な物を作ってくれるのでしょうか?
それともsseの入っていないパソコンではエラーとなるようなものができてしまうのでしょうか?
575デフォルトの名無しさん:2005/03/28(月) 10:59:37
WM_SYSCOMMAND をプロシージャの中に入れておくと、
WM_COMMAND メッセージで指定している部分を処理してくれないのですが、
一体どうすればいいでしょうか?
576デフォルトの名無しさん:2005/03/28(月) 11:01:56
Visual Studio .NET 2003のウィザードでWin32 プロジェクトを作って
すぐF5でデバッグ実行して終了すると変な例外が出てるんですが、こういうものなんでしょうか。

> NullpoProject.exe の 0x77cfe062 で初回の例外が発生しました : 0xC0000005: 場所 0x25ad3f8c を読み込み中にアクセス違反が発生しました。 。
> NullpoProject.exe の 0x77cfe062 で初回の例外が発生しました : 0xC0000005: 場所 0x25ad3f8c を読み込み中にアクセス違反が発生しました。 。
> プログラム '[3248] NullpoProject.exe: ネイティブ' はコード 0 (0x0) で終了しました。
577デフォルトの名無しさん:2005/03/28(月) 11:32:30
>>575
コードが悪い
case がおかしいとか、break が無いとか。

>>576
コードが悪い
自動生成されたコードだけで出るんであれば、
環境が悪いんじゃない?
578デフォルトの名無しさん:2005/03/28(月) 12:03:34
思いっきり端折ってこんな感じなんですけど、やっぱり WM_SYSCOMMAND の
コメントアウトをはずすと、タスクマネージャーからしか終了できなくなってしまいます。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/279.cpp

何が悪いのかわかりません・・・orz
579デフォルトの名無しさん:2005/03/28(月) 12:04:47
>>575
return TRUE;
return FALSE;
return DefaultWindowProc();
この違い分かってる?
580デフォルトの名無しさん:2005/03/28(月) 12:06:09
case WM_SYSCOMMAND:
return TRUE;
581デフォルトの名無しさん:2005/03/28(月) 12:06:58
違った
こっちだ
case WM_SYSCOMMAND:
return DefWindowProc( hpwnd, msg, wp, lp ) ;
582デフォルトの名無しさん:2005/03/28(月) 12:13:14
おぉ・・・ほんとだ、正常に動きました。
うえの3つの違い、全くわかりません。ダイアログボックスとかでは、
TURE とか FALSE になるんだと思ってました。
もしよろしければ、お教え願えませんでしょうか。
583デフォルトの名無しさん:2005/03/28(月) 12:41:33
直ったついでに聞きたい気持ちは分かるが
オウム返し的な質問は歓迎されない
ドキュメントくらいは読んだ方が良い
584デフォルトの名無しさん:2005/03/28(月) 12:47:32
すみません。全くその通りですね。ググってたら、出てきました。
一応後々の人たちのために
http://wisdom.sakura.ne.jp/system/winapi/win32/win12.html

お陰で理解できました。ありがとうございます!
585デフォルトの名無しさん:2005/03/28(月) 12:50:46
>>584
ついでに言っとくと、
WndProc コールバックや、そこから DefWindowProc を呼び出す
っていう発想は、オブジェクト指向の継承とポリモフィズムの実装そのもの

WinAPI が作られた当時は C で頑張っていたんだが、その名残みたいなもの
586デフォルトの名無しさん:2005/03/28(月) 13:10:02
>>574
残念ながら、CPUによって場合分けするのは、プログラマの仕事。

>>576
0x77cfe062のアドレスにロードされたモジュールは何?
あと、デバッガの設定で例外が出たらブレークするように設定して、コールスタックみてみ。
587デフォルトの名無しさん:2005/03/28(月) 21:03:51
VCのコンパイラはインラインアセンブラでSSEとか使うとちゃんと
使えるようになるだけで自動的にSSEとかMMXのコードを吐いてくれる
わけではない。要するに、単に対応しているだけだ。
インテルのコンパイラは最適化によっては自動的にそういうコードを
吐いてくれるが、最適化しやすいようにソースコードを書いておかないと
あんまり期待出来ない。
どちらを使うにしろ、結局はインラインアセンブラで頑張るか、
fvec.hとかのライブラリでSSE用のソースコードを書くとかすることに
なるだろう。
588デフォルトの名無しさん:2005/03/29(火) 01:56:27
>>587
嘘つき〜
VC7以降はfloatやdoubleの計算にSSEやSSE2を使ったコードを吐きますよ。

しかも、インラインアセンブラで書くのは良くない。
intrinsicを使って書けば、コンパイラが最適化までしてくれるぞ。

ただし罠があって、intrinsic使った部分は、関数のインライン展開を設定すると、最適化されなくなる。
589デフォルトの名無しさん:2005/03/29(火) 02:05:46
>>588
587じゃないけど、関数毎にSSE最適化使うか設定出来るのか?
590デフォルトの名無しさん:2005/03/29(火) 14:46:18
>>588
知ったかクン、ご苦労
591デフォルトの名無しさん:2005/03/29(火) 15:19:13
>VC7以降はfloatやdoubleの計算にSSEやSSE2を使ったコードを吐きますよ。

VC++7.0には/archオプションは無いからSSEとかのコードは吐いてくれないよ。
対応しているのはVC++7.1。.NET2003だ。しかし、それとて、どこでSSEを使って
くれるかは完全にコンパイラ任せだからコントロールしにくい。

>intrinsicを使って書けば、コンパイラが最適化までしてくれるぞ。
自慢して言うことかね。intrinsicをもう一度勉強し直した方がいい。
592さげ:2005/03/29(火) 15:50:47
インラインアセンブラが駄目と言う香具師は
インラインアセンブラの使い方を知らないんだろうな。
初心者スレだから、ま、いいか。
593デフォルトの名無しさん:2005/03/29(火) 17:18:53
淫乱アセンブラはVCに付属しているのですか?
594デフォルトの名無しさん:2005/03/29(火) 17:21:21
淫乱は付いてこない。
595デフォルトの名無しさん:2005/03/29(火) 17:22:43
どのアセンブラがよいですか?
596デフォルトの名無しさん:2005/03/29(火) 17:29:12
インラインアセンブラで最適化効率悪くなるって
どんな組み方するとなるんだ?

今の所はそんなことないし、よく分からん。
597デフォルトの名無しさん:2005/03/29(火) 18:09:46
初心者の場合、下手に淫乱アセンブラで書くより、コンパイラに任せた方が、最適化されることが多い。
598デフォルトの名無しさん:2005/03/30(水) 02:07:49
つい最近VC++を始めた者です。
指定したファイルを読み込み、処理結果をエディットボックスに表示するという、
ダイアログベースの簡単なプログラムを作っています。
ファイルを1行ずつ処理しながら
m_strEdit = m_strEdit + buf;
のようにメンバ変数に処理結果の追加を繰り返し、最後に
UpdateData(FALSE);
としてダイアログを表示しています。
これで一応動作はするのですが、入力ファイルサイズに比例して出力も大きくなるので、
50KBぐらいになると表示するまでに時間が掛かって「あれ?動いてない?」という感じです。
処理速度を上げるにはどうすればよいでしょうか?
アドバイスよろしくお願いします。
599588:2005/03/30(水) 02:27:08
>>589
関数ごとに設定をわける意味はないよ。

同じソースファイルをマクロ定義で関数名など切り替えて、
コンパイラオプション変えて2回コンパイルするのよ。

>>590
お前さんはVC6やVC7でSSE2を使ったコードを書いたことあるのか?
漏れはあるぞ。

>>591
7.0はダメなのか・・・知らなかった。
速効で7.1に無償アップデートしちゃったから、試したことなかったよ。

俺のコードが下手なのかもしれないが、
自前でインラインアセンブラで書いたコードよりも、
intrinsicを使ってコンパイラに最適化させたコードのほうが速かったんですよ。

つーか、自前で書いたほうが速い人って、いったいどんなコード書いてるの?
アセンブラで凄いコードを書いてるか、C/C++で劣悪すぎるコードを書いてるのか、どっちなのよ。

>>592
インラインアセンブラで書けば、アセンブラで書いた部分だけは、
人間の手作業でコンパイラより速いコードを書けるかもしれないけど、
その前後のC/C++で書いたコードのコンパイラの最適化を阻害するんですよ。

実際に比較実験をしたからこそ言える話でしてね。
600588:2005/03/30(水) 02:36:34
>>596

>>599の終わりに書いたけど・・・

例が悪いけど、
nHoge += 10 ;
_asm{ 何か }
nHoge += 10 ;
のようなコードで、nHoge +=20 にまとめてくれなくなります。

こういう露骨な例だけでなく、かなりの最適化が行われなくなります。
混ぜないで全部アセンブラで書く人には関係ない話ですけどね。
601デフォルトの名無しさん:2005/03/30(水) 02:46:07
>>599
> 関数ごとに設定をわける意味はないよ。
> 同じソースファイルをマクロ定義で関数名など切り替えて、
> コンパイラオプション変えて2回コンパイルするのよ。

意味はあるだろ。SSE使えないマシンはどうするの?
実行ファイルのサイズも無駄に大きくなるし。

> その前後のC/C++で書いたコードのコンパイラの最適化を阻害するんですよ。
> 実際に比較実験をしたからこそ言える話でしてね。

これってどんなコード書いたの?
最適化を阻害するとか言う話があるから、組み込んだ後、
速度チェックしてみたけど、特に速度が落ちたりはしなかったんだよね。
グローバル変数使ってたりはしないよね?
602デフォルトの名無しさん:2005/03/30(水) 04:28:49
>>601
アセンブラの話題と全く関係ないのですが、グロ-バル変数よりローカル変数の方が最適化されやすいのでしょうか?
ローカル変数の方が毎回生成されるため、遅くなると思っていたのですが。
例えば、

int i,j;
fot (i=0;i<10;i++)
{
    for (j=0;j<10;j++)
    {
    ....................
    }
}
より

fot (int i=0;i<10;i++)
{
    for (int j=0;j<10;j++)
    {
    ....................
    }
}

の方が高速なのでしょうか?
603デフォルトの名無しさん:2005/03/30(水) 04:42:12

グローバルは、メモリからいちいちロードする手間がかかりますので
はっきりいって遅いです

ローカルはコンパイルのときに適切なレジスタに値が設定され
ロードの手間が要らないので早いです

その例では最適化は同じはずですよ
通常では関数をまたいだ1ファイル内の共通の変数を
グローバル変数と呼びますけど
604デフォルトの名無しさん:2005/03/30(水) 06:25:26
fot (int i=0;i<10;i++) 
{
    double *a = new double[100];
    .
    .
    .
    delete [] a;

はどうなんでしょう?
for外で作成した方がよいのでしょうか?
605デフォルトの名無しさん:2005/03/30(水) 06:42:53
>>604
ヒープをループ内で作ったり削除したりはやばいですね
メモリが断片化しやすいですし
何よりもnewはメモリ作成までの工程がたくさんあって
この例だと確実に超遅いです

ヒープは多くのメモリを確保した後使いまわしたほうが
速さ的にはいいですが
初心者は使う場所よって確保したのち
その場で開放するのが無難かと
しかし気を付けないとバグも出やすいですし
メモリの開放を忘れたりして
初心者にはお勧めできません

デフォルトでスタックメモリは十分確保されてるので
配列は普通に

double a[100];
for(int i=0; i<10; i++) {
a[i] = ......;
}

のほうがいいと思います
606デフォルトの名無しさん:2005/03/30(水) 07:02:11
605に補足ですが
呼び出した関数のループ内で
同じ関数を呼び出す(再帰呼び出し)回数が多すぎると
確実にスタックメモリがたらなくなるので
注意してください
607デフォルトの名無しさん:2005/03/30(水) 07:57:17
VC++で簡単なプログラムを作ってみました。
何台かのPCで動作確認したところ、
一部のPCで「MFC71D.DLL」が見つからない というエラーが出て動作しませんでした。
ランタイムのようなものが必要なのかと思い、自分でも調べてみたのですが解決できませんでした。
原因と解決策が分かる方おりましたら、ご指導よろしくお願いします。
608デフォルトの名無しさん:2005/03/30(水) 08:02:54
607
プロジェクトのプロパティでMFCライブラリにスタティックリンクに設定
609デフォルトの名無しさん:2005/03/30(水) 08:50:58
>>607
ぉぃぉぃ
それデバッグ版じゃないか
610デフォルトの名無しさん:2005/03/30(水) 09:17:01
>>607
>609に補足。デバッグ版を配布しちゃいけません。
611デフォルトの名無しさん:2005/03/30(水) 11:25:31
>>598
>ファイルを1行ずつ処理しながら
が何してるかわからんけど、一気に読み込んで一気に処理するとかできんの?
612デフォルトの名無しさん:2005/03/30(水) 11:47:55
あのですね、初歩的なことだったら申し訳ないんですが、スタティックテキストのサイズを変更したいときはどうすればいいですか?
613デフォルトの名無しさん:2005/03/30(水) 11:55:14
>>601
>前半
速度が必要な部分だけ抜き出して別ソースファイルにして、
マクロで関数名を変えてコンパイルして、x87用とSSE2用の2つのオブジェクトを作って、
それを呼ぶ側が条件分岐するなり、関数ポインタ書き換えるなりで、呼び分けるのよ。

>後半
MD5チェックサムを求める何の変哲もないコードです。
グローバル変数は使ってないです。

x = (x << n) || ( x >> (32-n)) ;

__asm { ROL x, n} に置き換えると、元の1.2〜1.4倍くらい実行時間でした。
x = _lrotr(x, 32-n) ; に置き換えると、0.7〜0.8倍くらいの実行時間でした。
614612:2005/03/30(水) 11:56:17
ごめんなさい、自己解決しました・・・・
615デフォルトの名無しさん:2005/03/30(水) 12:14:18
>>598
たかが50KBのファイルを読み込み処理するのに、時間がかかるなんてことはありえないけどね。
いつの時代のPC使ってるの?って突っ込みたくなるかも。
486時代?
616601:2005/03/30(水) 14:56:41
>>613
>前半
すまん早とちりしてた。

>後半,600
関数内の話?
関数外の最適化に影響が出るって話だから、
そっちが気になっているんだが。
まあ、これ以上はスレ違いになっちゃうが…。
617613:2005/03/30(水) 16:08:23
>>616
関数内の話です。
618デフォルトの名無しさん:2005/03/30(水) 16:47:00
>>613
そんな使い方で遅くなるとか言ってたのかよ。
619613:2005/03/30(水) 18:07:23
>>618
実際にはSSE2を使ってますが、
ここに例として上げるのは大変なので、
最もシンプルなものを例として選びました。

※ROLとRORが違うのは、RORのほうが微妙に速いからなので、気にしないで。
620デフォルトの名無しさん:2005/03/30(水) 18:10:12
ウィンドウクライアント領域の座標を GetClientRect みたいに
相対座標じゃなくて、画面左上を(0,0)としてみた絶対座標で得たいのですが、
どうすればいいでしょうか?
621デフォルトの名無しさん:2005/03/30(水) 18:30:34
>>620
ClientToScreen
622デフォルトの名無しさん:2005/03/30(水) 19:12:19
おぉ! そんな便利な関数があったのですね!
どうもありがとう御座いました!
623デフォルトの名無しさん:2005/03/30(水) 19:15:08
>>622
それってAPI質問箱スレにする質問かと...
624デフォルトの名無しさん:2005/03/30(水) 21:16:46
VC7.1。
int main(){
using namespace std;

for(int i=0;;){}
int j;

return 0;
}
fatal error C1506: ブロックが大きすぎて、コンパイルできません。

using〜がなければ通る。
iの宣言を外に出せば通る。

・・・・・・orz
625607:2005/03/30(水) 21:23:05
回答ありがとうございました。
皆さんの回答を手がかりに、なんとか解決できました。
626デフォルトの名無しさん:2005/03/30(水) 22:16:22
SDIのアプリ作ってるんですけど、
Scroll使ってもリストビューがそのままなのはどうしてでしょうか?
627デフォルトの名無しさん:2005/03/31(木) 01:43:49
for(int i=0;;){}
int j;

int i=0;
while(){}
int j;

どこが問題でしょうか。
628デフォルトの名無しさん:2005/03/31(木) 01:44:54
>>627
条件がないぞ
629デフォルトの名無しさん:2005/03/31(木) 01:53:47 BE:255150599-###
630デフォルトの名無しさん:2005/03/31(木) 02:40:08
void function()
{
float a=123.0f;
または
const float a=123.0f;

......
......
}

aの値は変化せず参照だけしたい時どっちが正しいのでしょうか
またコンパイルした時最適化に違いはあるのでしょうか
環境はVC6です
631デフォルトの名無しさん:2005/03/31(木) 03:15:00
>>630
自分で答を出しているじゃないか。「変化しない」ときにconstをつけずにいつつけるんだ?
632デフォルトの名無しさん:2005/03/31(木) 04:04:29
>>631
レスありがとう

const が変化しないときに付けるのは分かってるんですが
ローカル変数はコンパイルした時、確かレジスタに値が設定されると思います
const をつけていると、定数となってその値が
メモリに設定されてしまうのではないかと心配なのです
メモリに設定されると、ロードする手間が増えると聞いた事があるのですが...
もしそうなら const を付けないで行こうと思っているのですが
633デフォルトの名無しさん:2005/03/31(木) 04:04:32
>>630
602と同じ人か?
一応constをつけた方が最適化されやすいとされている。
ただ、constは読みやすくしたり安全性を高める物であって
そういう風に気にするのはあまりよろしくないぞ。
634デフォルトの名無しさん:2005/03/31(木) 04:13:32
>>633
レスありがとう
残念ながら602ではありませんw

なるほど、そういうことですか
const のほうが最適化されやすいだけと言うことですね
その方向でやってみます

性格のせいか細かいところについつい目がいってしまって
おかげでコーディングがぜんぜん進みませんw
635デフォルトの名無しさん:2005/03/31(木) 05:17:32
山師さん@トレード中 :2005/03/30(水) 23:54:44 ID:txMVkxYQ
社名 株式会社エムステーション・ドットコム 株式会社エムスタ
英文社名 M Station.com inc. m-sta.com inc.
設立年月日 2000年6月6日 2000年2月15日
代表者 代表取締役社長 金 鎭浩(キム ジンホ) 代表取締役社長 金 鎭浩(キム ジンホ)
本社所在地 〒150-0002 東京都渋谷区渋谷3丁目26番20号 三鱗渋谷ビル 〒150-0002 東京都渋谷区渋谷3丁目26番20号 三鱗渋谷ビル
資本金 11億7560万 1億7560万
従業員 - 55人
役員 代表取締役社長 金 鎭浩
代表取締役副社長 崔 弘林
副社長 菊地原 靖孝
取締役常務 野口 秀
取締役 堀江 貴文←←←←←←←←←←←←←←←***
(株式会社オン・ザ・エッヂ代表取締役)
636デフォルトの名無しさん:2005/03/31(木) 06:22:55
MS-DOSのdir みたいな物を作りたいんで、_findfirst って関数を知ったんですが、
これだと、\\aaa\b\ という形式であらわされるパスにはアクセスできないんです

他にCFileFind とかいろいろ試したんですが、
どれもうまくいけないんで、どの関数を使えばいいんでしょう
637デフォルトの名無しさん:2005/03/31(木) 08:29:19
>>636
WinAPIでよければ...
FindFirstFileとFindNextFileとを組み合わすしかなかったと思うたが
この二つで検索すればどっかにいいサイトあるから
他の方法ものっとるかも
638デフォルトの名無しさん:2005/03/31(木) 09:05:35
>>636
\\aaa\b\の書き方出来なかったっけ?
\\aaa\\b\\*.* も駄目か?
駄目なら、_chdir使ってみ。
639デフォルトの名無しさん:2005/03/31(木) 09:11:04
>>634
細かいことを気にするなら、それぞれをReleaseビルドでアセンブリ出力を見比べてみればよろしい。
const だからと言って、メモリに割り付けられるとは限らない。
640デフォルトの名無しさん:2005/03/31(木) 09:13:12
>636はバックスラッシュをエスケープしてないんじゃなかろか。
641デフォルトの名無しさん:2005/03/31(木) 09:21:12
たぶん636はUNCパスのことを言いたいんじゃないかと思う。
642デフォルトの名無しさん:2005/03/31(木) 09:27:54
>>641
それが判ってないのは>638だけジャマイカ。
643デフォルトの名無しさん:2005/03/31(木) 09:38:07
>>642
ごめんなさい。
644デフォルトの名無しさん:2005/03/31(木) 15:51:01
foo.bar
と、
foo::bar
の違いが分かりません。
VC++プログラムでは前者はあまり見ないんですが、もしかして使っちゃダメとか?
あと、オブジェクトのインスタンスはどこで作るべきなのか、ご教授ください。
645デフォルトの名無しさん:2005/03/31(木) 15:52:17
構造体とクラス
646デフォルトの名無しさん:2005/03/31(木) 15:55:34
>645
失礼、foo.barでbar関数の事ってありますよね・・・?
647デフォルトの名無しさん:2005/03/31(木) 15:58:48
>>645
文脈も読めないなら書くな。

>>644
前者のfooはオブジェクト(実体)。後者のfooはクラス(または構造体)。
例えば、
struct Foo {
int func();
static int static_func();
} foo;
ならば、
foo.func()かFoo::static_func()で呼び出すことになる。

つーか、C++の基礎の勉強して来いや。
648デフォルトの名無しさん:2005/03/31(木) 16:07:13
やっぱり基礎でしたか・・・・わかりました。勉強しなおしてきます。
で、ですね、最後に、インスタンスはどこで作れば良いでしょうか?
649デフォルトの名無しさん:2005/03/31(木) 16:32:43
>>648
必要なところで。

インスタンスを作る≒変数を宣言するかnewを呼ぶこと。
650デフォルトの名無しさん:2005/03/31(木) 16:50:01
コーディングとは一切関係なく、環境に関しての質問ですが、
Xkeymacsを使って、エディタのキーバインドをEmacs風にしていると、
Shift+Ctrl+Bとか、Ctrl+F5とかの元々VCに登録されていたショートカットが機能しなくなるのですが、
それを解決する方法ってありますでしょうか。
651デフォルトの名無しさん:2005/03/31(木) 17:31:32
>>639
レス遅れてすみません
アセンブリ出力の比べ方がちょっと分からないですが
あとは自分で調べてみます
ありがとうございました
652デフォルトの名無しさん:2005/03/31(木) 18:33:41
出戻りプログラマです。
VC++6.0使ってみたんだけど、APIの一覧ってのはヘルプに無いのかな?

本買わないとダメ?
昔はAPIバイブルなんてあったけど今もあるのかな?
653デフォルトの名無しさん:2005/03/31(木) 18:52:10
654デフォルトの名無しさん:2005/03/31(木) 19:05:46
>>652
MSDNがインストールしているなら
プラットホームSDKカテゴリに載ってる筈です
655デフォルトの名無しさん:2005/03/31(木) 19:30:33
何がなんだか良く分からなくて、とりあえず
新VisualC++.NET入門とかいう本を買ったんですが、
さっぱりです・・・いい解説ページみたいのないでしょうか
656デフォルトの名無しさん:2005/03/31(木) 20:21:42
>>654
あの...
どの解説本か分かりませんが初心者用の
.NETの解説本にはWinAPI一覧は載っていないのでは?
それにVC6と.NETは別物ですし
まずVC6よりWindowsAPIの参考書を買ったほうがいいと思います

とりあえずMSDNは
MSDNのディスクを入れウィザードに従って
標準インストールして後、VC6を立ち上げ
メニューのヘルプ->検索を選択、
キーワードにCreateWindowで探せば
プラットホームSDKにたどり着くと思います

後は、同僚の方に聞いていただくか
検索エンジンで調べたりして
ご自分で解決していただくしかないかと...
失礼かもしれませんがこれからも大丈夫なんでしょうか?
心配ですね...
657デフォルトの名無しさん:2005/03/31(木) 20:35:33

|///~~|    _______
|///  | → |////|
|________|   |////|
        ~~~~~~

ある操作をした時、
ウィンドウを /// 部分と同じサイズに変更したいんですけど、どうすればいいでしょうか。
現在は、クライアント領域の幅と高さを保存していて、その値を用いて MoveWindow で
ウィンドウを動かしているのですが、それだと、期待した大きさよりウィンドウが小さく
なってしまいます。

Window をクライアント領域の幅と高さにあわせた移動をさせたいのです。
こういうことって、簡単に出来ないのですか?

やはり、タイトルバーの大きさを得て、枠の大きさを得て・・・とイチイチやっていかなければ
うまくいかないものなのでしょうか? このへたくそな説明で理解できる方どうか、ご教授ください ;;
658デフォルトの名無しさん:2005/03/31(木) 20:40:01
>枠の大きさを得て・・・とイチイチやっていかなければ
イチイチやらんといかんと思うよ。大きさ変更枠はシステムで変えれるし。
659デフォルトの名無しさん:2005/03/31(木) 20:49:52
>>657
MoveWindowはウィンドウ全体のサイズを設定するから
クライアント領域のサイズで合わせると
外枠の分小さくなるのは当然
GetWindowRect使ってウィンドウ全体の値を保存してみそ
660デフォルトの名無しさん:2005/03/31(木) 20:55:36
>>569
変えたいのはクライアントのある領域の大きさでしょ?
661デフォルトの名無しさん:2005/03/31(木) 21:35:27
クライアント領域の大きさをユーザーに決定してもらって、
その大きさに合わせて、ウィンドウのサイズも変更させたかったのです。

>大きさ変更枠はシステムで変えれるし。
これで納得できました。一つ一つサイズを得る方向で考えることにします。

レス下さった>>659さんもありがとうございました。
662デフォルトの名無しさん:2005/03/31(木) 22:07:43
ファイルを右クリック→プログラムから開く
で自分のプログラムはしらせるときにそのファイル名を取得するにはどうしたらよいでしょうか?

Microsoft Visual Studio .NET 2003
663デフォルトの名無しさん:2005/03/31(木) 22:19:39
意味わかんない
664デフォルトの名無しさん:2005/03/31(木) 22:24:21
>>662
GetCommandLine
665デフォルトの名無しさん:2005/03/31(木) 22:30:59
>>664
さんくす
666デフォルトの名無しさん:皇紀2665/04/01(金) 01:37:51
VS.NET2003使ってます。
ボタンとかをXPスタイルにするのってどうやるんでしょうか
667デフォルトの名無しさん:皇紀2665/04/01(金) 01:51:27
コモンコントロールマニフェストでググれ
668デフォルトの名無しさん:皇紀2665/04/01(金) 02:08:56
>>667
さんくすこ!
669デフォルトの名無しさん:皇紀2665/04/01(金) 02:10:46
newやdelete演算子をオーバーロードした場合の動作って、どうなるのでしょうか?
オーバーロードした処理に完全に置き換わるのかと思ったのですが、newをオーバーロードしてもコンストラクタはしっかり呼ばれるようで。
例えばnewのオーバーロードの中身を
int i = 0;
だけ。などまったく意味のない処理に置き換えたとしても、フリーストアへのメモリの確保なども従来どおり行っているのでしょうか?
670デフォルトの名無しさん:皇紀2665/04/01(金) 02:59:25
なんかめんどくさい事わざわざやってる気がする
絶対必要なの?
普通にnew,deleteでいいんじゃない
下手に回りくどくやっても虫が湧くもとだと思うけど
671デフォルトの名無しさん:皇紀2665/04/01(金) 04:07:08
PrintPreviewDialogの印刷を開始するボタンを無効にできませんか?
672デフォルトの名無しさん:皇紀2665/04/01(金) 09:29:58
>>669
newをオーバーロードするとoperator newの中身を処理した後、
その戻り値をthisポインタにしてコンストラクタが呼ばれる。(newの結果もそのポインタになる。)
operator newの戻り値はクラスのポインタではなくvoid *となっているのは、
operator newを行った時点では(コンストラクタが呼ばれていないので)まだインスタンスは出来上がっていないから。

operator deleteは逆にまずデストラクタを呼び出してからoperator deleteが呼ばれる。
デストラクタを呼んだ後だからもはやただのメモリブロックを表すに過ぎないからこの引数もvoid *。

operator new[]/delete[]も同様。

もちろんhoge::operator new()とでもして呼べばそれはただの関数呼び出しと解釈されるのでコンストラクタは呼ばれない。
673デフォルトの名無しさん:皇紀2665/04/01(金) 11:11:37
VCの話題か?
674デフォルトの名無しさん:皇紀2665/04/01(金) 12:05:08
>>670
C-MAGAZINEに載っていたタスクシステムを色々解析していて疑問に思ったのです。
でもまぁnewとdeleteをオーバーロードしなくても他の方法でもいいような気がしないでもない・・・。
>>672
ありがとうございます。ということは、newをオーバーロードしてもメモリの確保は行われるのですね。
わざわざnewをオーバーロードするのだからそのあたりは便利なところか…。
675デフォルトの名無しさん:皇紀2665/04/01(金) 12:14:02
> newをオーバーロードしてもメモリの確保は行われるのですね。
え?
676デフォルトの名無しさん:皇紀2665/04/01(金) 12:24:45
皇紀じゃつまんないな。
他の板はいろいろバリエーションあるのに。
677デフォルトの名無しさん:皇紀2665/04/01(金) 12:30:15
デスマーチ投入2665人目
デスマーチ2665年目
連続労働時間2665分目

こんなのどうよ
最後だけリアルだけどw
678デフォルトの名無しさん:皇紀2665/04/01(金) 12:39:55
>>674
メモリの確保を自分でやるためのoperator new/deleteのオーバーロードだ。
コンパイラはコンストラクタ/デストラクタを呼ぶコードを吐くだけ。
メモリ確保/解放はoeprator new/deleteの中の人の仕事。
679デフォルトの名無しさん:皇紀2665/04/01(金) 13:08:18
>>661
AdjustWindowRect
680652:皇紀2665/04/01(金) 14:53:13
>>653-654

見つけられました。どうもありがとう。
681652:皇紀2665/04/01(金) 14:54:05
655は私ではないです。(^−^;
682デフォルトの名無しさん:皇紀2665/04/01(金) 15:08:14
今だにオーバーロードとオーバーライドの違いが分からん
馬鹿だなあ俺
683デフォルトの名無しさん:皇紀2665/04/01(金) 15:32:02
そうだな。
684デフォルトの名無しさん:皇紀2665/04/01(金) 15:58:03
>>682
オーバーロード:引数が違う
オーバーライド:派生クラス
685デフォルトの名無しさん:皇紀2665/04/01(金) 16:08:15
VCの話題か?
686デフォルトの名無しさん:皇紀2665/04/01(金) 17:47:20
オーバーロード:関数名同じ、引数違う
オーバーライド:関数名同じ、引数同じ、派生クラス
687デフォルトの名無しさん:皇紀2665/04/01(金) 17:47:49
今からだと、VC++.NETは買わない方がいいですか?
688デフォルトの名無しさん:皇紀2665/04/01(金) 17:53:49
本にBMPファイルのピクセル列の並びはBGRの順って
書いてあるんですけど、
調べてると(ソースとか)、RGBの順で読み込んでるような気がするんです。
struct t_color {
BYTE r,g,b;
};
t_color* pPixel = ピクセル先頭位置;
みたいにして。

本はエンディアンの都合で書いてるのか、詳細が書かれてなくて訳が分かりません...。
BMP操作は何回かやってるんですが、すぐ忘れてしまう...
689デフォルトの名無しさん:皇紀2665/04/01(金) 17:55:06
>>687
初心者にはオススメ。玄人には....説明不要。
690デフォルトの名無しさん:int 2ch =05/04/01(金) 21:29:02
>>689
そうですか。ならば購入を検討したいと思います
691689:int 2ch =05/04/01(金) 22:05:37
>>690
DirectXの解説サイトとか多くのサイトがVisualC++中心で
プログラム組んでるので、サンプルソースにVisualC++のプロジェクトファイル
を含んでいる(別に必要無いかも...)が結構有るので便利だと思います。
自分も初心者なので、あくまで参考にして下さい...。
692デフォルトの名無しさん:int 2ch =05/04/01(金) 22:08:13
日付がintになったか…。

>>687
VS2005が出るまで待つって事?
693デフォルトの名無しさん:int 2ch =05/04/01(金) 22:09:46
DirectXに限らずWindows上で動くプログラムのサンプルなら、
かなりの場合VCのプロジェクトファイルが付いてくる。
694デフォルトの名無しさん:int 2ch =05/04/01(金) 22:58:55 BE:46450144-###
その割には解説サイトが少ないよなぁ・・
書籍では結構あるけど。
695デフォルトの名無しさん:int 2ch =05/04/01(金) 23:30:35
解脱サイトなら…
696688:int 2ch =05/04/02(土) 01:48:27
どうやら本は正しい様で。
ソースの方が間違ってたらしい。(本に付属のものじゃない)
構造体メンバをr,g,bの順に定義して
SetPixel(hdc,x,y,r<<16 | g<<8 | b);//rの正体=b, bの正体=r
とやってるから結果的に正しく表示されていただけ。
まぎらわしい...
697688:int 2ch =05/04/02(土) 01:49:35
sage忘れた...
698 :2005/04/02(土) 18:31:56
VC7.1はテンプレートのexport使えるのですか?
699デフォルトの名無しさん:2005/04/02(土) 20:00:40
もちろん出来ません。
700 :2005/04/03(日) 00:32:18
>>699
どうもありがとう。テンプレートのフル実装はなかなか終わらないね。
701デフォルトの名無しさん:2005/04/03(日) 13:32:52
スクリーンキーボードを作ろうとしているのですが、
SendInputを使用して実現しようとしています。

フラグにKEYEVENTF_UNICODEを用い、
どのキーボード配列でも入力可能にしたいのですが、
UNICODEを使用すると入力された文字が変換待ちの全角になってしまいます。
Windowsのコントロールパネル内のキーボードを英語既定にするとうまくいくのですが、、、
IMEが関係しているのでしょうか?
702デフォルトの名無しさん:2005/04/03(日) 18:47:18
答えようと思ったが、マルチだったのでやめた
703デフォルトの名無しさん:2005/04/03(日) 18:55:51
文字列をstd:stringなどを使いたいのですが、std::stringはどうもUNICODE環境をサポートしていないようです。
例えばFindWindowへの引数などに使いたいのですが、std::string以外に扱いやすい文字データ型はないでしょうか?
704デフォルトの名無しさん:2005/04/03(日) 20:43:47
CString
705デフォルトの名無しさん:2005/04/03(日) 20:45:09
>>703
std::wstring
706デフォルトの名無しさん:2005/04/03(日) 20:46:35
>>703
std::basic_string<TCHAR>
俺はusingも兼ねてtypedef std::std::basic_string<TCHAR> tstring;として使っている。

std::stringはstd::basic_string<char>からのtypedef。
ちなみにstd::wstringもある。もちろんstd::basic_string<wchar_t>からのtypedef
707デフォルトの名無しさん:2005/04/03(日) 21:43:37
NT系OSでのCPU使用率の取得方法を教えてください。
708デフォルトの名無しさん:2005/04/03(日) 22:42:16
タスクマネージャから拾えば
709デフォルトの名無しさん:2005/04/03(日) 22:45:48
分からないなら黙っててください、すっとこどっこい!
710デフォルトの名無しさん:2005/04/03(日) 22:52:27
GetCPUShiyo-ritsu()
711デフォルトの名無しさん:2005/04/03(日) 22:57:33
CPUNannboTukotonnnenn()

のほうがあんぜんだと思います。
712デフォルトの名無しさん:2005/04/03(日) 23:06:35

毎回500分の1で抽選して、その結果を出力する
プログラムはどうやって書けばいいんですか?(C、C++)
713デフォルトの名無しさん:2005/04/03(日) 23:12:09
1〜500の乱数を発生させて、(以下略
714デフォルトの名無しさん:2005/04/03(日) 23:16:22
分からないなら黙っててください、無能野郎!
715デフォルトの名無しさん:2005/04/03(日) 23:25:43
GohyakuBunNoIchiDeAtaruFunction()
716デフォルトの名無しさん:2005/04/03(日) 23:41:19
OmaemitainaYatunihaOsienaiFunctoin();
717デフォルトの名無しさん:2005/04/03(日) 23:47:08
>>716
ふぁんくといん?
718デフォルトの名無しさん:2005/04/04(月) 00:05:03
>>703-706
ありがとうございます。
でも、std::wstringだとLPCTSTRなどを引数に渡す関数に使えないことないですか?
.c_strで渡しても、const wchar_t *(void) const' から 'LPCWSTR' に変換できませんといった
エラーになってしまうのですが…。
719デフォルトの名無しさん:2005/04/04(月) 00:05:54
>>713
乱数の生成が分からないんだよ

rand()

なんていったら殺すぞ、このやろう
720デフォルトの名無しさん:2005/04/04(月) 00:14:04
randSuperMarkU()
721デフォルトの名無しさん:2005/04/04(月) 00:15:37
低レベルなかたばっかだね(プゲラ
722デフォルトの名無しさん:2005/04/04(月) 00:15:55
int i = time(NULL) + (int)GetCurrentProcessId();
srand(i);

int j = ((1.0 / (RAND_MAX + 1.0)) * rand()) * max + 1;


数年前の変なソースからコピペ
723デフォルトの名無しさん:2005/04/04(月) 00:25:16
>>719
boost::random
適当に言ってみたら本当にあった。
724デフォルトの名無しさん:2005/04/04(月) 00:27:04
なぁ、おまいらって結局他人様が作ったライブラリが
なけりゃなんにもつくれないんだろ

一からおこしたことなくね?
725722:2005/04/04(月) 00:29:33
C初心者の頃に頑張って書いたコードは無視ですかそうですか・・・今も大して変わりませんが
726デフォルトの名無しさん:2005/04/04(月) 00:40:05
>>725
>>724はrand()使ってるのが気に入らないんじゃないの?
やるなら自前で全部書けと。
727デフォルトの名無しさん:2005/04/04(月) 00:56:13
>>718
LPCTSTRはUNICODEビルドか否かでLPCWSTRかLPCSTRに置き換えられる。
一方std::wstringはUNICODEビルドかどうかで影響を受けない。
728デフォルトの名無しさん:2005/04/04(月) 00:59:06
まず乱数の種を取るのに何を使うかが・・・変なセンサーでもPCに付けるの?温度センサーとか
729デフォルトの名無しさん:2005/04/04(月) 01:00:46
ハードウェア乱数生成器を搭載したチップセットがあったような希ガス。
730デフォルトの名無しさん:2005/04/04(月) 01:14:54
ラジヲとかテレビの局間ノイズは優秀だな
731デフォルトの名無しさん:2005/04/04(月) 05:16:45
乱数はメルヘンツイスターを使うといい。
732デフォルトの名無しさん:2005/04/04(月) 07:01:22
hoge()という関数はどのヘッダをインクルードすればよいのでしょうか?
733デフォルトの名無しさん:2005/04/04(月) 10:18:25
>>707
パフォーマンスカウンタ

使い方はPSDKのサンプル等を見てね
面倒くさかったらPDH使えば楽勝だけど、重いぞ。

この程度も回答できずに茶化す馬鹿が多いのは、嘆かわしい。
734デフォルトの名無しさん:2005/04/04(月) 10:39:07
>>718
だからstd::basic_string<TCHAR>使え。

std::basic_string<TCHAR>のc_str()はconst TCHAR *を返す。
typedef const TCHAR *LPCTSTR;だからstd::basic_string<TCHAR>のc_str()はLPCTSTRそのものだ。
735デフォルトの名無しさん:2005/04/04(月) 12:17:23
次は
std::basic_string<TCHAR> str = "ほにゃらら";

std::basic_string<TCHAR> str = L"ほにゃらら";
ができませんって言うに決まってる。
736718:2005/04/04(月) 15:31:05
>>734
ありがとうございます。
やっとできました。単にc_str()と呼ぶところを.c_strだけと、()を抜いてしまっていたのが原因で・・・
std::wstring で動作させることができました。

初歩的ミスでお騒がせしました。釣ってきます∧||∧
737デフォルトの名無しさん:2005/04/05(火) 11:57:54
MFCのSDIで、
1.ウィンドウサイズを変更出来ない
2.常に最前面に表示
3.タスクバーから消す
を実装したいのですが、1と3の両立が出来ません。そういう仕様ですか?
解決策あるなら教えてたもれ。
738デフォルトの名無しさん:2005/04/05(火) 12:45:29
>>737
3はメインウィンドウを見えないウィンドウに所有させるか
ITaskbarListでごにょごにょ。
739デフォルトの名無しさん:2005/04/05(火) 16:07:20
最近VC++.NETを購入しました。
ウィンドウズアプリケーションを作るとき、MFCと.NETのフォームアプリケーション、どちらを使ったほうがよいのでしょうか。
740デフォルトの名無しさん:2005/04/05(火) 16:08:43
>>739
好きにしろ。
741デフォルトの名無しさん:2005/04/05(火) 16:17:22
同じようなものなのでしょうか?
できればどちらかを使ったときにどんな不都合があるのか知りたいのですが・・・
普通はどちらを使うのでしょうか。
742デフォルトの名無しさん:2005/04/05(火) 16:22:58
MFCでゲーム作ると笑える
743デフォルトの名無しさん:2005/04/05(火) 16:39:28
>>741
君にとっての普通とはなんぞや
744デフォルトの名無しさん:2005/04/05(火) 17:18:19
>>741
0から資料も何も見ずに作るのか?
そうではあるまい。
自分が既になんらかの資料を入手しているのならその資料を頼ればいいし、
そうでないなら先ず資料を探すといい。
どちらにしろ、自ずとどちらがいいか判るだろう。

君が何をしたいのかは君が書かない限り誰にもわからないのだよ。
745デフォルトの名無しさん:2005/04/05(火) 17:24:08
「本を読んだんですけど次に何をしたらいいですか」とか、
「デジカメ買ったんですけど何をしたらいいですか」と同列だね。
自分が何をしたいのか判っていないのだから、>744のような指摘は無意味だよ。
746デフォルトの名無しさん:2005/04/05(火) 17:33:23
すいません、本は買おうと思ったのですが、MFCを使う入門本とそうでない物があったので、どちらを買うか迷ったのです。
それで、どちらを中心に勉強するのがベストかなぁと・・・
747デフォルトの名無しさん:2005/04/05(火) 17:35:56
それぞれの特徴をググるなりして調べて、自分がやりたい方を選べばよい。
748デフォルトの名無しさん:2005/04/05(火) 22:23:48
.NETは.NET Frameworkというランタイムが無いと動かない。まだデフォルトで
入れていないPCも多いので、ユーザーにインストールさせる必要がある。20MBくらい
あるので面倒がられるかもしれない。MFCアプリもdllが必要だが、なんかのアプリの
インストールと一緒に入ってしまうことが多いからあんまり気にしなくて良いかも。
実行速度は.NETの方が遅いようなことをよく言われるが、それはアプリによるかな?
ただ、.NETアプリは起動が遅いので、嫌ならインストール時にバイナリー変換をするように
インストーラーを作ること。プログラミングは.NETの方が楽だとは思うが、APIを
併用しないといけない場面も結構あるので、そういう時は、.NETって何だろうと
思うかもしれない。尚、.NETの場合は逆コンパイルでソースコード丸見え状態になるので、
それが気になるなら別途難読化ツールとか購入する羽目になる。
749デフォルトの名無しさん:2005/04/05(火) 22:48:28
MFCのDLLはスタティックリンクしとけばええやん
750デフォルトの名無しさん:2005/04/05(火) 22:51:11
 Visual C++の本で、MFCを使わずにWinMain()関数とウィンドウプロシージャを自分で直接コーディングしていく
解説が書かれていても、メニューやダイアログボックスはリソースエディタが使われてる。
 中途半端だな、せっかくなんだから、それらもコーディングで作る方法解説してくれって思うんだけどな。何でそ
うしてくれないんだろうな。VBと同じようにビジュアルに編集して画面作ってもおもしろくないぞ。
751デフォルトの名無しさん:2005/04/05(火) 23:07:25
>>748
ありがとうございました。
それでは、MFCを使おうと思います。
入門にお勧めの書籍はないでしょうか?
752デフォルトの名無しさん:2005/04/05(火) 23:14:11
.NETのアプリ作るならC#のほうが適していると聞くが。
C++は過去の資産を生かすためにあるだけで、本来はC++で作るには少し無理があると聞くが。
753デフォルトの名無しさん:2005/04/05(火) 23:19:29
__gc とかキモイのでC#のほうが好き。
754デフォルトの名無しさん:2005/04/06(水) 01:44:04
そこでC++/CLI
755デフォルトの名無しさん:2005/04/06(水) 02:36:38
すいません、質問なのですが
vc++2005ベータのプロジェクトで、拡張子が.icoというファイルができたのですが
これは、このツールを使って絵を描けという意味ですか??

あと、MFCがないとWin32プログラミングは難しいのでしょうか?
756デフォルトの名無しさん:2005/04/06(水) 02:40:13
基本のCは覚えたので、今度はVC++を勉強しようと思ってるんですけど。。
757デフォルトの名無しさん:2005/04/06(水) 05:12:19
.icoはアイコンファイルです。アプリケーションで使うアイコンです。
VSでアイコンを編集することが出来ます。
MFCはWindowsのAPIをまとめてクラスライブラリにしたものです。
ですからMFCで出来ることはAPIだけでも出来ますが、MFCも全部のAPIを
網羅して作られているわけでもないので、MFCと言えど結局APIも使う時が
しばしばあります。GUI関連のコードを書く時はMFCだと面倒な所が隠蔽
されているので楽に書けて便利ですが、スピード重視のコードとか書く時は
MFCよりもAPIを直に使った方が良いことがあります。ゲームとかだとMFCより
API、つまりSDKスタイルの方が好まれるようです。VS6.0の開発環境はMFCを
使って書かれています。
つまり、目的に応じて使い分ければ良いということです。
758デフォルトの名無しさん:2005/04/06(水) 05:58:54
>>757
わかりやすい説明をありがとう。
759デフォルトの名無しさん:2005/04/06(水) 10:36:37
760デフォルトの名無しさん:2005/04/06(水) 16:32:17
>>750
苦労は買ってでもする、その若さに乾杯。
.rc をテキストエディタで編集汁。
761デフォルトの名無しさん:2005/04/06(水) 20:53:34
>>760
それだとリソースエディタを使ってるのと本質的に変わらんだろう。
>>750 が言ってるのは CreateWindow 呼びまくって
ダイアログにコントロール貼り付けたいって意味だと思う。
762デフォルトの名無しさん:2005/04/06(水) 21:29:30
プロジェクトのプロパティでキャラクタセットをUNICODEにした場合、
TRACEで日本語が出力できないのですが、これは回避策はあるのでしょうか?
TRACE(TEXT("日本語表示"));
みたいな感じでコードを実行してもなにも表示されません。
763デフォルトの名無しさん:2005/04/06(水) 21:36:07
ダイアログのメンバ関数をスレッドで動かそうと思い、staticにしたんですが、
そしたら、その関数の中でメンバ変数にアクセスできなくなってしまいました。
変数もstaticにしてみたら「スタティック メンバ関数内の不正なデータ メンバへの参照です」
となってコンパイルできません。

スレッドからメンバ変数を使うことは不可能なのでしょうか?
764デフォルトの名無しさん:2005/04/06(水) 21:38:29
>>763
スレッド以前にstaticがなんなのかわかってないからそうなる。
765デフォルトの名無しさん:2005/04/06(水) 21:45:07
>>764
わかってるけどそうしないとCreateThreadで
error C2440: 'type cast' : 'オーバーロードされた関数タイプ' から 'unsigned long (__stdcall *)(void *)' に変換することはできません。
となる。
766デフォルトの名無しさん:2005/04/06(水) 22:07:25
>>765
CreateThreadのパラメータにthisを渡し、スレッド関数ではそのthisを使って操作する。
767デフォルトの名無しさん:2005/04/06(水) 22:09:02
出来るよ。まず、ダイアログへのポインタ変数dlgを作る。スレッドだから
グローバル変数にでもしとけばアクセスしやすいだろう。これを
InitDialog()の中とかで初期化する。dlg=thisみたいにして。
ダイアログのコンストラクタの中でも良いが。
するとdlgはダイアログを指すグローバル変数となるから、
スレッドの中でこのポインタを使ってメンバ関数なり、
メンバ変数にアクセスできる。
dlg->m_static.SetWindowText("orz");
dlg->Func();
768デフォルトの名無しさん:2005/04/06(水) 23:10:31
>>766
>>767
ありがとうございます。
なんか出来たっぽいです。
↓こんな感じでやりました。
hThread1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_1,(LPVOID)this,0,&id);

void Thread_1(LPVOID pParam)
{
  CDFGDlg *dlg = (CDFGDlg *) pParam;
  CString ss = dlg->ss;
769デフォルトの名無しさん:2005/04/07(木) 00:25:41
>>765
ちなみに言うとstaticメンバ(関数も変数も)はクラスで共有と言う扱い。
だからstaticメンバ関数ではthisポインタが使えない。(staticメンバ変数やstaticメンバ関数は使える)

非staticメンバ関数は実のところthisポインタを引数として受け取っているからCreateThreadに渡せない。
770デフォルトの名無しさん:2005/04/07(木) 11:33:06
>>765
>わかってるけどそうしないと
解ってないからそうなる。
771デフォルトの名無しさん:2005/04/07(木) 12:07:34
>>762
デバッガの設定でUnicode文字の表示、ってのがあるけど、チェック入れてる?
772デフォルトの名無しさん:2005/04/07(木) 12:28:40
スレッド以前にstaticがなんなのかわかってないからそうなる。
773デフォルトの名無しさん:2005/04/07(木) 12:43:48
>>768
staticすら理解していないお前は、マルチスレッドに手を出す資格はない。
おとなしく、シングルスレッドで我慢してたほうがいい。
なんとなくできたっぽいとかいってるようじゃ、痛い目にあうぞ。

staticうんぬん、排他制御云々、なんていうこと以前に、2つもダメな点がある。

1.
無理にLPTHREAD_START_ROUTINEへのキャストをするな。
LPTHREAD_START_ROUTINEの定義をヘッダファイルで確認するか、
Win32 APIのマニュアルでThreadProcを見ろ。

2.
見た感じからMFCを使っているようだけど、
スレッド内でMFCを使う場合はWin32 APIの::CreateThreadは使用禁止。
もいっかいMFCのマニュアル見れ。
774デフォルトの名無しさん:2005/04/07(木) 13:34:34
SolidBrush myBrush = new SolidBrush(Color::Argb(100,0,0,255));

とやったところ、
  error C2064: 3 引数を取り込む関数には評価されません。
というエラーが出てきました。
このエラーはどういう意味なのでしょうか。
また、対処法を教えてください。
775デフォルトの名無しさん:2005/04/07(木) 16:35:11
関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。

関数のポインタとして評価されない式を使って、関数の呼び出しが行われました。

このエラーは通常、関数でないものを呼び出そうとしたときに発生します。

次にこのエラーの例を示します。

int i, j;
char* p;
void func()
{
j = i(); // エラー, i は関数ではありません
p(); // エラー, p は関数へのポインタではありません
}

776デフォルトの名無しさん:2005/04/07(木) 17:05:38
そういう意味だったのですね。
どうもありがとうございました。
777デフォルトの名無しさん:2005/04/07(木) 19:30:18
>>774
>SolidBrush myBrush = new SolidBrush(Color::Argb(100,0,0,255));

何使ってるのかよく分かんないけど、こんな構文大丈夫なのん?
SolidBrush *myBrush = new ・・・ こんな感じになりそうな気がするけど。
GDI+ってよく分かんないんですが。
778デフォルトの名無しさん:2005/04/07(木) 19:40:42
SolidBrush *pmyBrush = new SolidBrush(Color(100, 0, 0, 255));
SolidBrush myBrush(Color(100, 0, 0, 255));
このどっちかだな。
779762:2005/04/07(木) 19:44:14
>>771

それってどこですか?
オプションの中のデバッグの設定の箇所見ましたが、それらしい設定項目はありませんでした。
VS.NET2003です。
780デフォルトの名無しさん:2005/04/07(木) 20:39:16
>>779
AtlTraceVUのバグっぽい。
わざわざUNICODE版を作っておいて、結局呼び出してるのは_CrtDbgReport。
なんでやねん。
781デフォルトの名無しさん:2005/04/07(木) 21:31:47
Visual C++を手取り足取り教えてくれているサイトありませんか?
プログラムについて何も知りません

あるいはこれさえあればvisualC++をほどほどに使いこなせるという良書を教えてください
782デフォルトの名無しさん:2005/04/07(木) 22:01:20
783デフォルトの名無しさん:2005/04/07(木) 22:17:37
>>773
うるせぇよカス
784771:2005/04/07(木) 23:08:23
>>779
頭が固くなった爺なんで、今だにVC6と決め付けて書いてしまいました。
785デフォルトの名無しさん:2005/04/07(木) 23:11:54
>>783
はいはい。

何だかわからないけど、うまく動きません
何だかわからないけど、例外が出ます

とか言うなよな。
つーか、教えてもらう気がないなら、質問するなガキが。
786デフォルトの名無しさん:2005/04/07(木) 23:26:54
>>785
うるせぇよカス
787デフォルトの名無しさん:2005/04/07(木) 23:48:28
>>785 じゃないが、

    なんか出来たっぽいです。

とか

    何だかわからないけど、とりあえず動きました。

とかも言って欲しくない。
788デフォルトの名無しさん:2005/04/08(金) 00:32:43
>>782
ありがとうございました
789762:2005/04/08(金) 00:42:10
>>780

なるほど。そうでしたか。
WideCharToMultiByteしてからTRACEするしかないのかな。
790デフォルトの名無しさん:2005/04/08(金) 02:57:16
if(GetKeyState(VK_F1) & 0x8000)
{
while( GetKeyState(VK_F1) & 0x8000 ) ;
}
これでプログラムが無限ループで制御不可能になるんですけど
GetKeyStateをGetAsyncKeyStateにすればおそらく直ると思うのですが、
何故なんでしょう?
MSDNにハードウェア割り込みとか何とか書いてあるけど分かりません...。
791デフォルトの名無しさん:2005/04/08(金) 03:25:41
ifの中身とwhileの中身が同じだぞ。
ifでtrueと評価されたからすぐ次のwhileに入った時、
同じ条件をtrueと評価して無限ループになるんでわ?
792デフォルトの名無しさん:2005/04/08(金) 03:36:49
>>791
GetKeyState(VK_F1) の値がいつまでも変わらないと思っているのですか?
793デフォルトの名無しさん:2005/04/08(金) 03:53:33
>>790
MSDNによると↓だから、そこでループしてるとメッセージが送られてこないからじゃないのかね。
GetKeyStateは割り込みを使ってないって書いてある。

>スレッドがメッセージキューからキーメッセージを読み出すたびに、
>この関数が返すキーの状態は変化します

それからそういう感じのwhileの使い方はしない方がいいぞい。CPU使用がMAXになっちゃうべ。
794793:2005/04/08(金) 03:58:15
793をちょっと訂正。

>そこでループしてるとメッセージが送られてこないから

そこでループしてるとWM_KEYUPのメッセージキューを処理できなくて、その結果、
キー状態変化してないように見えるから
795790:2005/04/08(金) 04:25:45
レスありがとうございます。
なるほど。つまり、メッセージを送りすぎて処理が追いつかないと...。
GetKeyStateの場合、メッセージ送信でキーの状態を得るということですね。
キーボードの状態を直接I/Oから読み取るものだと無意識で思ってて、
こういうことになったと。
割り込みの意味が少し分かったような気がします。
CPU100%はSleep(10);で解決...。(本当は別なやり方が正攻法なんでしょうが)
796デフォルトの名無しさん:2005/04/08(金) 04:56:55
一番外しているのが792だな
797デフォルトの名無しさん:2005/04/08(金) 08:18:56
いつまでも変わらないんですね
798デフォルトの名無しさん:2005/04/08(金) 10:30:21
>>789
ATLはソースがあるんだから、ソースを直してしまうのも手よ。

マイクロソフトのサポート情報を探すと、ATLのバグ情報がゴロゴロでてきますよ。
中には、一度もテストしないで出しただろ、と突っ込みたくなるような酷いバグも・・・。
799デフォルトの名無しさん:2005/04/08(金) 10:43:14
>>795
ちがう。

おそらく・・・
ウィンドウのメッセージキューに届いたメッセージを処理してすぐに帰るべきところに、
状態の変更を待つような内容のコードを書いてしまっているのではないかと。

基本的に、メッセージの処理は、速やかにreturnしなくてはいけない。
returnするまでは、次のメッセージが処理されない。

キーボードからの入力も、マウスのクリックも、
対象となったウィンドウのメッセージキューに、メッセージとして届けられる。
なので、ループしたりして、メッセージの処理を止めてはいけない。

「イベントドリブン」
「メッセージポンプ」
「ウィンドウプロシージャ」
などについて、基本的なところを勉強することをオススメします。

800デフォルトの名無しさん:2005/04/08(金) 11:12:36
スレッドとCRTについて質問です。

EXE側から関数アドレスをもらって、その関数を呼び出しながら処理するDLLがあります。
EXE側はCRTをスタティックリンクしており、DLLに渡す関数はCRTを使って処理をします。
DLL側がCreateThreadやDLL側CRTの_beginthread(ex)を使ってスレッドを作成し
そのスレッドからEXE側の関数を呼び出した場合、EXE側のCRTは初期化されてないので問題が起きる。

という解釈はあってますか?
801デフォルトの名無しさん:2005/04/08(金) 14:59:00
4月から環境が変わったので.NETを.NET2003に変更したところ
以前.NETで作成したプログラムが「MFC70D.DLLが見つからなかったため・・・」
というメッセージが出てデバッグ、実行等ができなくなってしまいました。

指定されたファイルを他の環境から持ってこれば動くのかもしてませんが
それでは根本的な解決になっていない気がして落ち着きません。

projファイルなどもエディタで開いて眺めてみたのですが
力不足なため、イマイチよくわかりませんでした。

どなたか解決方法を御教示いただけませんでしょうか?
802デフォルトの名無しさん:2005/04/08(金) 15:34:32
>>801
MFC70D.DLLってデバッグバージョンじゃね?
デバッグバージョンのDLLは再配布不可のはずなので、Releaseモードでビルドすればいいんでね?
803デフォルトの名無しさん:2005/04/08(金) 15:35:21
>>801
プロジェクト変換してリビルドすりゃいいと思うけど…?
804801:2005/04/08(金) 15:41:01
ありがとうございます。

>デバッグバージョンじゃね?
>Releaseモードでビルドすればいいんでね?
たしかにデバッグバージョンです。
ただexeを実行したいという意味ではなく.NETで開発していたものを引き続き2003で開発したい
という意味なのでReleaseモードではデバッグができなくなってしまうんです。

>プロジェクト変換してリビルドすりゃいいと思うけど…?
最初に2003で実行するときに「変換しますか?」のようなメッセージが出たので変換を行って
その後でリビルドもしたのですが前述のメッセージが出る次第です。
805デフォルトの名無しさん:2005/04/08(金) 15:45:29
MFC70D.DLLはパスの通ってるところにある?
806801:2005/04/08(金) 15:52:49
>MFC70D.DLLはパスの通ってるところにある?
いえ、2003を入れた方のPCにはMFC70D.DLL自体が入っていない模様です。
(MFC70.DLLは入ってます。)
もちろん2003のインストール時にはフルインストールはしたはずなのですが。

もしかして2003は.NETが既にインストール済みの環境でしか使えないなんて
制約があったりとかしますか?
807デフォルトの名無しさん:2005/04/08(金) 16:17:16
>>806
デバッグビルドをリビルドしてもダメ?
もしかしたらそのプロジェクトの対象オブジェクトから起動しているモジュールとかDLLとかない?
漏れは.netで作られたプロジェクトを.net2003でデバッグしているけどプロジェクトを変換した以外何もしてないよ。
#つーか、まさかDebugディレクトリ配下も持ってきてるとか言わないよな。
808デフォルトの名無しさん:2005/04/08(金) 16:20:20
単にインストール失敗しただけじゃね?
809801:2005/04/08(金) 16:46:57
>デバッグビルドをリビルドしてもダメ?
ダメです・・・。

>漏れは.netで作られたプロジェクトを・・・
そうですね。普通はそうなるはずだと思うんですけど。

>#つーか、まさかDebugディレクトリ配下も持ってきてるとか言わないよな。
これは大丈夫です。

>対象オブジェクトから起動しているモジュールとかDLLとかない?
これが怪しいかもしれません。
.NETでビルドしたDLL使ってるのでソースをもらって2003でリビルドしてみます。

>単にインストール失敗しただけじゃね?
や、その可能性もありますが・・・。
810デフォルトの名無しさん:2005/04/08(金) 16:51:37
>.NETでビルドしたDLL使ってるのでソースをもらって2003でリビルドしてみます。

それだ。そのDLLがMFC70D.DLLを必要としていると言うこと。
811801:2005/04/08(金) 17:10:00
使用していたDLLを2003でビルドし直したら無事に動きました。
ありがとうございました。
812デフォルトの名無しさん:2005/04/08(金) 17:20:32
>>800
俺はそれであっていると思うよ。
813デフォルトの名無しさん:2005/04/08(金) 18:32:41
大学の生協で売ってるアカデミック版?で作ったソフトを売ってもいいの?
814デフォルトの名無しさん:2005/04/08(金) 18:36:46
シェアウェアまでなら
815813:2005/04/08(金) 19:31:55
>>814
マジっすか! じゃあ使えないな〜グスン
816デフォルトの名無しさん:2005/04/08(金) 20:48:15
Visual C++ で、実行したらすぐに変な黒いウィンドウが出て
閉じるんですけど、どうすればいいんですか? 設定とかでどこを
いじればいいのでしょうか? 教えてください
817デフォルトの名無しさん:2005/04/08(金) 21:17:58
(((( ;゚Д゚)))ガクガクブルブル
818デフォルトの名無しさん:2005/04/08(金) 21:55:07
ガクガクブルブル(((( ;゚Д゚))人(( ;゚Д゚)))ガクガクブルブル
819817:2005/04/08(金) 22:10:12
>>818
勝手に手繋ぐな、キモイ
820デフォルトの名無しさん:2005/04/08(金) 22:50:25
自演乙
821デフォルトの名無しさん:2005/04/09(土) 00:48:17
CToolBarのボタンに表示するテキストを複数行にしたい場合はどのようにすればいいのでしょうか
CToolBarCtrlのSetMaxTextRows()を指定したりSetDrawTextFlags()にDT_WORDBREAKを突っ込んだりしてみたけど改行されませんでした
822デフォルトの名無しさん:2005/04/09(土) 18:16:24
文字列を数値に変換するときsprintf使ってるんですけどほかに便利な方法おしえてください
823デフォルトの名無しさん:2005/04/09(土) 18:18:31
>>822
sprintfでどうやって数値化するのか教えて欲しいものだ(w
それはともかくとして、C++ならもう一つの方法として strstream が考えられるね
824デフォルトの名無しさん:2005/04/09(土) 18:19:11
atoi
boost::lexical_cast
825800:2005/04/09(土) 18:22:07
>>812
レス遅れたけどありがとう。
826デフォルトの名無しさん:2005/04/09(土) 18:26:50
数値を文字列でした。逆でしたね
827デフォルトの名無しさん:2005/04/09(土) 19:11:47
>>826
strtol(), strtoul() &c.
828デフォルトの名無しさん:2005/04/09(土) 19:50:45
>>826
boost::lexical_cast
829デフォルトの名無しさん:2005/04/09(土) 19:57:27
VC++で簡単なメディアプレーヤーの作り方が詳しくのってるサイトはありませんかね?
830デフォルトの名無しさん:2005/04/09(土) 20:16:33
まずは「簡単なメディアプレーヤー」の定義から始めようか。
831デフォルトの名無しさん:2005/04/09(土) 20:21:35
あ、ごめんなさい。
ファイルを選択して、音楽ファイルを再生できるようなものを作りたいのですが・・・
ググりかたが悪いのか、なかなか見つかりません。
上に近いようなものが作れるならどんなサイトでもかまいません。
832デフォルトの名無しさん:2005/04/09(土) 20:36:44
>>831
DirectShowでぐぐってみれば?
833デフォルトの名無しさん:2005/04/09(土) 21:38:41
int型aにtimeGetTime()で、システム起動時間を取得して
char型bに「hoge」といれて、これらの変数を
「hoge (システム起動時間)」っていう風にするのは
どうすればいいでしょうか?
834デフォルトの名無しさん:2005/04/09(土) 21:48:26
sprintfでいいんじゃね?
835833:2005/04/09(土) 22:08:35
>>834
ありがとうございました。
やっとできました。
836デフォルトの名無しさん:2005/04/09(土) 22:44:06
>>816
トレースの出力に何か出てないか?
コンソールアプリだったりしないか?

>>822
数値を文字列になら、sprintfでいいんじゃない?
それなりに書式指定できるしさ。

ただ、snprintfを使って欲しい気もする。
CString::Format()という手もあるよ。

>>831
手っ取り早くMCI
837デフォルトの名無しさん:2005/04/10(日) 14:38:36
IEのようにウィンドウの下の部分にある、
説明っぽいのが出てる枠は何ていうんでしょうか?
なにか名前がついててウィンドウのスタイルとかで指定できたりしましたっけ?
838デフォルトの名無しさん:2005/04/10(日) 14:40:16
>>837
ステータスバーの事?
839デフォルトの名無しさん:2005/04/10(日) 15:04:03
>>838
それでした。ありがとうございました。
840デフォルトの名無しさん:2005/04/11(月) 00:04:11
画面がチラチラするのですが、こういう場合どうすれば直るのでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/295.cpp
841デフォルトの名無しさん:2005/04/11(月) 00:26:03
なんでWM_PAINTでInvalidateRect呼んでるの?
842デフォルトの名無しさん:2005/04/11(月) 00:30:06
InvalidateRectの第3引数をよく見てみろ
843デフォルトの名無しさん:2005/04/11(月) 00:50:21
つーか永遠にWM_PAINTが来てえらいことだ。
844デフォルトの名無しさん:2005/04/11(月) 01:01:50
>>841さん
こうやる以外、自分は字の動かし方を知らないですから。
WM_PAINT 送り続けて画面を更新させ続けようって思いました。

>>842さんのおっしゃった事をヒントに FALSE にしてみたのですが、
残像が残ります。残像を残さず、しかもチラチラさせずに表示する
にはどのようにすれば・・・ ;;
845デフォルトの名無しさん:2005/04/11(月) 01:15:34
WM_PAINTは現状の描画のみ。で、タイマーとかで現状を更新して
再描画をお願いするってのが良いと思うのですよ。
残像を消すには文字描く前に塗りつぶしたり。フリッカが死ぬほど
嫌なら、背景ブラシをヌルポにして裏画面転送だと思うのですよ。
846デフォルトの名無しさん:2005/04/11(月) 01:47:15
よっしゃーー! いけました!
なんとか残像も消えてくれましたし、嬉しいっす!
WM_PAINTは現状の描画のみ、って言葉がとても参考になりました。
本当に、ありがとうございました!
847デフォルトの名無しさん:2005/04/11(月) 02:36:09
.vcprojから.makeへのエクスポートってVC2003.NETでもできますか?
848デフォルトの名無しさん:2005/04/11(月) 09:46:07
Pentium4に最適化されたコンパイラを使った場合に、
同じコアのCeleronとPentiumで吐き出すコードが違うことってあり得ますか?

また、プログラムは単純な計算の繰り返しとして、
同周波数・同コアのPentium4とCeleronで
計算速度に有意な差は出てくるのでしょうか?

よろしくお願いします。
849デフォルトの名無しさん:2005/04/11(月) 09:59:35
>>848
この辺で聞いたら?
>x86命令の所要クロック計測スレ
http://pc8.2ch.net/test/read.cgi/tech/1103609337/
850848:2005/04/11(月) 10:12:08
>>849
ありがとうございます。移ってみます。
こちらでもわかる方がいらしたら、お願いします。
851デフォルトの名無しさん:2005/04/11(月) 11:16:26
すみません。共有で使用しているインクルードファイルがあるのですが
プロジェクトワークスペースに当該インクルードファイルを追加しても、
ビルド時にインクルードファイルが開けません。のエラーが出ます。
何か設定がいるのでしょうか?
852デフォルトの名無しさん:2005/04/11(月) 11:46:33
>>851
プロジェクトに参加させるかどうかと、インクルードパスの設定は関連がない。
プロジェクトの設定でインクルードパスの設定をしなさい。
#或いは、そのインクルードファイルまでのパスが確定しているなら相対パスでインクルードする手もあるが。
853デフォルトの名無しさん:2005/04/11(月) 11:48:44
>>852
助言いただきました通り
インクルードファイルのパスを追加する事でエラーが解消されました。
ありがとうございます。
854デフォルトの名無しさん:2005/04/11(月) 12:33:11
>>849
ゴルァ
スレの主旨を無視して誘導するな。

>>850
スレの主旨を無視してマルチする奴の質問には答えない。
855デフォルトの名無しさん:2005/04/11(月) 14:21:48
>>854
CPUコアの話が初心者向けでないと思ったから誘導しただけ。
ついでに言えば、誘導された>850はきちんと挨拶しているし、それをマルチと断罪するには値しないと思うが。
856デフォルトの名無しさん:2005/04/11(月) 14:30:40
LineTo、MoveToを使って描画したいのですが、アサートに引っ掛かってしまいます。(ハンドルがNULL?)
要はデバイスコンテキストあたりで躓いているようなのですが、何が悪いのかわからないのでお助けください。
CDCを継承したクラス内で、なにやら本に書いてあったことを見よう見まねで
CClientDC dc(this);
の様にしても、下記のエラーが出ます。
よろしくお願いします。

'CClientDC::CClientDC' : 1 番目の引数を 'class CCtrlDraw *const ' から 'class CWnd *' に変換できません。 (新しい機能 ; ヘルプを参照)
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
857デフォルトの名無しさん:2005/04/11(月) 14:46:51
>>856
>'class CCtrlDraw *const ' から 'class CWnd *' に変換できません。
この意味がわからんのだったらクラスの継承とかその辺をやり直したほうがいい。
858デフォルトの名無しさん:2005/04/11(月) 15:14:35
>>857
というと、これはただ単純にCCtrlDrawからCWnd*に変換できない、ってことではないんですか?
自分ではthisポインタが怪しいと思うのですが・・・・
859デフォルトの名無しさん:2005/04/11(月) 15:15:37
>>858
CCtrlDrawからCWnd*に変換できない
ってことだよ。CCtrlDrawがなんなのか知らんがCWndから派生してないんじゃない?
860デフォルトの名無しさん:2005/04/11(月) 15:18:48
thisが何か判っていない悪寒。
861デフォルトの名無しさん:2005/04/11(月) 15:31:48
859さんの言うとおりにCWndからの継承にしたところ、コンパイルは通るようになりました。
が、相変わらずアサートに引っかかります。アサート条件は以下でした。
おそらく860さんのおっしゃるとおりthisポインタがなんなのかイマイチわかっていない悪寒・・・・

ASSERT(pWnd == NULL || ::IsWindow(pWnd->m_hWnd));
862デフォルトの名無しさん:2005/04/11(月) 15:35:14
>>861
本に書いてある通りにやってみろ。
自分流のアレンジよりも、先ずはそこからだ。
863デフォルトの名無しさん:2005/04/11(月) 15:48:17
>>862
いや、そこんところは本には書いてないんです。
今はそういったクラスを分ける練習みたいなものをやっているところです。
864デフォルトの名無しさん:2005/04/11(月) 15:49:36
なんでCClientDCのコンストラクタはCWnd*を引数に取るか考えろよ。
CCtrlDrawで何がしたいんだ?
865デフォルトの名無しさん:2005/04/11(月) 15:56:10
>>864
ウィンドウと対応付けるためだと理解してますが。
具体的にはマウスの移動に対応した描画です。
866デフォルトの名無しさん:2005/04/11(月) 15:58:41
>>855
その誘導先が問題なんだが。
867デフォルトの名無しさん:2005/04/11(月) 16:53:24
>>866
それは失礼。コアな話ならあそこが一番かと思って。

>>865=856
DCの取り扱いは本にあったんだろ? 本の通りにDCを使えるようになってから出直せって。
868デフォルトの名無しさん:2005/04/11(月) 17:01:10
・・・・わかりました。最後に教えて頂きたいのですが、
イベントキャッチ

処理で関数に飛ばす

で、飛ばされた関数の中でのthisポインタは何を指しているのでしょうか?
869デフォルトの名無しさん:2005/04/11(月) 17:06:29
>>868
・・・
MFC使う前にC++の基本を学んだほうがいい。
870デフォルトの名無しさん:2005/04/11(月) 17:22:47
&飛ばされた関数、だろ。
871デフォルトの名無しさん:2005/04/11(月) 20:56:42
>>867
まぁありがちですね。
詳しい人が多そうなんで、スレ違いだけど、質問させてください
っていうのは。

漏れなんて、インターネットが普及しはじめた頃に一度、
自宅のパソコンの調子が悪いので相談に乗ってくれ
というメールが来たよ。公開してるフリーソフトと関係ないだろ!ってゴルァした。
872デフォルトの名無しさん:2005/04/11(月) 20:59:08
>>871
オマエモナー
873848,850:2005/04/11(月) 21:57:08
すみません、ちょっとトラブルになったようで。
適当なスレが見当たらなかったので質問させていただきました。
もしよろしければ、レスをいただけるとありがたいです。
874デフォルトの名無しさん:2005/04/11(月) 22:46:31
>>873
ヒント: キャッシュ
875デフォルトの名無しさん:2005/04/12(火) 04:59:12
リソースエディタで作ったダイアログの枠の大きさを
その中に配置されたコントロール群より小さくしたとき、
スクロールバーでスクロールさせてきちんと全体を見渡せるようにしたいんですが、
ダイアログのプロパティでスクロールバーを付けてるのに
これが上手く機能しません。
どうしたらよいのでしょうか?
876デフォルトの名無しさん:2005/04/12(火) 08:46:32
1つのダイアログの機能とデザイン、リソースIDなどをまるごと
他のプロジェクトへコピーしたいのですが、簡単な方法はありますか?
877デフォルトの名無しさん:2005/04/12(火) 09:00:50
ギャラリへ追加
878デフォルトの名無しさん:2005/04/12(火) 18:28:49
変数はループの外で宣言したほうが早くなりますか?

以下は例です。

for(int i;i<256;++i){
int a;
a=hoge(i);
}

int a;
for(int i;i<256;++i){
a=hoge(i);
}
879デフォルトの名無しさん:2005/04/12(火) 18:30:17
コンパイラの最適化で同じ物になりそう
880デフォルトの名無しさん:2005/04/12(火) 18:52:21
>>879
じゃあ可読性のよい方を選べばいいんですかね?
881デフォルトの名無しさん:2005/04/12(火) 19:09:45
>>880
スコープを小さくするメリットを優先すべし。
当然、前者の方がいい。
#つーか、仮令例でもiが初期化されていないの激しく気になる。
882デフォルトの名無しさん:2005/04/12(火) 19:13:57
>>881
お返事ありがとうございます。
スコープを小さくすることでレジスタに入ったりするということでしょうか?
iの初期化は例文のミスです。
883デフォルトの名無しさん:2005/04/12(火) 20:23:07
>>882
コンパイラはあんたより賢いからどちらでも同じコードを吐く。
寧ろ、あんたがミスしないようにエラー通知や警告さえしてくれるわけだ。
生存期間を短くすると言うことはそういうことだ。
884デフォルトの名無しさん:2005/04/12(火) 22:01:45
そんなとき俺なら更に初期化時に戻り値を受けるようにする。
for(int i = 0; i < 256; ++i) {
  int a = hoge(i);
}
885デフォルトの名無しさん:2005/04/12(火) 23:27:13
for (int i = 256; i ; i--) {
 int a = hoge(i);
}
886デフォルトの名無しさん:2005/04/12(火) 23:32:44
>>885
そんなひっかけ見たことない
887デフォルトの名無しさん:2005/04/12(火) 23:45:19
winsockで質問です。

現在、クライアントからselect()ベースでTelnetの通信制御を行う
プログラムをMFCで作成しております。

Telnet通信を行っているあいだに、とあるコマンドにおいてサーバ側が
自動で切断します。このときサーバ側は受信の応答を返さずに切断して
しまうので、これをクライアント側で切断のタイミングを検出し再接続
を行うようにしたいのです。

その検出方法でなかなか良い方法が見つかりません。
とあるサイトで切断のタイミングは受信バッファが0である
と見かけましたが、サーバ側からの受信バッファが途中で
一端途切れるため、実際に切断されるよりも前のタイミング
で検出してしまいます。

なにか良い方法はないのでしょうか?
888デフォルトの名無しさん:2005/04/13(水) 00:10:52
コマンドラインのワイルドカードを展開するときって setargv.obj をリンクしますよね。
VC6(SPなし、SP6どちらも)でMBCSビルドではうまくいくのですが、wsetargv.objを
リンクしてUNICODEビルドすると

wsetargv.obj : error LNK2001: 外部シンボル "___wsetargv" は未解決です

となってしまいます。どうしたらいいんでしょか?
(VC2003ではOKだった...)
889デフォルトの名無しさん:2005/04/13(水) 02:03:46
>>887
unixからの移植用のselectなんて使うのやめて、
Windows用のWSAAsyncSelectでFD_CLOSEイベントを受けとろう。
890デフォルトの名無しさん:2005/04/13(水) 02:12:33
なんかよう意味がわからん。
サーバがcloseかshutdownで切断すればクライアントは
recvで0を受け取って、切断されたんだな〜ってわかると思うが。
891デフォルトの名無しさん:2005/04/13(水) 05:41:36
>>887の人は、

> サーバ側からの受信バッファが途中で
> 一端途切れるため、実際に切断されるよりも前のタイミング
> で検出
と書いているから、
ブロッキングではなく、ノンブロッキングでrecvを呼んでいるのだと思う。
892デフォルトの名無しさん:2005/04/13(水) 06:25:29
下のようなコードを見たのですが、
boolをなんだか関数みたいな形でtypedefしてるみたいなのですが
わけがわからないです。これはどういうことでしょうか?
どんな意味か、どんなメリットがあるかも分かりません。教えて下さい。お願いします。

typedef bool (*HOGE_FOO_AAA)( BAR bar, MOGE moge);
typedef bool (*HOGE_FOO_BBB)();
893デフォルトの名無しさん:2005/04/13(水) 06:31:14
関数ポインタでぐぐれ
894デフォルトの名無しさん:2005/04/13(水) 08:33:28
すみません質問なのですが、VisualC++はC言語の勉強もできますか?
4月から学校で習うので、もしできるのなら購入したいと思いまして。
皆様よろしくお願い致しますm(_ _)m
895デフォルトの名無しさん:2005/04/13(水) 08:52:16
>>894
はい
896デフォルトの名無しさん:2005/04/13(水) 08:56:58
>>895
ありがとうございます
学生証もらったら買いに行きます
897デフォルトの名無しさん:2005/04/13(水) 09:03:27
>>894
Cの勉強のためだけなら必ずしも買う必要もありませんが。
898デフォルトの名無しさん:2005/04/13(水) 09:03:58
>>894
学校で使う程度なら、フリーのコンパイラでもいいんじゃない?
それで、プログラムに興味もって何か作ろうって思ったらVC買えばいいとおもう。

学校ってのが、高校なのか大学かはしらんが、大学ならUNIXだったりするぞ。
899デフォルトの名無しさん:2005/04/13(水) 09:14:50
>>897-898
ありがとうございます
フリーのコンパイラの方も検討してみます。
900デフォルトの名無しさん:2005/04/13(水) 12:49:54
お勉強ならCygwinを入れてgccがいいんじゃないかな。
901デフォルトの名無しさん:2005/04/13(水) 13:37:45
漏れはVC++を勧めるよ、コンパイラとしてではなくデバッガとして。
902デフォルトの名無しさん:2005/04/13(水) 14:15:50
本当にここはVCのスレなんだろうか?
嫌がらせでわざと毎日スレ違いの質問しに来てるとしか思えない。
903デフォルトの名無しさん:2005/04/13(水) 14:49:03
>>899
むしろこっちをお勧め。

激安で買えるVisual Stdio.NET theSpoke Disc.9
http://pc8.2ch.net/test/read.cgi/tech/1103381010/
904デフォルトの名無しさん:2005/04/13(水) 15:22:03
教えてくださいお願いします。VisualStuido97で
作成しているプロジェクトなのですが
プロジェクトワークスペース内に
main.c メイン処理(初期化やクローズ、画面の作成)
sub1.c サブ関数群1
sub2.c サブ関数群2
という構成で一つのEXEが作成されています。
基本的には各処理が終わればmain.c内のClose関数で
画面の破棄、メモリの開放等を行っています。
ところが、ある条件が揃った時に致命的エラーが発生するのです。
要はデータファイルを共用しており、別のプログラムがデータファイルに
アクセスしている際に不具合が発生するようなのです
処理の優先順位は当該プログラム側の方が低い為
データアクセス競合時にこれを避けるために処理を強制的に終わらせたいと思います
競合時の判定はsub2.c コード内で取得できるので sub2c内のコードから
強制終了したいのですが、方法がわかりません。
main.cにもっているClose関数を呼ぼうとするとLNK1120:外部シンボル"ClosePrc"は未解決です
のエラーが発生しています。アドバイスをお願いします。
905デフォルトの名無しさん:2005/04/13(水) 16:19:35
sub2.cはmain.cにもっている関数の宣言を知らないんじゃない?
906デフォルトの名無しさん:2005/04/13(水) 16:27:51
>>905
そうとも考えまして
main.cで定義している関数を
sub2.cのインクルードファイルにextern宣言してみたりしたのですがうまく
コンパイルが通りません。
厨な方法なのですが、closePrcに書いている各関数の初期化や
破棄等をベタ書きで書いたりして無理矢理コンパイル通したりしたのですが
画面さえ閉じられる物のプロセスは生き残ってしまっています。
907デフォルトの名無しさん:2005/04/13(水) 20:55:30
ヘッダファイル作れば良いんじゃないの?
908904:2005/04/14(木) 09:07:29
レスありがとうございます。
すみません。インクルードファイルとはヘッダファイルの事でした。
既にヘッダファイルを作成して、各Cソース上部にそのヘッダをインクルードしています。
909デフォルトの名無しさん:2005/04/14(木) 09:45:16
そのcloseなんとかがstatic関数だったりしない?
910904:2005/04/14(木) 09:47:57
>>909
おっしゃる通りstaticで定義されております。
なぜstaticでないと行けないのかは解らないのでそのままなのですが
そこに問題ありでしょうか?
911デフォルトの名無しさん:2005/04/14(木) 10:25:52
>>910
staticな関数は「そのファイルの外側からは見えない」
externしても無駄無駄
912デフォルトの名無しさん:2005/04/14(木) 10:29:01
プログラム自身が現在使用しているメモリ量と、パソコンの残り空きメモリ量はどのようにしたら取得できるのでしょうか?
913904:2005/04/14(木) 10:31:06
>>911
そういう問題があったのですね。
勉強不足ですみません。一度、指摘されました個所を
コメント化して現在の
static void ClosePrc(HWND hwnd);
から
void ClosePrc(HWND hwnd)
へ変更し、extern してみたのですが、同じくLNK1120のエラーが発生
してしまいました。何か他にも要因が考えられますでしょうか?
よろしくお願いします。
914デフォルトの名無しさん:2005/04/14(木) 10:35:15
//main.c
void ClosePrc(HWND hwnd) {
....
}

//ヘッダ
extern void ClosePrc(HWND hwnd);

//sub2.c
#include "ヘッダ"
foo() {
ClosePrc(hoge);
}
って状態なんだよね?
915デフォルトの名無しさん:2005/04/14(木) 10:55:49
ソース全部晒せ!
916904:2005/04/14(木) 10:58:38
>>914
失礼しました。実態の定義部にstaticが残っておりました。
清書しまして現在、コンパイルが通りましたので
早速動作確認してみました。
やはりプロセスが生きのこってしまっています。
上記で教えていただきました、関数呼び元の
ClosePrc(hoge); ですが
hogeとはどのような意味がありますでしょうか?
当方コードではHWND hwnd;
で宣言しているClosePrc(hwnd);としています。
終了する際のハンドル取得に問題があるのでしょうか?
917デフォルトの名無しさん:2005/04/14(木) 11:44:44
プログラム組む前の段階の質問で申し訳ないんですけど
今までVC++をCドライブのプログラムファイルフォルダ以下にインスト(多分デフォでここだったはず)
してたんですけど、どこかのスレでプログラムファイル以下にインストする奴は馬鹿みたいな事を書いていたのを見たんですけど
実際皆さんどこにインストールしてますか?プログラムファイル以下だと何か不都合があるんでしょうか?
918デフォルトの名無しさん:2005/04/14(木) 11:45:22
>>916
初心者の特徴:ソースを見せずに「うまくいかないんです。なぜですか?」
919904:2005/04/14(木) 11:56:59
>>918
すみません。ソースを全てお見せすると膨大な量となります。
主要部分を抜き出すと>>914で確認の為に作成していただいた
各関数のコードのみとなるのですが。。。。
おっしゃる通り私は初心者です。申し訳ございません。
920デフォルトの名無しさん:2005/04/14(木) 12:05:50
>>919
「ソースを見せずに」≠「ソースを全て見せずに」
問題の発生する必要最低限のコードを抜き出して見せないと満足な回答は得られないよ。
921904:2005/04/14(木) 12:18:43
>>920
失礼しました。主要関数内部のコードを貼ります。よろしくお願いします。
//Main.c 処理の終了
void ExitProc(HWND hWnd)
{
CancelFlg = YES;
CloseTransferThread();
DeleteAlltempFile();
DisconnectProc();
WSACleanup();
DestroyWindow(hWndFtp);
return;
}

//sub2.c 処理状況の取得
int ReadReplyMessage(SOCKET cSkt, char *Buf, int Max, int *CancelCheckWork, char *Tmp)
{
int iRetCode;
int iContinue;
int Lines;

HWND hWnd;

if(Buf != NULL)
memset(Buf, NUL, Max);
Max--;

iRet = ReadLine(cSkt, Tmp, ONELINE_BUF_SIZE, CancelCheckWork);
922904:2005/04/14(木) 12:19:18
FirstCode = 0;
if(cSkt != INVALID_SOCKET)
{
Lines = 0;
do
{
iContinue = NO;
//正常終了(連続処理時の正常終了)
if (strstr(Tmp,"Transfer complete")!=0){
MessageBox(NULL,"","終了確認",MB_OK);
ExitProc(hWnd);//アプリケーションの終了
}

if(){//エラー判定割愛
ExitProc(hWnd);//アプリケーションの終了
FirstCode = 500
break;
}
Lines++;

}
while(iContinue == YES);
FirstCode = iRet
}
return(FirstCode));
}
923デフォルトの名無しさん:2005/04/14(木) 13:05:34
>>904
・ExitProc()を読んだときのhWndには何が入ってるの?
main.cとsub2.cで違うものが入ってたら同じ動作はしない可能性が高いわけだが。
・ExitProc()にhWnd渡してるのに使ってないけど?
・同じく、hWndFtpとはなに?

初心者云々以前にプログラマに向いてない気が。
924デフォルトの名無しさん:2005/04/14(木) 13:19:15
流れを読まずに質問。
ウィンドウのサイズを変更したら中にあるリストビューのサイズも追従させたいんだけど、どうすれば出来ますかね?
ウィンドウのサイズが変わったときに送られるメッセージとかあるの?
925デフォルトの名無しさん
ある