★初心者にVisual C++を教えるスレ★ Part17
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 インテリセンスはおまけ
全然ないよりはありがたいから感謝しろ
日本語で書かれたドキュメントすら読まずに質問するなら捨ててしまえ。
8 :
デフォルトの名無しさん:05/02/10 13:12:18
VC++.Net2003のダイアログエディタでは、
BCBのようにマルチタブなものは作れないようですが、
自分でCreateWindowExで全部作るしかないんですか?
>>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エディターの起動方法を教えてください。
ここは初心者スレ
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」って出てるみたいです
どこが駄目なんでしょうか?
ReadFile に &lpszBuf ではなく lpszBuf を渡すべきでは...
>>16 エラーになった理由わかってなさそう・・・
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;
↑の続き
pOFN->hwndOwner= hWnd;
pOFN->lpstrFile= pFileName;
pOFN->lpstrFileTitle= pTitleName;
pOFN->Flags= OFN_HIDEREADONLY | OFN_CREATEPROMPT;
GetOpenFileName(pOFN);
これでダイアログは表示されるけど、ダイアログのフィルタの部分の
文字列がバグってます。
どこか間違ってますか?このコード。
フィルタがダメだから、どのファイルも表示されない。
pFileNameはMAX_PATH分、確保されてるので、十分有ると思います。
文字列最後にヌル文字入れてます。pFileName[MAX_PATH-1]のように。
pFileName[MAX_PATH-1]=0;の間違い
Aというバッファにゴミが入っていたとしよう。
A[n]='\0'; としても、n>0 ならやはり先頭からn文字はゴミである。
それはそれとして、フィルタがおかしいならszFilterが腐ってるんでないの?
一目見て間違ってるから
ろくに調べもしないで質問してるに違いない。
うにCode関連じゃない?
自己解決しました。前にも同じ事悩んでた気がする。
しかも、その時も時間掛かった。
25 :
デフォルトの名無しさん:05/02/12 13:26:22
>>25 1日待っても回答がないということは、
質問の仕方が悪いのかな?
>>1をよく読んで見たら?
> ■質問するにあたって
> ・エラーや警告のときはエラーメッセージを書きましょう。
> ・開発環境も書きましょう。
> ・できるだけ具体的に。
>
> 質問の仕方については次のページが大変参考になります。
MFC使いは一般的にBCBを知らないだろうからね。
MFCにはTabCtrlがあるけど、そのTabPageの中身は自前で用意するのがMFC流だね。
リストボックスの中身を消すためにはどの命令を使えばいいでしょうか。
使っているのはVC6です。ご教授お願いします。
命令って何?
APIか?
そのリストボックスの中身がどうやって出てきたかによるだろうな
28です。すいません説明が足りませんでした。
ダイアログボックスのリストボックスです。
28です。自己解決できました。
Visual C++
とはちょっと違うんですけど
突然MSDNが見れなくなりました
ヘルプC:\Pro〜98.colが開けません
ってダイアログが出ます
どうしたら見れるようになるんでしょうか?
ウイルスまたはHDDが壊れる前兆
warning C4201 が
#pragma warning( disable : 4201 ) で無効化できない件について。
なんで?
C++でAPIを使ってWindowsProgrammingをしようと思うんですが、どうも綺麗にまとまった
プログラムを書くことが出来ません。
やはりMFCを使って書くのが良いのでしょうか?
事故解決。
windows.h が悪さしてますた。orz
>>36 たぶんあなたはMFCでも綺麗に書けない。
>>26 自己解決しました
プロパティシートとやらをつかうらしい
そういうことか
マルチタブって何のことかわからんかった
タブが1個ならタブにする意味ないから
タブがマルチのは当然だし
いったい何を意味不明なこと言ってるのかと
マルチタブでぐぐってみたらサプリメントだった。
「明治製菓 ザバス プロ スーパーマルチタブ 」とか 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メソッドが返す値が違うんでしょうか?
>>45 そのShow()の定義を調べよ。
DialogResult::OKの定義も調べよ。
MessageBox::Show なんて初めて見た
.netだろうか
ぐぐっても出てこないな
コーディングミスだろ
それか参考書の活字が間違ってる
>>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)
何か見るとこ間違ってるでしょうか?もうちょっとヒントいただけるとうれしいです。
>>48 コーディングミスですか(T T)
if(MessageBox::Show("本当に削除しますか?", "HomeBank", MessageBoxButtons::OKCancel) != DialogResult::OK){ return; }
のコードには何も問題ないということでしょうか。
ちょっとまたいろいろ試行錯誤してみます。
.netだし、
thisポインタ抜けてるし。
1行にいっぱい詰め込んであると、どこが間違ってるかわかりにくいし、
戻り値の型がわからなくなる。
MSDNのサンプルの方がよさそうだな
System::Windows::Forms::DialogResult result;
これが戻り値じゃん
>>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 ==========
また失敗。
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関係のエラーの時にですが、再起動したらなぜか
ビルドが通るようになることもあったので、再起動も試してみましたが。
同じことでした。
これは結局、こっち側の記述ミスとかコーディングミスとか設定ミスに原因があるんでしょうか。
それともベータ版だけに開発環境の問題ということはないでしょうか。
>>58 えっ?.netでC++って超マイナーなんですか?
Visual Studio 2005 Beta 入れる時にC++をダウンしようかC#をダウンしようかさんざん迷ったんです。
で、C++の方が歴史が長いわけだし、その分C++ユーザはいっぱいいるだろうと思って
C#よりもC++の方が書籍もサイトも多いだろうと思って
なにかあったときに情報収集がしやすいんじゃないかと思ってC++にしたんです。
それが、.netだとマイナーなんですか?
今からでもC#に鞍替えしたほうがベターでしょうか。
まだ VC++ 2005 Express Beta1 入れて、まだ開発環境の操作方法勉強してるぐらい初期段階なんで
C#がいいなら、またダウンしてインストールするのすごい手間と思うけど、がんばって鞍替えしようかと
思いますけど、長い目で見た場合C#のほうがかしこい選択だったんでしょうか。
マイナーってかVC6と比較してインターフェースが色々変わったって
話を聞いて乗り換えられない俺。
63 :
デフォルトの名無しさん:05/02/14 17:56:17
質問です。
CFileクラスを使ってファイル操作をしています。
2GBを超えるファイルを扱った際、2GB以上のポイントにシークすると例外が発生して
「無題のファイルのシークに失敗しました」と表示されます。
これを回避する方法をご教授ください。
開発環境の問題かもしれない可能性もはっきりさせたいので
Visual C++ 2005 Betaスレでちょっと確認してみようかなと思います。
65 :
デフォルトの名無しさん:05/02/14 18:20:06
すいません、初歩的な質問なんですがVC6.0でexit以外で
何か最適なプログラム終了方法ってありますか?
PostQuitMessage(0);
>>65 深い所から一気に抜けるなら例外投げるといいかもしれない。
>>63 CFileのseekじゃ無理。
SetFilePointerを使う。
しかし俺の環境だと何故かSetFilePointerExが使えない。
何だこれ?
>>68 Platform SDK Update
最新の入れてるならWINVERを適切に。
71 :
デフォルトの名無しさん:05/02/14 21:02:15
VC++6.0(Visualstudio6.0)はWindowsXPホームエディションにインストールしても
問題なく使えますか?
OSの一部が古いのに置き換わってしまいそうで躊躇してます。
ご教授を
>>71 ここはパソコン初心者板じゃないよ
インストールしておかしくなったら自分で直せるだろ
入れて自分で試せ
つまんない質問ですが、外部エディタでプログラム書いてコンパイルするのって、一々プロジェクトを作らないといけないのでしょうか。
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
すいません、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++で作れないもので・・・。
>>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();
80 :
デフォルトの名無しさん:05/02/15 10:17:49
一画面に限ってのシミュレーションゲーム(仮にファイアーエンブレム)を
作ろうと思ったら、フォーム一杯にピクチャーボックスを敷き詰めるわけですか?
>>80 フォーム一杯のサイズでピクチャボックス1個
ていうか、フォームに描画
ユニットとかマップチップの画像をメモリに読み込んで、
フォームに描画するような処理を1マスごとにするんですか?
好きにすればいい
>>76 あてずっぽうで。
AfxGetStaticModuleStateを使ってみるってのは如何?
見てないけど DLL_Hook と書いてあるな
HHOOK CKeyboardHook::m_hHook = NULL; とか
>90
クラス外でこれをやればよかったんですね…orz
お世話かけました、ありがとうございます。
>89
一応中身はローカルフックのことが書いてありますです。
DLL化を諦め気味ですが、とりあえず明日試してみます。
結果は後ほど。
なんか平凡なリンクエラーの模様
いったん仮想画面?に描画して、画面にコピーする、
というのをほかのソースの見よう見まねでやってみたんですができません・・・
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;
これなんですけど、何がダメなんでしょうか・・・?
>>86 ありがとうございます。
お手数おかけしました。
出来たファイルをメモ帳で開くと、Y < 11 の時に文字化けするんです・・・
一応、改行のつもりの\r\nの箇所を\nにしたら、何故か直りました。
見よう見まねで偶然できても何の意味もないよな
プロジェクト全体をビルドするのじゃなくて、
一つのソースをコンパイルする方法って有りません?
コマンドラインじゃなくて。
>>99 盲人?
メニューにもツールバーにもあるだろ
103 :
デフォルトの名無しさん:05/02/16 18:26:12
6.0から.net2003にバージョンアップしたのですが、
6.0のころにあったClass Wizardがなくなって困っています。
関数の追加やオーバーライドはどうやったらいいのでしょうか。
直接ソースに書いてもいいんですか?
>>103 関数・変数の追加 -> クラスビューの任意のクラスで右クリック
オーバーライド -> プロパティウインドウにある、雷マークの右のボタン
ありがとう。
もう一つ質問ですけど、プロジェクトとソリューションの違いは何ですか?
>>105 プロジェクト + プロジェクト = ソリューション
107 :
デフォルトの名無しさん:05/02/16 20:40:53
質問です。
アプリケーションに新しい機能を実装するときに、
バージョンアップではなく独立性の高いプラグインを入れる方法を用いたいのですが、
アプリケーション開発にプラグイン方式を使ったことがありません。
概要で良いので、プラグイン方式ってどうやるものなのでしょうか?をお教えください。
もし掲示板では解答が面倒で、この疑問に対して良著があるのでしたらそれをご紹介願います。
>>107 Susieのプラグインあたりで練習してみれば?
Susie関連を参考にしてみたら?
>>107 プラグインをDLLにして、サーバ側ではLoadLibrary
>>110 LoadLibraryするのはクライアント側だろ。
プラグインは機能を提供する側(サーバ)なんだから。
112 :
107:05/02/17 08:45:53
参考になりました!
thx!
113 :
デフォルトの名無しさん:05/02/17 11:01:56
すみません。教えてください。
<略>
int a;
while(1){
cin >> a;
if(・・・・略
}
という感じでソースを書いて、ビルド&実行してみると、
数字が入力された場合は問題ないのですが、
数字以外が入力された場合永久ループとなってしまいます。
入力値を数字かどうか判断するか数字以外だとエラーとする方法はないでしょうか?
>>113 標準関数でも自分で判定してもどちらでもいいと思いまする。
エディットコントロールを数字専用にする
質問。
誰か>115が何の積もりでレスしているのか教えてください。
117 :
デフォルトの名無しさん:05/02/17 12:35:32
ES_NUMBER
119 :
デフォルトの名無しさん:05/02/17 14:30:42
113はWindowsアプリでエディットコントロールを使って書いたのに
うっかりしてcinを使ってしまったのだろう。
120 :
113:05/02/17 15:01:47
初心者ですので、本を見ながら勉強しています。
で、最初のプログラムが
Win32 Consol Aplication
を選択して書き始めるもので、
その中でCinが出てきます。
本のとおりに書くと113のような現象となります。
無視して次に進んでもいいのですが、
気になってしょうがないので
皆様のお知恵をお借りしたいです。
対処法をもう少し詳しく教えてください。
初心者ですみません。。
よろしくお願いします。
C++初心者はC++スレへ
つまり、VC厨はstd::iostreamを使ったことが無いから答えられないと。
123 :
デフォルトの名無しさん:05/02/17 15:28:46
C++向きの話題をわざわざここでやる意味がない。
124 :
113:05/02/17 15:36:41
C++もVC++も使ったことないんですが、
この話題はC++の話題になるのですか??
VC++で書いてるのに??
ちなみにC++の板でCinの話題をみて
解決法らしきものがあったのですが、
VC++で同じようにしたらコンパイル出来ませんでした。。
>>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
結構シビアですね、、、
多少のすれ違いでも
困って書いてるので
分かるなら教えてくれても・・・と思うのですが。。
「多少違う」 ように見えるかもしれんけど、
解ってくるようであれば 「結構違う」 ことに気づくだろう。
というわけで
>>3
とりあえずコード全部書け
例外はスルー
スレ違いは適当なスレへ投げろ
見苦しい
>>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;
}
いまさらだけど、VC++6.0のリソースエディタで、バージョン情報の
特定の項目(スペシャルビルド等)を削除することってできますか?
今は使ってない項目は、リソーススクリプトをテキストエディタで
編集して削ってます。
Visual Studio 6 と .NET 2003って同じ環境にインストールできますか?
またしても問題なく動きますか?
またしても、問題なく動くことも動かないこともあります。
テスト用の環境ないんじゃしょうがない
運は天にまかせろ
>>135 VS2003のDiscにある readme.htm を見てみると良い。
139 :
デフォルトの名無しさん:05/02/19 02:14:10
質問です。VC++5.0久しぶりに駆動させたらマニュアルみれませんでした。
サポート切れ?オンラインマニュアル?
ふるいVC使ってる人、教えてください。
140 :
デフォルトの名無しさん:05/02/19 02:14:42
二週間ほど込み入っていた問題がようやく解決しそうなので
記念カキコアゲ
141さん、ここは僕の日記帳ですぽ
日記はチラシの裏の裏へ
144 :
デフォルトの名無しさん:05/02/19 17:39:05
msxml4.dllをインポートして
XMLファイルの内容をXSLファイルに記述してある形式で
CMapStringToStringにKey(タグ名)とValue(エレメント名)に格納したいと思っています
ファイルに落とすのは、普通にTransformNodeメソッド使ったあとにテキストファイルに書き込めばいいのはわかったのですが
そのテキストファイルを読むことなくIXMLDOMDocumentのメソッドを使って、
バッファーにタグ名とエレメント名を格納する方法はあるんでしょうか
おしえてください
初心者にVisual C++を教えるスレ
質問させてもらいます。
一つのクラス内で処理される変数の個数に限界など存在するのでしょうか?
というのも、VisualC++6.0でダイアログベースのプログラミングをしているのですが、
その中のとある一つのヘッダに変数を二つ追加したらプログラムが正常に動作しなくなりました。
その変数はただ宣言しただけなのでプログラムに直接の影響を及ぼすはずは無いのですが…
ちなみにそれとは別のヘッダに変数を追加したところ問題なく動作しました。
よろしくお願いします。
宣言すればメモリを消費するよね
名前がぶつかっていたりって落ちはないよな。
もともと潜在的なバグがあって、変数を追加することによりメモリ配置が変わって
バグが表面化したんだろ。
ヒープ上にインスタンス生成しなきゃいけないクラスとかを
いきなりフレームスタック上のメンバ変数にしたとかいうオチ。
>>146 結局プログラムの構造によってそれは起きるの結論で、C++のせいじゃない。
152 :
デフォルトの名無しさん:05/02/20 03:27:03
>>139 >質問です。VC++5.0久しぶりに駆動させたらマニュアルみれませんでした。
>サポート切れ?オンラインマニュアル?
>ふるいVC使ってる人、教えてください。
だれかおしえてくれ。ヘルプが参照できなくて困っているのだ...
質問です。
ウィンドプロシージャ関数内でダイアログを呼び出そうとして
DialogBox(GetWindowInstance(hWnd),MAKEINTRESOURCE(IDD_MYDIALOG),
hWnd,DlgProc);
としました。すると以下のような警告が出てしまいました。
warning C4312: '型キャスト' : 'LONG' からより大きいサイズの 'HMODULE' へ変換します。
どうやらGetWindowInstance関数でインスタンスハンドルを取得した場合に出るようなのですが
その先の改善の仕方がどうにもわかりません、この警告を消す方法を教えてください、お願いします。
>>152 HDDのそのセクタかなんかがぶっ壊れてんだろ。
>>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のそのセクタかなんかがぶっ壊れてんだろ。
そうなの?
ヘルプみれなくなった
=オンラインマニュアル
=サポート切れ
かとおもっていたが。。。
↑インストールし直せよ。
パソコン初心者板か?
つーかMSに訊けよ
160 :
デフォルトの名無しさん:05/02/20 18:19:54
C++でCのSprintfの代わりは何? Stringと DoubleとIntegerしか使わない
んだが、IntegerをStringにして表示したい。 (Char*でもCStringでもなく)
StringにするにはConvertとかつかうの? 普通に計算したやつを表示する
だけなんだが。
sprintf
>>160 SprintfもStringもDoubleもIntegerもない。あー、Charもないな。
debugとreleaseってどう使い分けるのですか?
プロシージャって何Cじゃー?
>>163 デバッグするとき->debug
リリースするとき->release
デバッグするとき〜〜〜〜〜 ->自分でモンモン・かりかりする時。
リリースするとき〜〜〜〜〜 ->世の中に解き放つ時。
>>165-166 どうも^^
debugフォルダの実行ファイルを実行すると、画像が表示されないのですが、releaseにしたら表示されるんですか?
>>160 C++でも#include <cstdio>でstd::sprintfは使えるが、
C++っぽいやり方がお望みならstd::stringstreamを。
>>167 両方とも直接実行したらほぼ同じ、debugの方が少し遅いかな。
exeのサイズもデバック情報が入っているので大きいし。
>>169 では、配布するときはreleaseフォルダに画像をいれて配布すればいいのですか?
+ 自分でデバックコードを書いてあると、ユーザーもそれが見えてします。
リリースする時はデバックコードが入っていない。
>>170 ソフトに必要なファイルは、releaseファイルと一緒に入れる。
同じフォルダーかどうかは、設計による。
174 :
160:05/02/20 20:49:53
>C++でも#include <cstdio>でstd::sprintfは使えるが、
>C++っぽいやり方がお望みならstd::stringstreamを。
sprintfではString変換できないでしょ。
stringstreamはできるんでしょうが、意味的に目的が違うような気がするんですが。
VBだとIntegerがObjectだからInteger.ToString()で変換できたはず。この方が
すっきりするが、Formatなどの表示変換もある。
ManagedではIntegerのオブジェクトがあるの?
>>174 std::string toString(int foo)
{
char buf[sizeof(int) * 3];
sprintf(buf, "%d", foo);
return buf;
}
自分でIntegerクラス作ればいいじゃん。
インテジャーってなんじゃー
>>175 それだったらここまでやろうよ
template<typename T> inline std::string toString(T n)
{
return (std::ostringstream() << n).str();
}
お答えくださった皆さん、ありがとうございました。レス遅れてすみません。
皆さんのヒントを参考にソースを見なおしていたら間違いらしい箇所を発見しました。
今度はそこの直し方で困っていますが、とりあえず独力で頑張ってみようと思います。
本当にありがとうございました〜!
>>178 うん、そうも思ったんだけどsprintf()の代わりと書いてたから躊躇してsprintf()仕様にしてみた。
ここVCのスレだよな?
>>155 ありがとうございます。ためになりました!!
スタートページからPlatformSDKをアップデートしようとしたんですが
更新できる項目がなにもなかったのでwindowsX.hの中を見ていたら
GetWindowInstace関数はGetWindowLongPtr関数を呼び出すように
書かれていました。
それでもこの警告が出てしまうので、実行時には今のところ問題なさ
そうだし、この警告を消すのはあきらめることにしました。
183 :
デフォルトの名無しさん:05/02/21 00:15:03
>>156 >>HDDのそのセクタかなんかがぶっ壊れてんだろ。
>そうなの?
>ヘルプみれなくなった
>=オンラインマニュアル
>=サポート切れ
>かとおもっていたが。。。
フルインストールし直してもだめだ。
半年くらい前にいじったときにはヘルプみれたのになー。
こういう現象になった人いないの?
>>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
188 :
160:05/02/21 11:21:31
>175
やってみましたがエラーがでます。std使うための追加コードとか
ありますか?
>>188 #include <string> // for std::string
#include <cstdio> // for sprintf()
190 :
160:05/02/21 11:29:43
>178
やってみましたが
C++\prjVCtest\prjVCtest\Form1.h(2): error C2059: 構文エラー : ')'
C++\prjVCtest\prjVCtest\Form1.h(2): error C2065: 'T' : 定義されていない識別子です。
になります。
使ってるnamespaceは
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
です。
ここC++スレだっけ?
VCスレと思ってたけど気のせいかな?
192 :
160:05/02/21 11:35:12
>189
>#include <string> // for std::string
>#include <cstdio> // for sprintf()
これってCのstringのことですか? あのー質問の趣旨は
C++のString(オブジェクト?)に変換したいんですが。
ManagedC++スレってなかったっけ?
>>160 は C++ を知らずに Managed C++ をやろうとしている模様。
sprintf で編集して String に変換汁。
197 :
160:05/02/21 12:13:09
>185
これベストのようですね。ありがとう。
>196
boostのメーリングリストができるくらいだから、まともな方法がないみたいですね。
.NETのStringならString::Format()で一発
>>182 Win32ではGet/SetWindowLongPtrは単にGet/SetWindowLongを呼び出すマクロになっているだけだからどうしようもない
200 :
160:05/02/21 15:53:56
>198
例で示して。
っていうか、欲しい機能がなかったら自分で作れよ
それがC++流
202 :
160:05/02/21 16:09:16
>201
作るための最初の例を探してる。
ヘルプ読めよ。サンプル載ってる。
それともサンプルが理解できないのか?
.netはスレ違い
205 :
160:05/02/21 16:35:14
Stringの結合はどうやるの?
MessageBox::Show ("data=" + get_str(123)); //これはエラーする
public:
String* get_str(int i)
{
return String::Format(S"{0}",__box(i));
}
206 :
160:05/02/21 16:36:39
>204
えっ、.net以外にもVC++ってあるのか?
208 :
160:05/02/21 16:44:05
以後.netも可とする。VC++なので当然だ。
210 :
160:05/02/21 16:57:14
>209
サンクス。
別スレがあったよ。 208はキャンセルしとく。
色々ありがとさん。
とことん他人の書いていることを読んでない香具師だなぁ。
>>139 >>152 >>156 >>183 Windows XP にSP2入れなかったか?
俺もXP SP1 + VC5にSP2 入れたら見られなくなった。
だから、XP SP2 ははずした。そしたら見られるようになたヨ。
>>199 thx!
そうだったんですか、実質的には変わってないということなんですね
移行期間か・・まぎらわしぃーですね
初歩の初歩で大変申し訳ないです。
VC++自体はまだ手をつけていないのですが、いずれやってみたいなと思っています。
仮にVS.NETでWin32アプリを作ったとしても、利用側に.NET Frameworkが無いと使用できませんか??
C#は.NET Framework利用してるものなので無くてはならないとわかるのですが...
ホントにすみません・・・
".NET Framework"を使用するプログラムなら必要だね。
>>215 レスどうもありがとうございます m( _ _ )m
.NET Frameworkに含まれるクラスを使用するなら必要で、
純粋(?)なC/C++/APIを使う程度なら必要ないということですか??
>>216 そうだよ。
C/C++だってCのみを使うときは*.cファイルでコンパイルできるだろう
どうもありがとうございます。
.NET環境ない人でも利用できるソフトを作りたいな〜と思っていまして(^^
レスありがとうございました m( _ _ )m
219 :
デフォルトの名無しさん:05/02/22 00:48:25
>>212 >Windows XP にSP2入れなかったか?
>俺もXP SP1 + VC5にSP2 入れたら見られなくなった。
>だから、XP SP2 ははずした。そしたら見られるようになたヨ。
サンクス!
問題解決すますた!
しかし....どういうこっちゃい!
おはようございます
>>153の警告を消すのをあきらめるとか言っておい
てやっぱりあきらめられず色々やってました。
結局、WinUser.hというヘッダーファイルにたどり着き
そこにGetWindowLong関数が記述してあったので、
戻り値がLONGとなっていたのをLONG_PTRに書き変えて
リビルドすると警告はきれいさっぱり消えてくれました。
結果目的は達成することができました!ですが最後に質問させてください
勝手に上のようにヘッダーファイルを書き換えてしまったのですが
それによって不具合が生じることなどが考えられるでしょうか?
よろしくお願いします。
それなら戻り値をLONG_PTRにキャストしてやれば良いんじゃね?
どうもです
戻り値をLONG_PTRにキャストするとLOGN_PTRをHINSTANCEに
変換できないという旨のエラーが出てしまいました。
それと書き換えてない状態でGetWindowInstance関数が戻すの
はあくまでLONG型のデータらしくそれをキャストしても同じ旨の
警告がでるみたいです・・
開発環境:Visualstudio .net 2003
症状: 「リリースビルド」でビルドし、「デバッグなしで開始」(Ctrl+F5)で起動すると
プログラムが意図したとおりに動かない。
デバッグビルドおよび、リリースビルドをデバッガ込みで起動したときは正常に動く
質問があいまいですいませんが、このような症状の原因としては何が考えられるでしょう?
>>223 バグ。
起動時の作業フォルダの違いの影響もあるかな。
デバッグビルドでCtrl+f5を試してみるとか、
リリースビルドでもExplorerから起動してみるとか、
試してみるよろし。
>>224 > デバッグビルドでCtrl+f5を試してみるとか、
これは正常に動きました
> リリースビルドでもExplorerから起動してみるとか、
だめだった
デバッガが使えないとつらい……
printfデバッグでがんばります。
原因があっさり判明しました。
メンバ変数のひとつを初期化し忘れ。情けない……
乙
環境が変わると動かなくなる、良くあるバグだね。
229 :
デフォルトの名無しさん:05/02/22 23:32:38
SDIでプログラムを作っています
次のような機能を実装するにはどのようにすればいいでしょうか?
SDIからメニューを選択→自分で作ったダイアログを開く
次の方法を試してみました
まずダイアログベースでCSettingDlgを作る
次に新たなSDIプロジェクトを作って,CSettingDlg.hをインクルードする
この方法ではリソースがうまくCSettingのリソースが利用できず,断念しました
>
>>222 GetWindowLong の代わりに GetWindowLongPtr を使ってみる?
1.挿入−リソース−Dialog
2.挿入−クラスの新規作成−クラスの種類はFormクラス、クラス名適当、
基本クラスはCDialog、ダイアログIDはさっき作ったやつのIDを
>>230 Win32の場合はただのマクロだよ。
#define GetWindowLongPtrA GetWindowLongA
#define GetWindowLongPtrW GetWindowLongW
(WinUser.hより)
それにしても、なんで
>>232みたいなマクロがあるのかね。
おとなしくインライン関数にしてくれればいいのに……
メンバ関数の名前がその手のマクロとぶつかってちょっと悩んだ。
?
C言語時代の名残ではなかろうかと。
237 :
デフォルトの名無しさん:05/02/23 02:37:45
Edit Controlを使って,double型の数字を表示させようとすると
0.123456790123
のように必要以上に桁が多く表示されます(>_<)
0.123
程度で表示させる方法があれば教えてください
_stprintf()
CString::Format()
>>233 >メンバ関数の名前がその手のマクロとぶつかって
定義位置を表示させたら、そのマクロ定義してるトコロが出て
イラッとさせられる。
>>220 >>199 それと221はたぶんGetWindowInstanceを一旦LONG_PTRにキャストしてから
HINSTANCEにキャストするように直せということじゃないか?
241 :
岐阜:05/02/23 21:19:10
TRACE();を使いたいんだけど、
引数を照らしあわしてもそんなのないと、
コンパイルが通りません。
なにか、includeかリンクが必要ですか?
243 :
岐阜:05/02/23 21:28:30
VisualStudio.net 2003ですよ。
メ モ この機能は、MFC ライブラリのデバッグ環境でのみ利用することができます。
Visual C++を使っている ⊇ MFCを使っている。
246 :
岐阜:05/02/23 21:41:53
つまり、コンパイルを通すにはどうすればいいんですか?
>>246 MFCのライブラリをリンクするようにする。
それが嫌ならprintfデバッグをやる。(もちろんstd::coutでもいい)
VS2003なら、ATLに似たようなマクロがあったと思われ。
>>240 そっか・・そうですよね!気づきませんでした
そのことをまったく考えてなかったです。
目が覚めました。ありがとうございます!
250 :
デフォルトの名無しさん:05/02/24 01:59:17
岐阜を逆から読むと溥儀
恐れ多いあいしんかくら様になる!
251 :
デフォルトの名無しさん:05/02/25 02:34:24
非常に基本的な質問で申し訳ないです。
VC++で新しいプロジェクトを作ると、ソースファイル、ヘッダーファイルといった名前の
フォルダが自動的に作られますよね。
こいつらの中にソースを作っても、実際にはプロジェクトフォルダの直下に
ファイルが作られていくだけです。
自分でフォルダを作成しても、そのフォルダの作成は実際には反映されていません。
フォルダの作成が自動的に反映されるようにするにはどうすればいいんでしょうか?
書き忘れました。
環境はVisualStudio.net 2003です。
>>251 ファイルの在り処としてのフォルダと、プロジェクト内での分類としてのフォルダには関連性がありません。
どうしても、ということであれば自分でマクロでも書くしかないでしょう。
8BitDIBのカラーテーブル(パレット)位置教えてください。
LPRGBQUAD pColor = (LPRGBQUAD)(pBMPTop +sizeof(BITMAPFILEHEADER)+
sizeof(BITMAPINFOHEADER));
で合ってますか?
それはファイルに格納されたビットマップということ?
それなら良いよ。
レス違いだったらすいません。
フリーソフトを使おうとしたら下記のようなエラーが表示されるのですが
全然意味が分からないので、教えて頂きたいのですが。
宜しくお願いします。
=== 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)
fpreintf c の56行で文字列ポインターにヌルポが発生したのでもう一度デバックしろ。
>257
早々のレスありがとうございます。(^_^;)
折角レスを頂いたのですが
257さんの言っている単語などがわからないので
257さんの言っていることを勉強してきます。
ありがとうございました。
テキストファイルから特定の文字列の入った行を一行だけ
削除することは出来るでしょうか
abc
def
ghi
ってテキストファイルのdefの行を消して
abc
ghi
にするにはどうすればいいですか?
>>261
すいません
意味がよくわかりません
特定の文字列defは、テキストファイルの何行目に入っているかはわかっていません
テキストファイルを読み込んでいる時に
defの行だけを消したいのですが
grep -v '^def$' hoge.txt
$0 != "def" {print;}
質問です。
EMアルゴリズムを回してます。
「アクティブな構成」が「Win32 Debug」と「Win32 Release」の時で
結果が違うんですけどなぜでしょうか・・・。
収束するとこも違うし、Releaseだとエラーが出て止まってしまうんです。
Visual C++ 6.0、WindowsXPです。
266 :
デフォルトの名無しさん:05/02/26 02:47:18
>>262 すいません
テキストファイルを読み込んでいる時にdefの行が見つかったら無視すれば如何でしょうか?
269 :
デフォルトの名無しさん:05/02/26 13:49:13
visual c++とCのborland c++ 5.5 の違いは?
Visual C++:Microsoftの製品。MFCが付いてくる。Visual C++ ToolKitと称するIDE無しの無料版がある。
Borland C++ Builder:Borlandの製品。VCLが付いてくる。古いバージョン(5.5)のIDE無しの無料版がある。
>>260 その一つのファイルで解決しようとするんじゃなく
もう一つファイルをオープンしてそれに反映させていけばいい
ものすごい基礎的なことかと思うのですが、
VisualC++.netでプロジェクトの保存場所の履歴や、
文字列検索なとの履歴はどうやって削除できますか?
ツール→オプション→環境などをあさっても
それらしき項目が見つけることができませんでした
よろしくお願いします。
すみません自己解決しました。
レジストリーのそれっぽいのいじったらいけました。
お騒がせしました。
274 :
デフォルトの名無しさん:05/02/27 00:15:35
質問です。
CTextに表示されている文字を画面からはみ出たら改行
されるようにしたいのですが、どのように行えば良い
のか分かりません。MULTILINEとかいうプロパティを
指定すれば良いのでしょうか?
CTextって .net のクラスか何か?
MSDN見たけど載ってない。@VS 2003
MFCの文字を表示するためのコントロールです。
デフォルトのプロパティのまま文字表示しようとすると
表示文字がウィンドウの画面外から文字がはみ出てしま
い、文字切れしてしまいます。
これをどうにか文字がはみ出た分だけ改行させたいのです。
CButtonのコントロールではBS_MULTILINEと指定するとボタン
内の表示文字を改行表示出来ました。
Textでもそのようなオプションを探したところ見つかりません。
どなたかご存知の方おりましたらご教授お願いします。
\nで改行
だからCTextなんていうコントロール クラスはMFCには用意されてないっつーの。
試したところ"文字1\n文字2" と指定してもうまくいきません。
表示が「文字1・文字2」となり、改行が無視されてしまいます。
281 :
デフォルトの名無しさん:05/02/27 12:38:33
すいません初歩的な質問です。
visualc++ toolkit command promptとかいうのをタダでインストールしてん
ですが。このcommand promptにコードを打ち込んでいくのですか?
それとも、どこかにコードを打ち込んでそれをcommand promptを使って
callするのですか?
どっかに無料コンパイラのスレなかったかな?
>>281 たしか cat コマンドを使って前者でも。(うる覚え。
入力ファイル名をCONにすれば。
286 :
281:05/02/27 13:04:56
度々、すいません。 コード書くのははnote padとかでもいいのでしょうか?
今月号の日経ソフトウェアに特集はC/C++
VC++betaの使い方ものってる
289 :
デフォルトの名無しさん:05/02/27 13:15:45
なんか右も左も分からない人用にわかりやすく
説明してるウェブサイトないかな?
291 :
デフォルトの名無しさん:05/02/27 13:36:42
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
↓つづく
エラーメッセージ↓
/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 はデフォルトでインストール後何も触ってないです。
ライブラリが見つかってません。
>>293 無料コンパイラのスレ探して質問してくれ
もし見つからないなら超マイナーで誰も使ってないから
あきらめて違うコンパイラに乗り換えるのが吉
cl menu01.cpp kernel32.lib user32.lib gdi32.lib
で通るはず。
いちいちlibを指定するのが面倒なら、ソースの中にpragmaで書き込んじゃえ。
>>294-296 ありがd
>>294 そこまではわかったんだけど。
>>295 そんなスレッドありません。。。
無料コンパイラスレ。
作ったほうがいいのかな。
>>296 できたできた。
ありがとうございますです。
しかし、環境変数LIBって何のためにあるんだろ。
>>297 >環境変数LIBって何のためにあるんだろ。
実行時に DLL を検索するパス。
へぇー
環境変数設定してないと実行できないんだ
知らなかった
教えてください、VisualC++6.0の話しですけど。。。
ダイアログアプリケーションでボタンを置いて、これが押されたときはBN_CLICKED
というメッセージが発行されてメンバ関数を追加しておけばこれがコールされますけど、
ボタンを押している状態から放した状態に移行したイベントで関数をコールしたい
ときって、どうやったらいいんでしょうか?
普通にボタンを置くと、BN_CLICKEDとBN_DOUBLECLICKEDという2つのメッセージしか
使えないと思うのですが、メッセージを追加する方法とかあるんですかね?
>>300 BN_CLICKEDって押して離したときに来ると思ったんだけど違ったかな
>>301 >>300 です。
そうでした、BL_CLICKEDは放したときのイベントでしたね。
そういう意味では、私が知りたいのは押した瞬間のイベントを捉える方法です。
(押した瞬間にある処理をさせて、放した瞬間にも別の処理をさせることをしたいので。。。)
そんな関数って定義できるんですかね?
サブクラスすれ
>>303 まずクラスの新規作成で、CButtonを基本クラスとする新しいボタンのクラス
を作成する。で、クラスWizardでダイアログに張り付けたボタンをさっき作
った新しいクラスの変数として割り当てる。さらにクラスWizardでさっき作
ったボタンに関してON_WM_LBUTTONDOWNやらのハンドラを追加して中身を作り
込むと。どすか。
>>306 >>303 です。
レスどうもです。
アドバイスしてもらった方法でうまくいきました。
うまく利用すると(ボタンに限らず)色々な機能を実装できそうですね。
まったく目からうろこでございます。
ちなみに、当方今までC++BuilderばかりやっててVC++はお初なもので戸惑い多々あり。
またわからないことでスレ汚しするかも知れませんが、堪忍してやってくださいませ。
308 :
デフォルトの名無しさん:05/03/02 18:39:02
デバッグなしで実行するとエラーでプログラム落ちるのに、
デバッガで実行すると落ちないんですけど、
考えられる可能性は何なんでしょうか。
落ちる場所を特定(デバッガ使わない状態で)して、
デバッガで追ってみたけど落ちないし、落ちると思われる要素も無かった。
前、どこかでデバッグビルドで実行する時と、リリースビルドで実行する場合、
変数の挙動が変わるとか(うろ覚え)。
そういうのが関係してくるのでしょうか...?
310 :
デフォルトの名無しさん:05/03/02 20:09:18
メモリリークあるいは解放アドレスアクセス
311 :
デフォルトの名無しさん:05/03/02 20:12:07
リリース版では変数が最適化されたせいで文字列リテラルに書き込もうとして落ちてるとか
312 :
デフォルトの名無しさん:05/03/02 20:14:10
デバッガでアタッチしてる時と通常実行時の話か?
>>309 変数に隙間作ってご丁寧に初期化までしてくれるデバッガ使ってデバッグするのはネカマだけ
MFCでXP、ダイアログベースなんですが、
モーダルダイアログでいくつかのボタンとエディットボックスがあります。
ボタンにフォーカスがあって、タブ押したらフォーカスが移動するんですが(タブオーダーで順番決めてます)
キーボードの↑↓キーでも移動してしまうんです。
しかもtabstopプロパティをfalseにしてるエディットボックスにまでフォーカスが移動してしまいます。
やりたいことは↑↓でボタン間をフォーカス移動するのはもう仕方ないとして、
tabstopがfalseなエディットボックスに、移動さてたくないんですが、どんな方法がありますか?
自分の考えた拙い方法
(1)エディットボックスのフォーカスイベントで、別のコントロールにフォーカスを移動
→エディットに入力できなくなるかも?
(2)キーボードフック?とかいうもので、↑↓キーを検出してどうにかする
→むずかしそう
PreTranslateMessage()で、WM_KEYDOWN/UPを捕まえて止める。
>>314 グループは設定してる?
同じグループ内のコントロールはカーソルで移動できるようになってるが。
プログラムというかVC++自体の質問なんですがお願いします。
リソースエディタのString Table関連の日本語がツールから設定内容まで化けるんですけど、直す方法ってありますか?
環境はXP Home Edition のSP2で、VC++.NET 2003のアカデミックバージョンです。
回答へのお願い
ここはパソコン初心者板ではないから
くれぐれも失礼のないように
アカデミックバージョンはSP2では不具合出るよ。
Sp1に戻せ。
そうなんですか・・・今の状態じゃ直せそうにないのであきらめます;
ありがとうございました。
(
>>319 アカデミックバージョンをSP2で使ってた・・ぃゃ、別に問題出てないからイイカ・・・?)
322 :
デフォルトの名無しさん:05/03/04 07:55:07
すいません質問です。
TrackPopupMenuEX();
で作ったフローティングメニューに、
TrackPopupMenuEX();のための一連の関数呼び出し時の前以外のタイミングで
ダイナミックにメニューを追加する方法はありませんでしょうか。
このスレのほとんどの質問がWIN32APIの質問である件について。
325 :
322:05/03/05 03:30:48
>>323 丁寧でわかりやすい返答、本当にありがとう御座いました。
解決しました。
丁寧...
(V)∧_∧(V)
ヽ(・ω・)ノ フォッフォッフォッ
. / /
ノ ̄ゝ
. (V)∧_∧(V)
ヽ( )ノ フォッフォッフォッフォッ
. / /
.......... ノ ̄ゝ
328 :
デフォルトの名無しさん:05/03/05 19:06:06
Visual Studio.Net2003なんですが、プロジェクトのプロパティをいじっていたら、
「デバッグ」でビルドした際に固まってしまうようになりました。
ブレークポイントも「?」マークになって、効果がありません。
これってどこを設定すればいいんでしょうか?
または、プロパティをデフォルトに戻す方法があれば、教えていただきたいんですが・・・
再インストールとかパソコン初心者板みたいな回答が出ませんように
マネージ拡張がonになっていただけでした。
スレ汚しすいません・・・
331 :
デフォルトの名無しさん:05/03/05 23:39:22
質問です。
プログラム本体から派生したショートカットから(というかショートカットから)実行すると、
プログラムに判定される現在のディレクトリ がショートカットがある場所 になってしまいます。
この問題を、使う人が本体ディレクトリをぐりぐり動かしても大丈夫なように解決するにはどうすればいいでしょうか。
ショートカットのプロパティ5分見てからやり直し。
>>331 微妙に言ってることがわからん。
使う人が本体ディレクトリをぐりぐり動かすってなんなんだ?
>>331 GetModuleFileName でなんとかきりぬける。
>>331 カレントディレクトリに依存しない作りにする。
ファイルは必ずフルパスで操作すればいい。
336 :
331:05/03/06 01:43:15
>>332-225 ありがとうございます。
とりあえずGetModuleFileName()で切り抜けることにします。
さらに初心者っぽい質問でもうしわけないのですが
c:\xxx\xxxx\yyy.exeという文字列が抽出されましたが、
ここからc:\xxx\xxxx(\)というように実行ファイルが存在するディレクトリへのパスを抽出するにはどうするのでしょうか?
文字列操作関数で検討していますがいまいちです。
_tsplitpath
>>336 PathStripPathだったか、PathRemoveFileSpecだったかとにかくPath系の
APIでがんばる。
Java使いなんですが
はじめてC++をやる場合、オススメの参考書とか勉強方法ってありますか?
Cができないとダメな本なら持ってるんですが、そもそもCがわからないし
すぐC++を覚えないと会社クビになりそうだし。
環境はVC++って言ってましたが、6なのか.NETなのか不明なのが最悪。
>>339 Java使いならJava使ってたほうがいいよ。
くびになる前に転職考えたほうがいいような気がする。
341 :
331:05/03/06 02:43:45
>>337,338
解決しました、本当にありがとう御座いました。
>>340 転職したばかりの会社での最初の仕事なんです
前の会社は倒産寸前なので逃げました
漏れがC++を勉強したときはCとC++を同時に勉強していったよ。
基礎からやって飽きて流し読みしながら行き当たりばったりで。
Visual Studio 2003でC++を使っています。
VC6と違って、Ctrl + Shift + '8' を押しても
エディタにタブや半角スペースといった記号が表示されません。
空白を表示させるには、どうすればよいのでしょうか。
編集 -> 詳細 -> スペース(ry
>>339 javaがわかるなら楽勝でしょう。最初のうちは
ちょっと混乱するだろうけどね。
というか、プロがする質問には見えないんだけど……
>>339 Java使いでC++になって分からない(混乱する)所と言えば
メモリ管理とかポインタ関係か・・? 最初に詰まるのは文法かも?
そもそも、Java使いと言ってるけれど・・必要十分に使いこなせてないって印象を受けたのだが・・<プロの発言に聞こえない orz
Cを知ってる方がC++の習得は早いだろうけど、無くてもC++やりながらで問題ないと思う。
てか、会社にC++の参考書なり何なり無いのか?
とりあえず、明日会社で上司や先輩に相談して書籍を薦めて貰うのが良いかと
>>339 取りあえず林 晴比古の入門書でも読んだら?
VC6.0 Pro なんですが、以下のソースがコンパイル通らなくて困っています。
#include <stack>
typedef std::stack<long>STACK_TYPE;
class CHoge
{
STACK_TYPE m_stack;
};
スタックを扱いたいのですが、typedef のところで
「error C2039: 'stack' : 'std' のメンバではありません。」となってしまいます。
どう記述すればいいのでしょうか。宜しくお願いします。
typedefの所が悪いんじゃなくて、それより上が悪いんじゃないの?
他の #include が影響してるとか。
ちなみに、私の環境では通った。
>>351 どうもありがとうございます。
もうちょっと調べてみます。
今ね、Doc/View無しのMDIアプリ作ってるんだけどなんか変だ。
vc++にマーカーのような機能はありませんか?
ある行に印をつけて置いて、別の所に移動した後、
すぐにそのチェックした場所に戻るような機能が非常に欲しい。
エディタ
ブックマーク発見。
356 :
デフォルトの名無しさん:05/03/08 17:25:44
char[10]の配列に入った数値をint型にしたいのですが、出来るのでしょうか?
>>357 char[10]の配列に入った文字列
ではなく
char[10]の配列に入った数値
だから違うのではなかろうか?
359 :
デフォルトの名無しさん:05/03/08 18:40:27
エディットボックスコントロールを、"複数行"・"改行を許可"に設定して、
プログラム側からエディットボックスに文字を書き込んでいます。
XPで動作させると思った通りに動くんですが、
2000で動かすと改行するときに"・"がついてしまいます。
改行自体はできるのですが、行末に"・"がつくのが見苦しいと感じています。
どのようにしたら、"・"が取り除けるでしょうか。
ご存じの方いましたら、教えてください。
環境:Visual C++ 6.0, Windows2000
361 :
359:05/03/08 18:49:10
0D 0A で。
363 :
デフォルトの名無しさん:05/03/08 20:07:24
\r\n
364 :
デフォルトの名無しさん:05/03/09 18:32:34
>>364 プリコンパイル済みヘッダを検索しなきゃいい
366 :
364:05/03/09 18:41:00
>>365 >プリコンパイル済みヘッダを検索しなきゃいい
どこをいじれば、プリコンパイル済みヘッダを検索しないようになりますか?
368 :
364:05/03/09 18:50:59
>>368 あぁすまん、プロジェクトメニューの一番下にある「なんとか」のプロパティだね。
まさかその程度のメニューも追えないほど終わっていると思わなかったから書きそびれたよ。
370 :
364:05/03/09 18:56:26
つか、「プロジェクト」→〜〜のプロパティーにありました。
どうも有り難うございます。
ジョイパッドの検知するAPIと、
ジョイパッドを押している事にするAPI(SendMessageみたいな)は何ていうやつですか?
ゲーム製作板へ
373 :
364: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;
}
374 :
364: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);
}
375 :
364: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' に変換しました。データが失われているかもしれません。
と、エラーになります。 どうしたらいいでしょうか?
どっちに書き込もうか迷ったんですけどね・・・
すいませんでした じゃああっち行ってきます
>>364 リンク先があるならコピペすんなよ
明示的にキャストしろって言われてるんだから、キャストすれば良い。
GetStockObject(WHITE_BRUSH);
(HBRUSH)GetStockObject(WHITE_BRUSH)
return (msg.wParam);
↓
return ((int)msg.wParam);
379 :
364:05/03/09 20:18:46
380 :
364:05/03/09 20:19:43
>>378 おお、有り難うございます。試してみます。
ついでに言うとstatic_castとreinterpert_castも覚えておいてほしい。
382 :
364:05/03/09 20:31:34
>>378 ご指導の様に書き換えると、以下のミスになりました、
更なるご指導お願いします。
LIBCD.lib(crt0.obj) : error LNK2019: 未解決の外部シンボル _main が関数 _mainCRTStartup で参照されました。
Debug/sample01.exe : fatal error LNK1120: 外部参照 1 が未解決です
コンパイルの仕方が悪い
環境が判らないと、それしか言えない。
384 :
364:05/03/09 20:50:20
385 :
364:05/03/09 20:52:37
最終的には、SHBrowseForFolder、FindFirstFile、FindNextFile、
FindClose、CreateFileを使いこなしたいんです。
多分プロジェクトが、
WIN32コンソール・プロジェクトになってるのかと。
ウィンドウプログラムはWIN32プロジェクトで作らないと。
387 :
364:05/03/09 20:56:31
とりあえず、IDEを使ってる物として、
コンソールとウィンドウを切り替えるのは、
構成プロパティ→リンカ→システム→サブシステムを
"Windows (/SUBSYSTEM:WINDOWS)"にすればいい。
389 :
364:05/03/09 21:08:48
つか、無事コンパイル&実行、出来ました。
教えてくれた皆さん有り難うございました。感謝します。
390 :
364:05/03/09 21:16:41
調べてみたらばそうなってました。 有り難うございます。
>>388
>>372 関係ないだろ
ゲームプログラム板じゃねーんだぞゴルァ
Win32 Debugではちゃんと動いてたのにWin32 Releaseにしたらちゃんと動かなくなる、なんてこと普通あるの?
珍しい事じゃない。
コンパイルオプションもリンクオプションも違うし
変数の初期化のされかたも違う。
Release側の設定をDebug側に写してやってみ。
>>392 のようなことがあって、debugが大変だったな。最近ではもっぱら Release Mode だよ。
逆に Release ではOK、しかし Debug では落ちたり、というのも結構あるのかな?
要はプログラムの質が低いと。
そろいも揃って阿呆ばかり
>>392 Debugで動くのにReleaseで動かない状況っていうのは、
90%以上の確率で初期化してない変数を利用している。
5.0ってコード入力サポート機能ないんだな。
どうしよう。もうだめだ。
入力サポートって言っても
頭から補完してくれるわけじゃないから
全然ないよりはあった方がいいかなと言う程度
VC2005βを使えばいいじゃない。
2005に比べたら2003も嫌になる
マウスの座標取得する関数思い出せない。
GetCursorPos
事前に指定した座標を自動的にクリックするプログラムを書きたいのですが、
クリックを発生させるAPIが見つかりません(涙)。
ご存知の方教えてくだされ。
環境はVisualC++ 6.0です。
鮮度めっせーじかぽすとめっせーじでいいのでは?
mouse_event?
メインウィンドウにの背景に画像を表示させて、
その上にボタン等のコントロールを配置、
というインターフェースを実装しようとしています。
が、WM_PAINTに画像表示コードを書くと、
ボタンの上に画像がかぶさって、見えなくなってしまいます。
うまいこと、画像の上にボタンを表示させたいのですが、
どのようにすべきなのでしょうか。
ウィンドウ、コントロール等はCreateWindowの手書きです。
それはアルファチャネルを考慮したウインドウかな?
いえ、別段考慮していません。
XYZオーダー考慮すれば良いだけ
>>413 ありがとうございます。
期待通りの動作になりました。
415 :
デフォルトの名無しさん:05/03/12 23:21:38
Visual C++といえどもメニューやダイアログボックスはリソースエディタで
VBみたいに編集して作るのが普通なんですか。
気に入らないならダイナミックに作ってください
ウィンドウの形状を指定してウィンドウのサイズを取得する関数教えてください。
〜Adjust〜みたいな名前だったような気がします。
AdjustWindowRectEx ?
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(){}というコードを入れることによって対処してますが
何か違うような気がします。
知恵を貸してください。
「折り畳み」を定義してくれ
>>420,422
.NETスレいったほうがいいと思うよ。
へたれたIDEなんぞ使わずに、まともな折り畳み機能のあるエディタを使えって話かな?
つーか、別に気にするほどのことかいや。
縮めたいところを選択して
右クリック -> アウトライン -> 選択範囲を非表示
じゃあかんの?
VC.netってどうやって*.libライブラリのリンクするんですか(?_?)/
そんな項目が探してもみつからない・・・
>>426 ソリューションエクスプローラでプロジェクト名を右クリック
リンカ、入力、追加の依存ファイル
>>425 それだとタブ(ファイル)を閉じただけで非表示した場所を忘れてしまうんだよね。
>>423-424 どうもできないっぽいしあきらめます。
スレ微妙に違ってスマソ。
そんなにしばしば折り畳んでしまいたいような情報なら捨ててしまえばいいのに。
>>429 Doxygenに使ってるからあかんのだ。
ゲームスレみたいな所なのでここで質問。
RPGやパズル、シミュレーションなどで、
独特なキー入力(十字キー)のやり方がありますよね。
キーを軽く押したら、1マス動いて、
しばらく押しっぱなしにしたら、そのままスムーズに押した方向へカーソルが
動くやつ。あれはどう実装すればいいのでしょう?
できればアルゴリズム or コードでお願いします。
誤爆。スミマセン。
>>431 アルゴリズムも何も
>キーを軽く押したら、1マス動いて、
>しばらく押しっぱなしにしたら、そのままスムーズに押した方向へカーソルが動く
をそのまんまコードにすればいいんだけど。
キーが押されてる時間を見て、
押された時と、一定時間後だけ動かすようにすればいい。
>>433 >431はDirectXスレで聞いてますから。
>>430 Doxygenなら尚のこと、別ファイルにすればいいのに。
436 :
デフォルトの名無しさん:05/03/14 20:23:44
Visual C++ .NET Standard Version 2003 アカデミックパック
↑を購入しようと思うのですが、何か制限やアクティベートの必要はあるのでしょうか?
Visual Studio .NET 2003を入れたのですが、
Visual Studioからでなく、Visual C++を一発で起動する
ショートカットを作りたいのですが、どうすればいいのですか?
nmake.exeでも起動するようにバッチファイルでも作れば?
442 :
sage:05/03/15 18:22:12
なるほど。
443 :
デフォルトの名無しさん:05/03/15 19:28:07
VC++で作成したダイアログが、ある時を境に一回り小さく表示されるようになって
しまいました。
コントロールもフォントも全て約3/4のサイズで表示されます。
リソースビューを開いた段階で既に小さくなっています。
同じソースを使用しても他のマシンでは正常に表示されるので、恐らく描画用の
DLL(?)が何かの拍子に置き換わってしまったのではないかという気がしています。
お心当たりのある方がいらっしゃいましたらご教示下さい。
宜しくお願い致します。
パソコン買い換えれば無問題
くだらない質問は迷惑です
>>445 いえ、そういう訳ではなく、元々800×600[px]のサイズだったものが600×450[px]くらいに
表示されています。
それに合わせてフォントも約3/4になっているので、ぱっと見は違和感がないのですが、
よく見るとバランスがおかしいです。
447 :
デフォルトの名無しさん:05/03/15 20:12:55
ダイアログに合わせてフォントサイズが変わったんじゃなくて
フォントサイズに合わせてダイアログが変わったのだろう
VC++.net2003なんですが
インクルードする時、stdio.hならインクルード出来るんですが
iostream.hでのインクルードが出来ないんですがどうしたら
いいですか?^^;
#include<iostream>
>>447 故意にフォントサイズを変えたりはしていません。
閉じてまた開いたら勝手に変わっていたといった感じです。
見直してみたら、全てのフォントが変わっていた訳ではありませんでした。
描画用のDLLの置き換わり(?)などによる現象ではないということでしょうか・・?
>>450 OSの問題の可能性が高い。
本当にVCの問題なのかはっきりさせてから質問し直した方がいい。
>リソースビューを開いた段階で既に小さくなっています。
だから、
>>447に書いてあるじゃん
コントロールじゃなくてダイアログそのもののフォントを変更してしまったんだよ。
リソースエディタでダイアログのプロパティを見ると
フォントを設定出来るところがあるでしょ。そこでフォントのサイズを
変更すれば、設定したフォントに合わせてダイアログのサイズも変わるよ。
>それに合わせてフォントも約3/4になっているので
9ptを8ptにしたとか、まさにそういうこと。違うって?
じゃあ、もう一つ教えよう。リソースの種類が日本語になっているか他の
言語になっているか確認しろ。リソースの言語を変更するとフォントも
変わるよ。
454 :
デフォルトの名無しさん:05/03/15 23:28:50
VS2003pro使ってるんですが
Win32のメインウィンドウだけはリソースエディタみたいなので
ビジュアルにGUIを設計できないんですか?
>>454 もちつけ、VCプロジェクトで何を選んだらこうなったをいわないと
わからん
>>455 Win32プロジェクト->Win32
です
>>456 ごめん、初めて使ったが、できないみたい.
フォームアプリケーション以外は無理だな
新たにダイアログを作ってメインウィンドウのクライアント領域に貼り付ければ
似たようなことはできる。
ふつーはメインウィンドウを不可視で作って
代わりに一つ目の子ウィンドウをメインっぽく使う
460 :
デフォルトの名無しさん:05/03/16 02:25:35
デバッガでライトアクセスブレークは設定できないのでしょうか?
VisualStudio.Net 2003を使っています。
>>451>>452 なるほど、OSの問題の可能性ですか・・
ちなみに今使ってるOSはXPのSP2です
しかし昨日までは問題なく表示されていましたし、現時点で正しく表示されるマシンも
SP1だったり2だったりしますが、全てXPです
>>451 だから、ダイアログのプロパティでフォントの設定が変わっていないか確認しろってば。
>>447>>451>>453>>451、他
画面のプロパティやダイアログのプロパティを見ても元々設定したまま
だったので途方に暮れていましたが、
コントロールパネル>フォント
を見てみたら怪しいファイルが幾つか紛れていたので、削除したところ
元通りになりました。
フォント名のところに(#Set6)という風に書かれていたので、推測ですが
画面のプロパティで設定したものよりも優先されるシステムフォントのような
位置づけのフォントだったのではないかと思います。
※#Set6というのはうろ覚えです。またおかしくなったら怖いので入れ直して
いません・・。
どうも有難うございました。
VC++2003のデバッガなんですが
何らかの原因で実行行を指すカーソルやブレークポイントが
ずれて表示されてしまう現象がでます。
これはどんな原因でなってしまうのでしょうか?
ソリューションのリビルド等試しても直らないので
デバッガが非常に使いにくくて困っています…。
最適化が掛かってしまってるとか。
>>466 実行してからソースを修正してもずれることがある。
>>467 設定はデフォルトから弄ってないです。
先ほど、プロジェクトを一回消去して作り直したのですが
直りませんでした…。
よもやReleaseビルドじゃあるまいな。
>>470 いえ。Debugビルドです。
昨日まで何ともなかったんですが、気づいたらずれてました。
今、直りました。
変なコードでも混入したのかと思い、一度別のテキストエディターにコピーしてから
VCにコピーしなおしてみたらずれなくなりました。
実はコンパイルしなおせばいいだけだったとかね。
何となく予想がついたので確認してみたところ再現出来ました。
ソースコードにCR+LFとCRのコードが混ざっていたのが原因みたいです。
VSのエディターはにCR+LFとCRどちらでも改行表示されるのですが
デバッガーのカーソルはCR+LFのコードしか見ていないので実際の位置と
ずれてしまったようです。
昔のHELPファイルからAPIの引数をコピペしたときにCRだけのコードが混ざったようです。
デバッガーがCR+LFしか見てくれないなら
エディタ側でCR+LFに変換しくれてもいいと思うのですけどね…。
勝手なことされちゃ困る
変換されるのが普通だろ。
Microsoftの改行仕様なんだから。
LFだけの場合も変換しないのはUnixでリビジョン管理をしていると助かる。
しかし、VisualStudio内で改行してしまうとCRLFになってしまうから、
結局フィルタリングする羽目になる。
質問です
VC++2003のには、変数の読み書きを監視するウォッチポイント
のような機能はないのでしょうか?
あとメモリの表示も各進数でしか表示できないのですが
指定した構造体で表示したりできないのでしょうか?
479 :
デフォルトの名無しさん:2005/03/22(火) 21:07:43
VC++.net非2003を使っているのですが、
これに付属のヘルプを見てるとよく英語のヘルプが出てくるのですが
これって日本語にならないものでしょうか?
>>479 つ[翻訳サイト]
英語読めるようになったほうがいいよ。プログラマやってるなら必ず必要になるから。
481 :
デフォルトの名無しさん:2005/03/22(火) 21:18:13
そうですか、英語しかないんですね。
必死に読むしかないか・・・。
VC7(Version 7.0.9486、WinXP)で、
>>482 を実行すると "AAA未定義" と表示されます。
>>483 を実行すると "AAA定義済" と表示されます。
これに気付くのに3日間かかってしまったんですが、
この結果は正しいのでしょうか?
ただの知識不足?
483 :
482: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;
}
484 :
482: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;
}
485 :
482:2005/03/23(水) 00:05:33
>>485 なんでかはわからんけど、プリコンパイル済みヘッダが悪さしてるみたいだね。
offにすると期待通りになる。
487 :
482:2005/03/23(水) 00:42:23
>>486 ほんとだ、正しく出ますね。
ありがとうございました。
>>482 つーか、#include "stdafx.h"はただのインクルード行ではなく、
プリコンパイルの目安なんだからそれよりも前になんか書いたらリビルドしなくちゃダメ。
ダイアログでテキストボックスなどのようにキャプションがないコントロールに関してALT+何かという操作をするにはどうすればいいのでしょうか?
またVBのようなTabIndexはどこで設定するのでしょうか?
質問ばかりですいません
>>488 リビルドしても"AAA未定義"が出力されちゃうのよ。
#define AAA
が無視されてる感じに。
#include "stdafx.h"
の上か下かで変わるのかね?
>>491 int a = 1;
#include "stdafx.h"
int a = 2;
プリコンパイル済みヘッダが有効だと、こんなのも通ってしまう。
上のaが無かったことにされてる。
493 :
491:2005/03/23(水) 11:37:08
ググって調べてみたけど、
プリコンパイルヘッダより前は全て無視されるみたいだね。
まあ確かにプリコンパイルヘッダより前に記述したらおかしくなるから
正しい仕様とは言えるけど。
VC++ってすげーなw
>>489 前半:意味不明
後半:ダイアログエディタでCtrl+D
496 :
482:2005/03/24(木) 03:18:13
コンパイラオプション/Yufilenameの説明に書いてたんですね。
調査不足でした。
497 :
489:2005/03/24(木) 06:19:42
>>495 ありがとうございます
前半は・・・例えばチェックボックスのキャプションに
CHECK(&C)ってかけばALT+Cでいける、みたいなのをキャプションがないテキストボックスにはどうすればいいのでしょう?
ということでした すいません
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
の自作です。
>>498 Toolkitスレがあるのでそちらで聞いたら?
つーか、そのレベルだと使いこなせないと思われ。
500 :
デフォルトの名無しさん:2005/03/25(金) 01:05:06
ねえねえ、DLL内でnewしたポインタ値を使って、
呼び出し側(exe側)でdeleteしたらいけないって知ってました?
私は7年目ですけど、今初めて知りましたよ...orz
502 :
デフォルトの名無しさん:2005/03/25(金) 12:26:03
なんでー?
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
>>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ができるとは限らない。
>>503 実装が違うって具体的には?
new deleteの手法が違うってこと?
自分でも言ってる意味がわからないです...orz
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
_tprintf(_T("日本語\n"));
return 0;
}
UNICODEにすると、ちゃんと動かない!
最初に
_tsetlocale(LC_ALL, _T(""));
したら動くようになったけど、そんな約束、どこに書かれてるよ・・・orz
MBCSなら何もしなくても「日本語」が出るのにさ・・・。
>>510 例えばDLLはコンパイラAで作り,EXEをコンパイラBで作ったとする。
new/deleteの実装がコンパイラAは内部でHeapAlloc/HeapFreeを使っていて,
コンパイラBはGlobalAlloc/GlobalFreeを使っているという実装だったら……,と考えてみたらいい。
あるいは共に同一のコンパイラを使っていたとしてもそれぞれのスタートアップルーチンで
独自にCreateHeapしてそれを使っていたとしたらやっぱりアウト。
MSDNを「UNICODE」で検索してるとそんな記述が見つかる
>>510 new/deleteだけじゃないぞ。
C++のクラスも、またいで使うべきではない。
std::string・MFCをスタティックリンクしたCStringをDLLからEXEに渡す・その逆とか。
ときどき見かけるよね。
517 :
511:2005/03/26(土) 11:23:21
>>513 MSDNライブラリのprintfの解説のプログラム例で、
setlocale(LC_ALL, "Japanese") ;
が書かれていました。
printfなんて知ってるよ、と高をくくって、よく読まなかったのを反省してます。
>>514 wmainCRTStartupに変更してみましたが、setlocaleは不要になりませんでした。
>>516 漏れは、
DLL内のクラスを継承した、EXE内の派生クラスの仮想関数を、
基本クラスから呼んでいるのを見た時は、ぞっとした。
まぁ、またいではいけないと言われたら、MFCすら使えないわな。
行儀悪くなくても、MFCの実装はDLL内にあるんだからさ。
519 :
518: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はダメだなんて
なんかへんなのーーー。
>>520 DLLにdeleteしてもらえばよかろう。
プロトコルではなく決まり覚えろばか者
延髄切りしたい人多い
525 :
デフォルトの名無しさん:2005/03/26(土) 16:38:18
めんどくさいな。
527 :
デフォルトの名無しさん:2005/03/26(土) 16:56:57
VCについているサンプルコードを利用して自作のプログラムを書いても良いのでしょうか?
著作権とかそこらへんはどうなっているのでしょう?
>>527 ここでいいよと言われたからって、それを信じてもいいのかな?
あとで訴えられても知らんよ。
529 :
デフォルトの名無しさん:2005/03/26(土) 17:15:42
まんまパクリならばれるだろうけど
特許取得されてるアルゴリズムとかじゃないかぎり
ほとんどの場合はばれようがない。
>>521 変じゃないぞ。
土地に例えるとだな・・・
printfがやっているのは、指定された番地の土地に何があるか見に行くこと
deleteがやっているのは、指定された番地の土地の所有者の名義を帳簿上で書き換えること
前者は誰が見に行っても同じだが、
後者は、名義を管理している人以外がやったらダメでしょ。
ほげー。リリースビルドだと何も起きないんだよな。
ってことはメモリリークしてるってか。やべーな。
もう遅いや。放っておこう。
VC++.net2003を始めて勉強しようかと思うのですが
MS関係以外で、定番サイトは無いのでしょうか?
ざっと検索してみた所、意外に無かったので・・
533 :
デフォルトの名無しさん:2005/03/26(土) 23:56:09
使用どころか、再配布まで許可されてるぞ。
ちゃんとRedist.txtに書いてあるぞ。
それは一般まで含まれていないというオチとかない?
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画面が閉じられると 容赦なくワトソン君を出してくるのです
なんとかなりません?長文すみません
ひさびさにワロタ
ネタとしか思えんな
読むのもめんどくさい
FTP用のDLLを探してくればいいんじゃないかなぁ
>535
一から作り直す。
FTPの仕様さえ判っていれば1日で作れると思うが
>>535 5年も社会人やってる人間がこんな白痴的うんこ文書書くわけないだろ。ネタ決定。
542 :
デフォルトの名無しさん:2005/03/27(日) 11:27:26
その前に5年もやってたらそのぐらいのプログラム一日で書いて下さい
543 :
535:2005/03/27(日) 12:43:56
おまいら、そんな冷たい事いわないでなんとかなりませんか?
何を期待してるのか知らんが、自分で何とかしなきゃならんだろ。
545 :
535:2005/03/27(日) 13:27:08
期待はしておりませんが、解決方法、対策等を有能な方
よりアドバイスいただければ早期解決できるものかと希望をもってます。
実は今の作業完了を目処に今のプロジェクトを抜けたいと考えています。
当方 A型のため、中途半端で会社を去りたくないので何とか
パパっと解決したいと考えます。ご協力よろしくお願いします。
546 :
535: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用にすっきりまとめたいのです。
そのマイナーな方法を助言いただきたく思うのです。
548 :
デフォルトの名無しさん:2005/03/27(日) 16:27:07
質問です。
VC++ SDKで開発をしています。
別のアプリケーションのテキストウィンドウの
キャレットの位置を取得して、
その位置にポップアップメニューを出したいと考えています。
BOOL GetCaretPos(
LPPOINT lpPoint // address of structure to receive coordinates
);
というのがあったのですが、
自分のウィンドウのキャレット位置しか取得できませんでした。
何か良い手法はないでしょうか?
デバッガの使い方とか表示の意味が良くわからないんですが
なんかいいサイトないですか?
>>535 5年も何やってたんですか?(マジレス)
551 :
535:2005/03/27(日) 20:08:52
煽りや冷やかしは要らないので
本当に技術ある方よろしくお願いします
5年選手のネタレスに煽り以外何を書けと?
>>551 マジレスすると、
>>539-540が出来ないんだったら上司なりに相談するべき。
ここで説明できる量じゃないし、そんな暇な奴が居るとも思えない。
ちょっとした仕事だ。そしてそれは君のやることだ。
554 :
デフォルトの名無しさん:2005/03/27(日) 20:37:18
処理も動いており 不具合のオオヨソの原因がわかってる内容に対して
改めてつくり直すとか別の手法を検討するなどあまりにも無意味じゃないですか?
イチからジュウ教えてくれと言ってる訳じゃなく
問題点と改善法を見出し
それについて助言を求めているのです。
あなたも素人じゃないなら不必要に
質問の回答とはほど遠いようなアドバイス等するべきじゃないんではないですか?
> 問題点と改善法
・問題点
あなたは根本的にこの仕事に向いていない
・改善法
いますぐやめるべき
マジレス。
せんせー>549
はネタじゃないんです、なんかいいサイト無いですか?
557 :
デフォルトの名無しさん:2005/03/27(日) 20:55:22
もうわかりましたから
とりあえず質問に対する技術的な
回答をおねがいしますよホント。
vcが苦手なんであればすっこんでいてくだい。
よろしくおねがいします
誰か良いVC++.netサイトを教えてちょ
>>532
>>559 何を知りたいんだよ。
IDEの使い方ならマニュアルでも読め
>>559 何が良いかはその人の持っている技術力による。
良いサイトが見つけられないなら、もっと探せ。
>>560-561 了解です。
ネコでも・・みたいなサイトが無いかな、と思って。
定番サイトって無いもんなんですな。
563 :
561:2005/03/27(日) 21:57:37
>>562 ネコでもほど親切じゃないが、探せばたくさんある。
564 :
デフォルトの名無しさん:2005/03/27(日) 22:00:34
>>562 スタートページからいけるサイトが意外と使える。
565 :
561:2005/03/27(日) 22:03:19
VC++.NETで聞いているってことは、マネージドC++か?
566 :
535:2005/03/27(日) 22:20:58
理解しました。自分で何とか解決しようと思います。
多少イライラしてましたので心無い発言もしてしまいました。
本心では無いのでお許しください。
すいませんでした。
皆さんのおっしゃる通りです。
五年間いろんな壁をのりこえて来たので
今回もなんとか自力でがんばります。
親身に回答いただきありがとうございました。
5年間もの間、度々こんな壁にぶつかってたのか…
南無…
>>549 マニュアル嫁
>>535 >>554や
>>557もお前さんか。
作り直したほうが早くて確実だから、作り直しを勧めているひとが大勢いるわけですよ。
しくみもわからずに人様のソースを盗むようなことやってるから、5年経ってもセンスがないのよ。
人様のソースを盗むのも悪くはないが、ちゃんとその中身を読んで理解して、
そのケースに最も適切なソースを盗むようにしようよ。
人様のソースであっても、盗んだ以上、その品質の責任は自分にあるんですよ!!!
570 :
569:2005/03/28(月) 02:43:42
というだけではあれなので、もう少しアドバイス。
とりあえずVC++にくっついてくるMFCのWinINetクラスはどうよ。
VC++にマニュアルもサンプルもついてるんだからさ。
571 :
デフォルトの名無しさん:2005/03/28(月) 04:20:02
VCのコンパイラは自動的にSIMDを利用してくれるのでしょうか?
たしかインテルのコンパイラは自動的に利用してくれたと思うのですが。
> 今回もなんとか自力でがんばります。
お ね が い だ か ら 辞 め て く だ さ い
その「自力でがんばった」コード誰が保守すると思ってるの?ねえ?あなたが一生責任持って保守してくれるの?ねえ?ねえ?
>>571 VC7.1 (VC7も?) の場合、
コンパイルオプションを設定すれば、勝手に使ってくれるようになったはず。
574 :
デフォルトの名無しさん:2005/03/28(月) 10:51:13
>>573 その場合、例えばsseの入っていないパソコン上でも実行可能な物を作ってくれるのでしょうか?
それともsseの入っていないパソコンではエラーとなるようなものができてしまうのでしょうか?
WM_SYSCOMMAND をプロシージャの中に入れておくと、
WM_COMMAND メッセージで指定している部分を処理してくれないのですが、
一体どうすればいいでしょうか?
Visual Studio .NET 2003のウィザードでWin32 プロジェクトを作って
すぐF5でデバッグ実行して終了すると変な例外が出てるんですが、こういうものなんでしょうか。
> NullpoProject.exe の 0x77cfe062 で初回の例外が発生しました : 0xC0000005: 場所 0x25ad3f8c を読み込み中にアクセス違反が発生しました。 。
> NullpoProject.exe の 0x77cfe062 で初回の例外が発生しました : 0xC0000005: 場所 0x25ad3f8c を読み込み中にアクセス違反が発生しました。 。
> プログラム '[3248] NullpoProject.exe: ネイティブ' はコード 0 (0x0) で終了しました。
>>575 コードが悪い
case がおかしいとか、break が無いとか。
>>576 コードが悪い
自動生成されたコードだけで出るんであれば、
環境が悪いんじゃない?
>>575 return TRUE;
return FALSE;
return DefaultWindowProc();
この違い分かってる?
case WM_SYSCOMMAND:
return TRUE;
違った
こっちだ
case WM_SYSCOMMAND:
return DefWindowProc( hpwnd, msg, wp, lp ) ;
おぉ・・・ほんとだ、正常に動きました。
うえの3つの違い、全くわかりません。ダイアログボックスとかでは、
TURE とか FALSE になるんだと思ってました。
もしよろしければ、お教え願えませんでしょうか。
583 :
デフォルトの名無しさん:2005/03/28(月) 12:41:33
直ったついでに聞きたい気持ちは分かるが
オウム返し的な質問は歓迎されない
ドキュメントくらいは読んだ方が良い
584 :
デフォルトの名無しさん:2005/03/28(月) 12:47:32
>>584 ついでに言っとくと、
WndProc コールバックや、そこから DefWindowProc を呼び出す
っていう発想は、オブジェクト指向の継承とポリモフィズムの実装そのもの
WinAPI が作られた当時は C で頑張っていたんだが、その名残みたいなもの
>>574 残念ながら、CPUによって場合分けするのは、プログラマの仕事。
>>576 0x77cfe062のアドレスにロードされたモジュールは何?
あと、デバッガの設定で例外が出たらブレークするように設定して、コールスタックみてみ。
VCのコンパイラはインラインアセンブラでSSEとか使うとちゃんと
使えるようになるだけで自動的にSSEとかMMXのコードを吐いてくれる
わけではない。要するに、単に対応しているだけだ。
インテルのコンパイラは最適化によっては自動的にそういうコードを
吐いてくれるが、最適化しやすいようにソースコードを書いておかないと
あんまり期待出来ない。
どちらを使うにしろ、結局はインラインアセンブラで頑張るか、
fvec.hとかのライブラリでSSE用のソースコードを書くとかすることに
なるだろう。
>>587 嘘つき〜
VC7以降はfloatやdoubleの計算にSSEやSSE2を使ったコードを吐きますよ。
しかも、インラインアセンブラで書くのは良くない。
intrinsicを使って書けば、コンパイラが最適化までしてくれるぞ。
ただし罠があって、intrinsic使った部分は、関数のインライン展開を設定すると、最適化されなくなる。
>>588 587じゃないけど、関数毎にSSE最適化使うか設定出来るのか?
>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に付属しているのですか?
淫乱は付いてこない。
595 :
デフォルトの名無しさん:2005/03/29(火) 17:22:43
どのアセンブラがよいですか?
インラインアセンブラで最適化効率悪くなるって
どんな組み方するとなるんだ?
今の所はそんなことないし、よく分からん。
597 :
デフォルトの名無しさん:2005/03/29(火) 18:09:46
初心者の場合、下手に淫乱アセンブラで書くより、コンパイラに任せた方が、最適化されることが多い。
つい最近VC++を始めた者です。
指定したファイルを読み込み、処理結果をエディットボックスに表示するという、
ダイアログベースの簡単なプログラムを作っています。
ファイルを1行ずつ処理しながら
m_strEdit = m_strEdit + buf;
のようにメンバ変数に処理結果の追加を繰り返し、最後に
UpdateData(FALSE);
としてダイアログを表示しています。
これで一応動作はするのですが、入力ファイルサイズに比例して出力も大きくなるので、
50KBぐらいになると表示するまでに時間が掛かって「あれ?動いてない?」という感じです。
処理速度を上げるにはどうすればよいでしょうか?
アドバイスよろしくお願いします。
599 :
588:2005/03/30(水) 02:27:08
>>589 関数ごとに設定をわける意味はないよ。
同じソースファイルをマクロ定義で関数名など切り替えて、
コンパイラオプション変えて2回コンパイルするのよ。
>>590 お前さんはVC6やVC7でSSE2を使ったコードを書いたことあるのか?
漏れはあるぞ。
>>591 7.0はダメなのか・・・知らなかった。
速効で7.1に無償アップデートしちゃったから、試したことなかったよ。
俺のコードが下手なのかもしれないが、
自前でインラインアセンブラで書いたコードよりも、
intrinsicを使ってコンパイラに最適化させたコードのほうが速かったんですよ。
つーか、自前で書いたほうが速い人って、いったいどんなコード書いてるの?
アセンブラで凄いコードを書いてるか、C/C++で劣悪すぎるコードを書いてるのか、どっちなのよ。
>>592 インラインアセンブラで書けば、アセンブラで書いた部分だけは、
人間の手作業でコンパイラより速いコードを書けるかもしれないけど、
その前後のC/C++で書いたコードのコンパイラの最適化を阻害するんですよ。
実際に比較実験をしたからこそ言える話でしてね。
600 :
588:2005/03/30(水) 02:36:34
>>596 >>599の終わりに書いたけど・・・
例が悪いけど、
nHoge += 10 ;
_asm{ 何か }
nHoge += 10 ;
のようなコードで、nHoge +=20 にまとめてくれなくなります。
こういう露骨な例だけでなく、かなりの最適化が行われなくなります。
混ぜないで全部アセンブラで書く人には関係ない話ですけどね。
>>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ライブラリにスタティックリンクに設定
>>607 >609に補足。デバッグ版を配布しちゃいけません。
>>598 >ファイルを1行ずつ処理しながら
が何してるかわからんけど、一気に読み込んで一気に処理するとかできんの?
612 :
デフォルトの名無しさん:2005/03/30(水) 11:47:55
あのですね、初歩的なことだったら申し訳ないんですが、スタティックテキストのサイズを変更したいときはどうすればいいですか?
>>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倍くらいの実行時間でした。
614 :
612:2005/03/30(水) 11:56:17
ごめんなさい、自己解決しました・・・・
>>598 たかが50KBのファイルを読み込み処理するのに、時間がかかるなんてことはありえないけどね。
いつの時代のPC使ってるの?って突っ込みたくなるかも。
486時代?
616 :
601:2005/03/30(水) 14:56:41
>>613 >前半
すまん早とちりしてた。
>後半,600
関数内の話?
関数外の最適化に影響が出るって話だから、
そっちが気になっているんだが。
まあ、これ以上はスレ違いになっちゃうが…。
617 :
613:2005/03/30(水) 16:08:23
>>613 そんな使い方で遅くなるとか言ってたのかよ。
619 :
613:2005/03/30(水) 18:07:23
>>618 実際にはSSE2を使ってますが、
ここに例として上げるのは大変なので、
最もシンプルなものを例として選びました。
※ROLとRORが違うのは、RORのほうが微妙に速いからなので、気にしないで。
620 :
デフォルトの名無しさん:2005/03/30(水) 18:10:12
ウィンドウクライアント領域の座標を GetClientRect みたいに
相対座標じゃなくて、画面左上を(0,0)としてみた絶対座標で得たいのですが、
どうすればいいでしょうか?
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
625 :
607:2005/03/30(水) 21:23:05
回答ありがとうございました。
皆さんの回答を手がかりに、なんとか解決できました。
SDIのアプリ作ってるんですけど、
Scroll使ってもリストビューがそのままなのはどうしてでしょうか?
for(int i=0;;){}
int j;
int i=0;
while(){}
int j;
どこが問題でしょうか。
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です
>>630 自分で答を出しているじゃないか。「変化しない」ときにconstをつけずにいつつけるんだ?
632 :
デフォルトの名無しさん:2005/03/31(木) 04:04:29
>>631 レスありがとう
const が変化しないときに付けるのは分かってるんですが
ローカル変数はコンパイルした時、確かレジスタに値が設定されると思います
const をつけていると、定数となってその値が
メモリに設定されてしまうのではないかと心配なのです
メモリに設定されると、ロードする手間が増えると聞いた事があるのですが...
もしそうなら const を付けないで行こうと思っているのですが
>>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人
役員 代表取締役社長 金 鎭浩
代表取締役副社長 崔 弘林
副社長 菊地原 靖孝
取締役常務 野口 秀
取締役 堀江 貴文←←←←←←←←←←←←←←←***
(株式会社オン・ザ・エッヂ代表取締役)
MS-DOSのdir みたいな物を作りたいんで、_findfirst って関数を知ったんですが、
これだと、\\aaa\b\ という形式であらわされるパスにはアクセスできないんです
他にCFileFind とかいろいろ試したんですが、
どれもうまくいけないんで、どの関数を使えばいいんでしょう
637 :
デフォルトの名無しさん:2005/03/31(木) 08:29:19
>>636 WinAPIでよければ...
FindFirstFileとFindNextFileとを組み合わすしかなかったと思うたが
この二つで検索すればどっかにいいサイトあるから
他の方法ものっとるかも
>>636 \\aaa\b\の書き方出来なかったっけ?
\\aaa\\b\\*.* も駄目か?
駄目なら、_chdir使ってみ。
>>634 細かいことを気にするなら、それぞれをReleaseビルドでアセンブリ出力を見比べてみればよろしい。
const だからと言って、メモリに割り付けられるとは限らない。
>636はバックスラッシュをエスケープしてないんじゃなかろか。
たぶん636はUNCパスのことを言いたいんじゃないかと思う。
>>641 それが判ってないのは>638だけジャマイカ。
foo.bar
と、
foo::bar
の違いが分かりません。
VC++プログラムでは前者はあまり見ないんですが、もしかして使っちゃダメとか?
あと、オブジェクトのインスタンスはどこで作るべきなのか、ご教授ください。
645 :
デフォルトの名無しさん:2005/03/31(木) 15:52:17
構造体とクラス
>645
失礼、foo.barでbar関数の事ってありますよね・・・?
>>645 文脈も読めないなら書くな。
>>644 前者のfooはオブジェクト(実体)。後者のfooはクラス(または構造体)。
例えば、
struct Foo {
int func();
static int static_func();
} foo;
ならば、
foo.func()かFoo::static_func()で呼び出すことになる。
つーか、C++の基礎の勉強して来いや。
やっぱり基礎でしたか・・・・わかりました。勉強しなおしてきます。
で、ですね、最後に、インスタンスはどこで作れば良いでしょうか?
>>648 必要なところで。
インスタンスを作る≒変数を宣言するかnewを呼ぶこと。
コーディングとは一切関係なく、環境に関しての質問ですが、
Xkeymacsを使って、エディタのキーバインドをEmacs風にしていると、
Shift+Ctrl+Bとか、Ctrl+F5とかの元々VCに登録されていたショートカットが機能しなくなるのですが、
それを解決する方法ってありますでしょうか。
651 :
デフォルトの名無しさん:2005/03/31(木) 17:31:32
>>639 レス遅れてすみません
アセンブリ出力の比べ方がちょっと分からないですが
あとは自分で調べてみます
ありがとうございました
出戻りプログラマです。
VC++6.0使ってみたんだけど、APIの一覧ってのはヘルプに無いのかな?
本買わないとダメ?
昔はAPIバイブルなんてあったけど今もあるのかな?
>>652 MSDNがインストールしているなら
プラットホームSDKカテゴリに載ってる筈です
655 :
デフォルトの名無しさん:2005/03/31(木) 19:30:33
何がなんだか良く分からなくて、とりあえず
新VisualC++.NET入門とかいう本を買ったんですが、
さっぱりです・・・いい解説ページみたいのないでしょうか
>>654 あの...
どの解説本か分かりませんが初心者用の
.NETの解説本にはWinAPI一覧は載っていないのでは?
それにVC6と.NETは別物ですし
まずVC6よりWindowsAPIの参考書を買ったほうがいいと思います
とりあえずMSDNは
MSDNのディスクを入れウィザードに従って
標準インストールして後、VC6を立ち上げ
メニューのヘルプ->検索を選択、
キーワードにCreateWindowで探せば
プラットホームSDKにたどり着くと思います
後は、同僚の方に聞いていただくか
検索エンジンで調べたりして
ご自分で解決していただくしかないかと...
失礼かもしれませんがこれからも大丈夫なんでしょうか?
心配ですね...
657 :
デフォルトの名無しさん:2005/03/31(木) 20:35:33
|///~~| _______
|/// | → |////|
|________| |////|
~~~~~~
ある操作をした時、
ウィンドウを /// 部分と同じサイズに変更したいんですけど、どうすればいいでしょうか。
現在は、クライアント領域の幅と高さを保存していて、その値を用いて MoveWindow で
ウィンドウを動かしているのですが、それだと、期待した大きさよりウィンドウが小さく
なってしまいます。
Window をクライアント領域の幅と高さにあわせた移動をさせたいのです。
こういうことって、簡単に出来ないのですか?
やはり、タイトルバーの大きさを得て、枠の大きさを得て・・・とイチイチやっていかなければ
うまくいかないものなのでしょうか? このへたくそな説明で理解できる方どうか、ご教授ください ;;
>枠の大きさを得て・・・とイチイチやっていかなければ
イチイチやらんといかんと思うよ。大きさ変更枠はシステムで変えれるし。
>>657 MoveWindowはウィンドウ全体のサイズを設定するから
クライアント領域のサイズで合わせると
外枠の分小さくなるのは当然
GetWindowRect使ってウィンドウ全体の値を保存してみそ
>>569 変えたいのはクライアントのある領域の大きさでしょ?
クライアント領域の大きさをユーザーに決定してもらって、
その大きさに合わせて、ウィンドウのサイズも変更させたかったのです。
>大きさ変更枠はシステムで変えれるし。
これで納得できました。一つ一つサイズを得る方向で考えることにします。
レス下さった
>>659さんもありがとうございました。
662 :
デフォルトの名無しさん:2005/03/31(木) 22:07:43
ファイルを右クリック→プログラムから開く
で自分のプログラムはしらせるときにそのファイル名を取得するにはどうしたらよいでしょうか?
Microsoft Visual Studio .NET 2003
意味わかんない
665 :
デフォルトの名無しさん:2005/03/31(木) 22:30:59
666 :
デフォルトの名無しさん:皇紀2665/04/01(金) 01:37:51
VS.NET2003使ってます。
ボタンとかをXPスタイルにするのってどうやるんでしょうか
コモンコントロールマニフェストでググれ
668 :
デフォルトの名無しさん:皇紀2665/04/01(金) 02:08:56
newやdelete演算子をオーバーロードした場合の動作って、どうなるのでしょうか?
オーバーロードした処理に完全に置き換わるのかと思ったのですが、newをオーバーロードしてもコンストラクタはしっかり呼ばれるようで。
例えばnewのオーバーロードの中身を
int i = 0;
だけ。などまったく意味のない処理に置き換えたとしても、フリーストアへのメモリの確保なども従来どおり行っているのでしょうか?
なんかめんどくさい事わざわざやってる気がする
絶対必要なの?
普通にnew,deleteでいいんじゃない
下手に回りくどくやっても虫が湧くもとだと思うけど
671 :
デフォルトの名無しさん:皇紀2665/04/01(金) 04:07:08
PrintPreviewDialogの印刷を開始するボタンを無効にできませんか?
>>669 newをオーバーロードするとoperator newの中身を処理した後、
その戻り値をthisポインタにしてコンストラクタが呼ばれる。(newの結果もそのポインタになる。)
operator newの戻り値はクラスのポインタではなくvoid *となっているのは、
operator newを行った時点では(コンストラクタが呼ばれていないので)まだインスタンスは出来上がっていないから。
operator deleteは逆にまずデストラクタを呼び出してからoperator deleteが呼ばれる。
デストラクタを呼んだ後だからもはやただのメモリブロックを表すに過ぎないからこの引数もvoid *。
operator new[]/delete[]も同様。
もちろんhoge::operator new()とでもして呼べばそれはただの関数呼び出しと解釈されるのでコンストラクタは呼ばれない。
VCの話題か?
>>670 C-MAGAZINEに載っていたタスクシステムを色々解析していて疑問に思ったのです。
でもまぁnewとdeleteをオーバーロードしなくても他の方法でもいいような気がしないでもない・・・。
>>672 ありがとうございます。ということは、newをオーバーロードしてもメモリの確保は行われるのですね。
わざわざnewをオーバーロードするのだからそのあたりは便利なところか…。
> newをオーバーロードしてもメモリの確保は行われるのですね。
え?
676 :
デフォルトの名無しさん:皇紀2665/04/01(金) 12:24:45
皇紀じゃつまんないな。
他の板はいろいろバリエーションあるのに。
デスマーチ投入2665人目
デスマーチ2665年目
連続労働時間2665分目
こんなのどうよ
最後だけリアルだけどw
>>674 メモリの確保を自分でやるためのoperator new/deleteのオーバーロードだ。
コンパイラはコンストラクタ/デストラクタを呼ぶコードを吐くだけ。
メモリ確保/解放はoeprator new/deleteの中の人の仕事。
680 :
652:皇紀2665/04/01(金) 14:53:13
681 :
652:皇紀2665/04/01(金) 14:54:05
655は私ではないです。(^−^;
今だにオーバーロードとオーバーライドの違いが分からん
馬鹿だなあ俺
そうだな。
>>682 オーバーロード:引数が違う
オーバーライド:派生クラス
VCの話題か?
オーバーロード:関数名同じ、引数違う
オーバーライド:関数名同じ、引数同じ、派生クラス
今からだと、VC++.NETは買わない方がいいですか?
本にBMPファイルのピクセル列の並びはBGRの順って
書いてあるんですけど、
調べてると(ソースとか)、RGBの順で読み込んでるような気がするんです。
struct t_color {
BYTE r,g,b;
};
t_color* pPixel = ピクセル先頭位置;
みたいにして。
本はエンディアンの都合で書いてるのか、詳細が書かれてなくて訳が分かりません...。
BMP操作は何回かやってるんですが、すぐ忘れてしまう...
>>687 初心者にはオススメ。玄人には....説明不要。
>>689 そうですか。ならば購入を検討したいと思います
691 :
689:int 2ch =05/04/01(金) 22:05:37
>>690 DirectXの解説サイトとか多くのサイトがVisualC++中心で
プログラム組んでるので、サンプルソースにVisualC++のプロジェクトファイル
を含んでいる(別に必要無いかも...)が結構有るので便利だと思います。
自分も初心者なので、あくまで参考にして下さい...。
日付がintになったか…。
>>687 VS2005が出るまで待つって事?
DirectXに限らずWindows上で動くプログラムのサンプルなら、
かなりの場合VCのプロジェクトファイルが付いてくる。
その割には解説サイトが少ないよなぁ・・
書籍では結構あるけど。
解脱サイトなら…
696 :
688:int 2ch =05/04/02(土) 01:48:27
どうやら本は正しい様で。
ソースの方が間違ってたらしい。(本に付属のものじゃない)
構造体メンバをr,g,bの順に定義して
SetPixel(hdc,x,y,r<<16 | g<<8 | b);//rの正体=b, bの正体=r
とやってるから結果的に正しく表示されていただけ。
まぎらわしい...
697 :
688:int 2ch =05/04/02(土) 01:49:35
sage忘れた...
698 :
:2005/04/02(土) 18:31:56
VC7.1はテンプレートのexport使えるのですか?
もちろん出来ません。
700 :
:2005/04/03(日) 00:32:18
>>699 どうもありがとう。テンプレートのフル実装はなかなか終わらないね。
スクリーンキーボードを作ろうとしているのですが、
SendInputを使用して実現しようとしています。
フラグにKEYEVENTF_UNICODEを用い、
どのキーボード配列でも入力可能にしたいのですが、
UNICODEを使用すると入力された文字が変換待ちの全角になってしまいます。
Windowsのコントロールパネル内のキーボードを英語既定にするとうまくいくのですが、、、
IMEが関係しているのでしょうか?
答えようと思ったが、マルチだったのでやめた
文字列をstd:stringなどを使いたいのですが、std::stringはどうもUNICODE環境をサポートしていないようです。
例えばFindWindowへの引数などに使いたいのですが、std::string以外に扱いやすい文字データ型はないでしょうか?
704 :
デフォルトの名無しさん:2005/04/03(日) 20:43:47
CString
>>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
タスクマネージャから拾えば
分からないなら黙っててください、すっとこどっこい!
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の乱数を発生させて、(以下略
分からないなら黙っててください、無能野郎!
715 :
デフォルトの名無しさん:2005/04/03(日) 23:25:43
GohyakuBunNoIchiDeAtaruFunction()
OmaemitainaYatunihaOsienaiFunctoin();
>>703-706 ありがとうございます。
でも、std::wstringだとLPCTSTRなどを引数に渡す関数に使えないことないですか?
.c_strで渡しても、const wchar_t *(void) const' から 'LPCWSTR' に変換できませんといった
エラーになってしまうのですが…。
719 :
デフォルトの名無しさん:2005/04/04(月) 00:05:54
>>713 乱数の生成が分からないんだよ
rand()
なんていったら殺すぞ、このやろう
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;
数年前の変なソースからコピペ
>>719 boost::random
適当に言ってみたら本当にあった。
724 :
デフォルトの名無しさん:2005/04/04(月) 00:27:04
なぁ、おまいらって結局他人様が作ったライブラリが
なけりゃなんにもつくれないんだろ
一からおこしたことなくね?
725 :
722:2005/04/04(月) 00:29:33
C初心者の頃に頑張って書いたコードは無視ですかそうですか・・・今も大して変わりませんが
>>725 >>724はrand()使ってるのが気に入らないんじゃないの?
やるなら自前で全部書けと。
>>718 LPCTSTRはUNICODEビルドか否かでLPCWSTRかLPCSTRに置き換えられる。
一方std::wstringはUNICODEビルドかどうかで影響を受けない。
728 :
デフォルトの名無しさん:2005/04/04(月) 00:59:06
まず乱数の種を取るのに何を使うかが・・・変なセンサーでもPCに付けるの?温度センサーとか
ハードウェア乱数生成器を搭載したチップセットがあったような希ガス。
ラジヲとかテレビの局間ノイズは優秀だな
乱数はメルヘンツイスターを使うといい。
732 :
デフォルトの名無しさん:2005/04/04(月) 07:01:22
hoge()という関数はどのヘッダをインクルードすればよいのでしょうか?
>>707 パフォーマンスカウンタ
使い方はPSDKのサンプル等を見てね
面倒くさかったらPDH使えば楽勝だけど、重いぞ。
この程度も回答できずに茶化す馬鹿が多いのは、嘆かわしい。
>>718 だからstd::basic_string<TCHAR>使え。
std::basic_string<TCHAR>のc_str()はconst TCHAR *を返す。
typedef const TCHAR *LPCTSTR;だからstd::basic_string<TCHAR>のc_str()はLPCTSTRそのものだ。
次は
std::basic_string<TCHAR> str = "ほにゃらら";
か
std::basic_string<TCHAR> str = L"ほにゃらら";
ができませんって言うに決まってる。
736 :
718:2005/04/04(月) 15:31:05
>>734 ありがとうございます。
やっとできました。単にc_str()と呼ぶところを.c_strだけと、()を抜いてしまっていたのが原因で・・・
std::wstring で動作させることができました。
初歩的ミスでお騒がせしました。釣ってきます∧||∧
MFCのSDIで、
1.ウィンドウサイズを変更出来ない
2.常に最前面に表示
3.タスクバーから消す
を実装したいのですが、1と3の両立が出来ません。そういう仕様ですか?
解決策あるなら教えてたもれ。
>>737 3はメインウィンドウを見えないウィンドウに所有させるか
ITaskbarListでごにょごにょ。
739 :
デフォルトの名無しさん:2005/04/05(火) 16:07:20
最近VC++.NETを購入しました。
ウィンドウズアプリケーションを作るとき、MFCと.NETのフォームアプリケーション、どちらを使ったほうがよいのでしょうか。
741 :
デフォルトの名無しさん:2005/04/05(火) 16:17:22
同じようなものなのでしょうか?
できればどちらかを使ったときにどんな不都合があるのか知りたいのですが・・・
普通はどちらを使うのでしょうか。
MFCでゲーム作ると笑える
>>741 0から資料も何も見ずに作るのか?
そうではあるまい。
自分が既になんらかの資料を入手しているのならその資料を頼ればいいし、
そうでないなら先ず資料を探すといい。
どちらにしろ、自ずとどちらがいいか判るだろう。
君が何をしたいのかは君が書かない限り誰にもわからないのだよ。
「本を読んだんですけど次に何をしたらいいですか」とか、
「デジカメ買ったんですけど何をしたらいいですか」と同列だね。
自分が何をしたいのか判っていないのだから、>744のような指摘は無意味だよ。
746 :
デフォルトの名無しさん:2005/04/05(火) 17:33:23
すいません、本は買おうと思ったのですが、MFCを使う入門本とそうでない物があったので、どちらを買うか迷ったのです。
それで、どちらを中心に勉強するのがベストかなぁと・・・
それぞれの特徴をググるなりして調べて、自分がやりたい方を選べばよい。
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を使おうと思います。
入門にお勧めの書籍はないでしょうか?
.NETのアプリ作るならC#のほうが適していると聞くが。
C++は過去の資産を生かすためにあるだけで、本来はC++で作るには少し無理があると聞くが。
__gc とかキモイのでC#のほうが好き。
そこでC++/CLI
すいません、質問なのですが
vc++2005ベータのプロジェクトで、拡張子が.icoというファイルができたのですが
これは、このツールを使って絵を描けという意味ですか??
あと、MFCがないとWin32プログラミングは難しいのでしょうか?
基本のCは覚えたので、今度はVC++を勉強しようと思ってるんですけど。。
.icoはアイコンファイルです。アプリケーションで使うアイコンです。
VSでアイコンを編集することが出来ます。
MFCはWindowsのAPIをまとめてクラスライブラリにしたものです。
ですからMFCで出来ることはAPIだけでも出来ますが、MFCも全部のAPIを
網羅して作られているわけでもないので、MFCと言えど結局APIも使う時が
しばしばあります。GUI関連のコードを書く時はMFCだと面倒な所が隠蔽
されているので楽に書けて便利ですが、スピード重視のコードとか書く時は
MFCよりもAPIを直に使った方が良いことがあります。ゲームとかだとMFCより
API、つまりSDKスタイルの方が好まれるようです。VS6.0の開発環境はMFCを
使って書かれています。
つまり、目的に応じて使い分ければ良いということです。
>>750 苦労は買ってでもする、その若さに乾杯。
.rc をテキストエディタで編集汁。
>>760 それだとリソースエディタを使ってるのと本質的に変わらんだろう。
>>750 が言ってるのは CreateWindow 呼びまくって
ダイアログにコントロール貼り付けたいって意味だと思う。
762 :
デフォルトの名無しさん:2005/04/06(水) 21:29:30
プロジェクトのプロパティでキャラクタセットをUNICODEにした場合、
TRACEで日本語が出力できないのですが、これは回避策はあるのでしょうか?
TRACE(TEXT("日本語表示"));
みたいな感じでコードを実行してもなにも表示されません。
ダイアログのメンバ関数をスレッドで動かそうと思い、staticにしたんですが、
そしたら、その関数の中でメンバ変数にアクセスできなくなってしまいました。
変数もstaticにしてみたら「スタティック メンバ関数内の不正なデータ メンバへの参照です」
となってコンパイルできません。
スレッドからメンバ変数を使うことは不可能なのでしょうか?
>>763 スレッド以前にstaticがなんなのかわかってないからそうなる。
>>764 わかってるけどそうしないとCreateThreadで
error C2440: 'type cast' : 'オーバーロードされた関数タイプ' から 'unsigned long (__stdcall *)(void *)' に変換することはできません。
となる。
>>765 CreateThreadのパラメータにthisを渡し、スレッド関数ではそのthisを使って操作する。
出来るよ。まず、ダイアログへのポインタ変数dlgを作る。スレッドだから
グローバル変数にでもしとけばアクセスしやすいだろう。これを
InitDialog()の中とかで初期化する。dlg=thisみたいにして。
ダイアログのコンストラクタの中でも良いが。
するとdlgはダイアログを指すグローバル変数となるから、
スレッドの中でこのポインタを使ってメンバ関数なり、
メンバ変数にアクセスできる。
dlg->m_static.SetWindowText("orz");
dlg->Func();
>>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;
>>765 ちなみに言うとstaticメンバ(関数も変数も)はクラスで共有と言う扱い。
だからstaticメンバ関数ではthisポインタが使えない。(staticメンバ変数やstaticメンバ関数は使える)
非staticメンバ関数は実のところthisポインタを引数として受け取っているからCreateThreadに渡せない。
>>765 >わかってるけどそうしないと
解ってないからそうなる。
>>762 デバッガの設定でUnicode文字の表示、ってのがあるけど、チェック入れてる?
スレッド以前にstaticがなんなのかわかってないからそうなる。
>>768 staticすら理解していないお前は、マルチスレッドに手を出す資格はない。
おとなしく、シングルスレッドで我慢してたほうがいい。
なんとなくできたっぽいとかいってるようじゃ、痛い目にあうぞ。
staticうんぬん、排他制御云々、なんていうこと以前に、2つもダメな点がある。
1.
無理にLPTHREAD_START_ROUTINEへのキャストをするな。
LPTHREAD_START_ROUTINEの定義をヘッダファイルで確認するか、
Win32 APIのマニュアルでThreadProcを見ろ。
2.
見た感じからMFCを使っているようだけど、
スレッド内でMFCを使う場合はWin32 APIの::CreateThreadは使用禁止。
もいっかいMFCのマニュアル見れ。
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 は関数へのポインタではありません
}
そういう意味だったのですね。
どうもありがとうございました。
>>774 >SolidBrush myBrush = new SolidBrush(Color::Argb(100,0,0,255));
何使ってるのかよく分かんないけど、こんな構文大丈夫なのん?
SolidBrush *myBrush = new ・・・ こんな感じになりそうな気がするけど。
GDI+ってよく分かんないんですが。
SolidBrush *pmyBrush = new SolidBrush(Color(100, 0, 0, 255));
SolidBrush myBrush(Color(100, 0, 0, 255));
このどっちかだな。
779 :
762:2005/04/07(木) 19:44:14
>>771 それってどこですか?
オプションの中のデバッグの設定の箇所見ましたが、それらしい設定項目はありませんでした。
VS.NET2003です。
>>779 AtlTraceVUのバグっぽい。
わざわざUNICODE版を作っておいて、結局呼び出してるのは_CrtDbgReport。
なんでやねん。
Visual C++を手取り足取り教えてくれているサイトありませんか?
プログラムについて何も知りません
あるいはこれさえあればvisualC++をほどほどに使いこなせるという良書を教えてください
783 :
デフォルトの名無しさん:2005/04/07(木) 22:17:37
784 :
771:2005/04/07(木) 23:08:23
>>779 頭が固くなった爺なんで、今だにVC6と決め付けて書いてしまいました。
>>783 はいはい。
何だかわからないけど、うまく動きません
何だかわからないけど、例外が出ます
とか言うなよな。
つーか、教えてもらう気がないなら、質問するなガキが。
>>785 じゃないが、
なんか出来たっぽいです。
とか
何だかわからないけど、とりあえず動きました。
とかも言って欲しくない。
789 :
762:2005/04/08(金) 00:42:10
>>780 なるほど。そうでしたか。
WideCharToMultiByteしてからTRACEするしかないのかな。
if(GetKeyState(VK_F1) & 0x8000)
{
while( GetKeyState(VK_F1) & 0x8000 ) ;
}
これでプログラムが無限ループで制御不可能になるんですけど
GetKeyStateをGetAsyncKeyStateにすればおそらく直ると思うのですが、
何故なんでしょう?
MSDNにハードウェア割り込みとか何とか書いてあるけど分かりません...。
ifの中身とwhileの中身が同じだぞ。
ifでtrueと評価されたからすぐ次のwhileに入った時、
同じ条件をtrueと評価して無限ループになるんでわ?
>>791 GetKeyState(VK_F1) の値がいつまでも変わらないと思っているのですか?
>>790 MSDNによると↓だから、そこでループしてるとメッセージが送られてこないからじゃないのかね。
GetKeyStateは割り込みを使ってないって書いてある。
>スレッドがメッセージキューからキーメッセージを読み出すたびに、
>この関数が返すキーの状態は変化します
それからそういう感じのwhileの使い方はしない方がいいぞい。CPU使用がMAXになっちゃうべ。
794 :
793:2005/04/08(金) 03:58:15
793をちょっと訂正。
>そこでループしてるとメッセージが送られてこないから
↓
そこでループしてるとWM_KEYUPのメッセージキューを処理できなくて、その結果、
キー状態変化してないように見えるから
795 :
790:2005/04/08(金) 04:25:45
レスありがとうございます。
なるほど。つまり、メッセージを送りすぎて処理が追いつかないと...。
GetKeyStateの場合、メッセージ送信でキーの状態を得るということですね。
キーボードの状態を直接I/Oから読み取るものだと無意識で思ってて、
こういうことになったと。
割り込みの意味が少し分かったような気がします。
CPU100%はSleep(10);で解決...。(本当は別なやり方が正攻法なんでしょうが)
一番外しているのが792だな
いつまでも変わらないんですね
>>789 ATLはソースがあるんだから、ソースを直してしまうのも手よ。
マイクロソフトのサポート情報を探すと、ATLのバグ情報がゴロゴロでてきますよ。
中には、一度もテストしないで出しただろ、と突っ込みたくなるような酷いバグも・・・。
>>795 ちがう。
おそらく・・・
ウィンドウのメッセージキューに届いたメッセージを処理してすぐに帰るべきところに、
状態の変更を待つような内容のコードを書いてしまっているのではないかと。
基本的に、メッセージの処理は、速やかにreturnしなくてはいけない。
returnするまでは、次のメッセージが処理されない。
キーボードからの入力も、マウスのクリックも、
対象となったウィンドウのメッセージキューに、メッセージとして届けられる。
なので、ループしたりして、メッセージの処理を止めてはいけない。
「イベントドリブン」
「メッセージポンプ」
「ウィンドウプロシージャ」
などについて、基本的なところを勉強することをオススメします。
スレッドとCRTについて質問です。
EXE側から関数アドレスをもらって、その関数を呼び出しながら処理するDLLがあります。
EXE側はCRTをスタティックリンクしており、DLLに渡す関数はCRTを使って処理をします。
DLL側がCreateThreadやDLL側CRTの_beginthread(ex)を使ってスレッドを作成し
そのスレッドからEXE側の関数を呼び出した場合、EXE側のCRTは初期化されてないので問題が起きる。
という解釈はあってますか?
4月から環境が変わったので.NETを.NET2003に変更したところ
以前.NETで作成したプログラムが「MFC70D.DLLが見つからなかったため・・・」
というメッセージが出てデバッグ、実行等ができなくなってしまいました。
指定されたファイルを他の環境から持ってこれば動くのかもしてませんが
それでは根本的な解決になっていない気がして落ち着きません。
projファイルなどもエディタで開いて眺めてみたのですが
力不足なため、イマイチよくわかりませんでした。
どなたか解決方法を御教示いただけませんでしょうか?
>>801 MFC70D.DLLってデバッグバージョンじゃね?
デバッグバージョンのDLLは再配布不可のはずなので、Releaseモードでビルドすればいいんでね?
>>801 プロジェクト変換してリビルドすりゃいいと思うけど…?
804 :
801:2005/04/08(金) 15:41:01
ありがとうございます。
>デバッグバージョンじゃね?
>Releaseモードでビルドすればいいんでね?
たしかにデバッグバージョンです。
ただexeを実行したいという意味ではなく.NETで開発していたものを引き続き2003で開発したい
という意味なのでReleaseモードではデバッグができなくなってしまうんです。
>プロジェクト変換してリビルドすりゃいいと思うけど…?
最初に2003で実行するときに「変換しますか?」のようなメッセージが出たので変換を行って
その後でリビルドもしたのですが前述のメッセージが出る次第です。
MFC70D.DLLはパスの通ってるところにある?
806 :
801:2005/04/08(金) 15:52:49
>MFC70D.DLLはパスの通ってるところにある?
いえ、2003を入れた方のPCにはMFC70D.DLL自体が入っていない模様です。
(MFC70.DLLは入ってます。)
もちろん2003のインストール時にはフルインストールはしたはずなのですが。
もしかして2003は.NETが既にインストール済みの環境でしか使えないなんて
制約があったりとかしますか?
>>806 デバッグビルドをリビルドしてもダメ?
もしかしたらそのプロジェクトの対象オブジェクトから起動しているモジュールとかDLLとかない?
漏れは.netで作られたプロジェクトを.net2003でデバッグしているけどプロジェクトを変換した以外何もしてないよ。
#つーか、まさかDebugディレクトリ配下も持ってきてるとか言わないよな。
単にインストール失敗しただけじゃね?
809 :
801:2005/04/08(金) 16:46:57
>デバッグビルドをリビルドしてもダメ?
ダメです・・・。
>漏れは.netで作られたプロジェクトを・・・
そうですね。普通はそうなるはずだと思うんですけど。
>#つーか、まさかDebugディレクトリ配下も持ってきてるとか言わないよな。
これは大丈夫です。
>対象オブジェクトから起動しているモジュールとかDLLとかない?
これが怪しいかもしれません。
.NETでビルドしたDLL使ってるのでソースをもらって2003でリビルドしてみます。
>単にインストール失敗しただけじゃね?
や、その可能性もありますが・・・。
>.NETでビルドしたDLL使ってるのでソースをもらって2003でリビルドしてみます。
それだ。そのDLLがMFC70D.DLLを必要としていると言うこと。
811 :
801:2005/04/08(金) 17:10:00
使用していたDLLを2003でビルドし直したら無事に動きました。
ありがとうございました。
813 :
デフォルトの名無しさん:2005/04/08(金) 18:32:41
大学の生協で売ってるアカデミック版?で作ったソフトを売ってもいいの?
シェアウェアまでなら
815 :
813:2005/04/08(金) 19:31:55
>>814 マジっすか! じゃあ使えないな〜グスン
816 :
デフォルトの名無しさん:2005/04/08(金) 20:48:15
Visual C++ で、実行したらすぐに変な黒いウィンドウが出て
閉じるんですけど、どうすればいいんですか? 設定とかでどこを
いじればいいのでしょうか? 教えてください
(((( ;゚Д゚)))ガクガクブルブル
ガクガクブルブル(((( ;゚Д゚))人(( ;゚Д゚)))ガクガクブルブル
819 :
817:2005/04/08(金) 22:10:12
自演乙
821 :
デフォルトの名無しさん:2005/04/09(土) 00:48:17
CToolBarのボタンに表示するテキストを複数行にしたい場合はどのようにすればいいのでしょうか
CToolBarCtrlのSetMaxTextRows()を指定したりSetDrawTextFlags()にDT_WORDBREAKを突っ込んだりしてみたけど改行されませんでした
822 :
デフォルトの名無しさん:2005/04/09(土) 18:16:24
文字列を数値に変換するときsprintf使ってるんですけどほかに便利な方法おしえてください
>>822 sprintfでどうやって数値化するのか教えて欲しいものだ(w
それはともかくとして、C++ならもう一つの方法として strstream が考えられるね
atoi
boost::lexical_cast
825 :
800:2005/04/09(土) 18:22:07
数値を文字列でした。逆でしたね
>>826 strtol(), strtoul() &c.
>>826 boost::lexical_cast
829 :
デフォルトの名無しさん:2005/04/09(土) 19:57:27
VC++で簡単なメディアプレーヤーの作り方が詳しくのってるサイトはありませんかね?
まずは「簡単なメディアプレーヤー」の定義から始めようか。
831 :
デフォルトの名無しさん:2005/04/09(土) 20:21:35
あ、ごめんなさい。
ファイルを選択して、音楽ファイルを再生できるようなものを作りたいのですが・・・
ググりかたが悪いのか、なかなか見つかりません。
上に近いようなものが作れるならどんなサイトでもかまいません。
>>831 DirectShowでぐぐってみれば?
int型aにtimeGetTime()で、システム起動時間を取得して
char型bに「hoge」といれて、これらの変数を
「hoge (システム起動時間)」っていう風にするのは
どうすればいいでしょうか?
sprintfでいいんじゃね?
835 :
833:2005/04/09(土) 22:08:35
>>834 ありがとうございました。
やっとできました。
>>816 トレースの出力に何か出てないか?
コンソールアプリだったりしないか?
>>822 数値を文字列になら、sprintfでいいんじゃない?
それなりに書式指定できるしさ。
ただ、snprintfを使って欲しい気もする。
CString::Format()という手もあるよ。
>>831 手っ取り早くMCI
837 :
デフォルトの名無しさん:2005/04/10(日) 14:38:36
IEのようにウィンドウの下の部分にある、
説明っぽいのが出てる枠は何ていうんでしょうか?
なにか名前がついててウィンドウのスタイルとかで指定できたりしましたっけ?
840 :
デフォルトの名無しさん:2005/04/11(月) 00:04:11
なんでWM_PAINTでInvalidateRect呼んでるの?
InvalidateRectの第3引数をよく見てみろ
つーか永遠にWM_PAINTが来てえらいことだ。
>>841さん
こうやる以外、自分は字の動かし方を知らないですから。
WM_PAINT 送り続けて画面を更新させ続けようって思いました。
>>842さんのおっしゃった事をヒントに FALSE にしてみたのですが、
残像が残ります。残像を残さず、しかもチラチラさせずに表示する
にはどのようにすれば・・・ ;;
WM_PAINTは現状の描画のみ。で、タイマーとかで現状を更新して
再描画をお願いするってのが良いと思うのですよ。
残像を消すには文字描く前に塗りつぶしたり。フリッカが死ぬほど
嫌なら、背景ブラシをヌルポにして裏画面転送だと思うのですよ。
846 :
デフォルトの名無しさん:2005/04/11(月) 01:47:15
よっしゃーー! いけました!
なんとか残像も消えてくれましたし、嬉しいっす!
WM_PAINTは現状の描画のみ、って言葉がとても参考になりました。
本当に、ありがとうございました!
.vcprojから.makeへのエクスポートってVC2003.NETでもできますか?
Pentium4に最適化されたコンパイラを使った場合に、
同じコアのCeleronとPentiumで吐き出すコードが違うことってあり得ますか?
また、プログラムは単純な計算の繰り返しとして、
同周波数・同コアのPentium4とCeleronで
計算速度に有意な差は出てくるのでしょうか?
よろしくお願いします。
850 :
848:2005/04/11(月) 10:12:08
>>849 ありがとうございます。移ってみます。
こちらでもわかる方がいらしたら、お願いします。
851 :
デフォルトの名無しさん:2005/04/11(月) 11:16:26
すみません。共有で使用しているインクルードファイルがあるのですが
プロジェクトワークスペースに当該インクルードファイルを追加しても、
ビルド時にインクルードファイルが開けません。のエラーが出ます。
何か設定がいるのでしょうか?
>>851 プロジェクトに参加させるかどうかと、インクルードパスの設定は関連がない。
プロジェクトの設定でインクルードパスの設定をしなさい。
#或いは、そのインクルードファイルまでのパスが確定しているなら相対パスでインクルードする手もあるが。
853 :
デフォルトの名無しさん:2005/04/11(月) 11:48:44
>>852 助言いただきました通り
インクルードファイルのパスを追加する事でエラーが解消されました。
ありがとうございます。
>>849 ゴルァ
スレの主旨を無視して誘導するな。
>>850 スレの主旨を無視してマルチする奴の質問には答えない。
>>854 CPUコアの話が初心者向けでないと思ったから誘導しただけ。
ついでに言えば、誘導された>850はきちんと挨拶しているし、それをマルチと断罪するには値しないと思うが。
LineTo、MoveToを使って描画したいのですが、アサートに引っ掛かってしまいます。(ハンドルがNULL?)
要はデバイスコンテキストあたりで躓いているようなのですが、何が悪いのかわからないのでお助けください。
CDCを継承したクラス内で、なにやら本に書いてあったことを見よう見まねで
CClientDC dc(this);
の様にしても、下記のエラーが出ます。
よろしくお願いします。
'CClientDC::CClientDC' : 1 番目の引数を 'class CCtrlDraw *const ' から 'class CWnd *' に変換できません。 (新しい機能 ; ヘルプを参照)
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
>>856 >'class CCtrlDraw *const ' から 'class CWnd *' に変換できません。
この意味がわからんのだったらクラスの継承とかその辺をやり直したほうがいい。
>>857 というと、これはただ単純にCCtrlDrawからCWnd*に変換できない、ってことではないんですか?
自分ではthisポインタが怪しいと思うのですが・・・・
>>858 CCtrlDrawからCWnd*に変換できない
ってことだよ。CCtrlDrawがなんなのか知らんがCWndから派生してないんじゃない?
thisが何か判っていない悪寒。
859さんの言うとおりにCWndからの継承にしたところ、コンパイルは通るようになりました。
が、相変わらずアサートに引っかかります。アサート条件は以下でした。
おそらく860さんのおっしゃるとおりthisポインタがなんなのかイマイチわかっていない悪寒・・・・
ASSERT(pWnd == NULL || ::IsWindow(pWnd->m_hWnd));
>>861 本に書いてある通りにやってみろ。
自分流のアレンジよりも、先ずはそこからだ。
>>862 いや、そこんところは本には書いてないんです。
今はそういったクラスを分ける練習みたいなものをやっているところです。
なんでCClientDCのコンストラクタはCWnd*を引数に取るか考えろよ。
CCtrlDrawで何がしたいんだ?
>>864 ウィンドウと対応付けるためだと理解してますが。
具体的にはマウスの移動に対応した描画です。
>>866 それは失礼。コアな話ならあそこが一番かと思って。
>>865=856
DCの取り扱いは本にあったんだろ? 本の通りにDCを使えるようになってから出直せって。
・・・・わかりました。最後に教えて頂きたいのですが、
イベントキャッチ
↓
処理で関数に飛ばす
↓
で、飛ばされた関数の中でのthisポインタは何を指しているのでしょうか?
>>868 ・・・
MFC使う前にC++の基本を学んだほうがいい。
&飛ばされた関数、だろ。
>>867 まぁありがちですね。
詳しい人が多そうなんで、スレ違いだけど、質問させてください
っていうのは。
漏れなんて、インターネットが普及しはじめた頃に一度、
自宅のパソコンの調子が悪いので相談に乗ってくれ
というメールが来たよ。公開してるフリーソフトと関係ないだろ!ってゴルァした。
すみません、ちょっとトラブルになったようで。
適当なスレが見当たらなかったので質問させていただきました。
もしよろしければ、レスをいただけるとありがたいです。
875 :
デフォルトの名無しさん:2005/04/12(火) 04:59:12
リソースエディタで作ったダイアログの枠の大きさを
その中に配置されたコントロール群より小さくしたとき、
スクロールバーでスクロールさせてきちんと全体を見渡せるようにしたいんですが、
ダイアログのプロパティでスクロールバーを付けてるのに
これが上手く機能しません。
どうしたらよいのでしょうか?
876 :
デフォルトの名無しさん:2005/04/12(火) 08:46:32
1つのダイアログの機能とデザイン、リソースIDなどをまるごと
他のプロジェクトへコピーしたいのですが、簡単な方法はありますか?
877 :
デフォルトの名無しさん:2005/04/12(火) 09:00:50
ギャラリへ追加
変数はループの外で宣言したほうが早くなりますか?
以下は例です。
for(int i;i<256;++i){
int a;
a=hoge(i);
}
int a;
for(int i;i<256;++i){
a=hoge(i);
}
コンパイラの最適化で同じ物になりそう
>>879 じゃあ可読性のよい方を選べばいいんですかね?
>>880 スコープを小さくするメリットを優先すべし。
当然、前者の方がいい。
#つーか、仮令例でもiが初期化されていないの激しく気になる。
>>881 お返事ありがとうございます。
スコープを小さくすることでレジスタに入ったりするということでしょうか?
iの初期化は例文のミスです。
>>882 コンパイラはあんたより賢いからどちらでも同じコードを吐く。
寧ろ、あんたがミスしないようにエラー通知や警告さえしてくれるわけだ。
生存期間を短くすると言うことはそういうことだ。
そんなとき俺なら更に初期化時に戻り値を受けるようにする。
for(int i = 0; i < 256; ++i) {
int a = hoge(i);
}
for (int i = 256; i ; i--) {
int a = hoge(i);
}
886 :
デフォルトの名無しさん:2005/04/12(火) 23:32:44
winsockで質問です。
現在、クライアントからselect()ベースでTelnetの通信制御を行う
プログラムをMFCで作成しております。
Telnet通信を行っているあいだに、とあるコマンドにおいてサーバ側が
自動で切断します。このときサーバ側は受信の応答を返さずに切断して
しまうので、これをクライアント側で切断のタイミングを検出し再接続
を行うようにしたいのです。
その検出方法でなかなか良い方法が見つかりません。
とあるサイトで切断のタイミングは受信バッファが0である
と見かけましたが、サーバ側からの受信バッファが途中で
一端途切れるため、実際に切断されるよりも前のタイミング
で検出してしまいます。
なにか良い方法はないのでしょうか?
コマンドラインのワイルドカードを展開するときって setargv.obj をリンクしますよね。
VC6(SPなし、SP6どちらも)でMBCSビルドではうまくいくのですが、wsetargv.objを
リンクしてUNICODEビルドすると
wsetargv.obj : error LNK2001: 外部シンボル "___wsetargv" は未解決です
となってしまいます。どうしたらいいんでしょか?
(VC2003ではOKだった...)
>>887 unixからの移植用のselectなんて使うのやめて、
Windows用のWSAAsyncSelectでFD_CLOSEイベントを受けとろう。
なんかよう意味がわからん。
サーバがcloseかshutdownで切断すればクライアントは
recvで0を受け取って、切断されたんだな〜ってわかると思うが。
>>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)();
関数ポインタでぐぐれ
すみません質問なのですが、VisualC++はC言語の勉強もできますか?
4月から学校で習うので、もしできるのなら購入したいと思いまして。
皆様よろしくお願い致しますm(_ _)m
>>895 ありがとうございます
学生証もらったら買いに行きます
>>894 Cの勉強のためだけなら必ずしも買う必要もありませんが。
>>894 学校で使う程度なら、フリーのコンパイラでもいいんじゃない?
それで、プログラムに興味もって何か作ろうって思ったらVC買えばいいとおもう。
学校ってのが、高校なのか大学かはしらんが、大学ならUNIXだったりするぞ。
お勉強ならCygwinを入れてgccがいいんじゃないかな。
漏れはVC++を勧めるよ、コンパイラとしてではなくデバッガとして。
本当にここはVCのスレなんだろうか?
嫌がらせでわざと毎日スレ違いの質問しに来てるとしか思えない。
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"は未解決です
のエラーが発生しています。アドバイスをお願いします。
sub2.cはmain.cにもっている関数の宣言を知らないんじゃない?
906 :
デフォルトの名無しさん:2005/04/13(水) 16:27:51
>>905 そうとも考えまして
main.cで定義している関数を
sub2.cのインクルードファイルにextern宣言してみたりしたのですがうまく
コンパイルが通りません。
厨な方法なのですが、closePrcに書いている各関数の初期化や
破棄等をベタ書きで書いたりして無理矢理コンパイル通したりしたのですが
画面さえ閉じられる物のプロセスは生き残ってしまっています。
ヘッダファイル作れば良いんじゃないの?
908 :
904:2005/04/14(木) 09:07:29
レスありがとうございます。
すみません。インクルードファイルとはヘッダファイルの事でした。
既にヘッダファイルを作成して、各Cソース上部にそのヘッダをインクルードしています。
そのcloseなんとかがstatic関数だったりしない?
910 :
904:2005/04/14(木) 09:47:57
>>909 おっしゃる通りstaticで定義されております。
なぜstaticでないと行けないのかは解らないのでそのままなのですが
そこに問題ありでしょうか?
>>910 staticな関数は「そのファイルの外側からは見えない」
externしても無駄無駄
912 :
デフォルトの名無しさん:2005/04/14(木) 10:29:01
プログラム自身が現在使用しているメモリ量と、パソコンの残り空きメモリ量はどのようにしたら取得できるのでしょうか?
913 :
904:2005/04/14(木) 10:31:06
>>911 そういう問題があったのですね。
勉強不足ですみません。一度、指摘されました個所を
コメント化して現在の
static void ClosePrc(HWND hwnd);
から
void ClosePrc(HWND hwnd)
へ変更し、extern してみたのですが、同じくLNK1120のエラーが発生
してしまいました。何か他にも要因が考えられますでしょうか?
よろしくお願いします。
//main.c
void ClosePrc(HWND hwnd) {
....
}
//ヘッダ
extern void ClosePrc(HWND hwnd);
//sub2.c
#include "ヘッダ"
foo() {
ClosePrc(hoge);
}
って状態なんだよね?
ソース全部晒せ!
916 :
904:2005/04/14(木) 10:58:38
>>914 失礼しました。実態の定義部にstaticが残っておりました。
清書しまして現在、コンパイルが通りましたので
早速動作確認してみました。
やはりプロセスが生きのこってしまっています。
上記で教えていただきました、関数呼び元の
ClosePrc(hoge); ですが
hogeとはどのような意味がありますでしょうか?
当方コードではHWND hwnd;
で宣言しているClosePrc(hwnd);としています。
終了する際のハンドル取得に問題があるのでしょうか?
917 :
デフォルトの名無しさん:2005/04/14(木) 11:44:44
プログラム組む前の段階の質問で申し訳ないんですけど
今までVC++をCドライブのプログラムファイルフォルダ以下にインスト(多分デフォでここだったはず)
してたんですけど、どこかのスレでプログラムファイル以下にインストする奴は馬鹿みたいな事を書いていたのを見たんですけど
実際皆さんどこにインストールしてますか?プログラムファイル以下だと何か不都合があるんでしょうか?
>>916 初心者の特徴:ソースを見せずに「うまくいかないんです。なぜですか?」
919 :
904:2005/04/14(木) 11:56:59
>>918 すみません。ソースを全てお見せすると膨大な量となります。
主要部分を抜き出すと
>>914で確認の為に作成していただいた
各関数のコードのみとなるのですが。。。。
おっしゃる通り私は初心者です。申し訳ございません。
>>919 「ソースを見せずに」≠「ソースを全て見せずに」
問題の発生する必要最低限のコードを抜き出して見せないと満足な回答は得られないよ。
921 :
904: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);
922 :
904: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));
}
>>904 ・ExitProc()を読んだときのhWndには何が入ってるの?
main.cとsub2.cで違うものが入ってたら同じ動作はしない可能性が高いわけだが。
・ExitProc()にhWnd渡してるのに使ってないけど?
・同じく、hWndFtpとはなに?
初心者云々以前にプログラマに向いてない気が。
流れを読まずに質問。
ウィンドウのサイズを変更したら中にあるリストビューのサイズも追従させたいんだけど、どうすれば出来ますかね?
ウィンドウのサイズが変わったときに送られるメッセージとかあるの?
ある