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


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

★初心者にVisual C++を教えるスレ★ Part22
751 名前:デフォルトの名無しさん :2006/02/09(木) 21:06:38
pragmaかな

752 名前:デフォルトの名無しさん :2006/02/09(木) 21:22:17
#pragma comment(lib, "パス/SCRNSAVE.LIB")

753 名前:デフォルトの名無しさん :2006/02/13(月) 11:13:58
初心者にもお勧めのVC++解説HPはありますか?
いろいろググって見たもののいまいちしっくりくるところがありません。
理想としては画像解説付きでVC++の基礎の基礎からサンプルプログラムを交えて解説され、
進んで行くにつれ電卓やテキストエディタ、ブラウザなど定番のアプリを作っていくようなところ。
つまり用語や用法の解説ではなく実際にプログラミングしながら学べるところです。
ちなみに私のスキルはVC++歴数日、解説書に一通り目を通した程度。
C、C++でなら一通りのプログラムは書ける程度です。

754 名前:デフォルトの名無しさん :2006/02/13(月) 11:19:08
本買え

755 名前:デフォルトの名無しさん :2006/02/13(月) 11:26:18
当然本屋は真っ先に探しています。

756 名前:デフォルトの名無しさん :2006/02/13(月) 11:27:38
>>755
ならその結果も報告しろよ

757 名前:デフォルトの名無しさん :2006/02/13(月) 12:28:17
ん?いや本屋で探し回ったけど良いのが見つからなかったからWEB検索してたのです。(数冊買いましたが)
いや、特にそういうHP無いのなら諦めて今あるもので勉強しようと思います。


758 名前:デフォルトの名無しさん :2006/02/13(月) 13:41:30
今は頭が悪いのを、本のせいにするのが流行です。

759 名前:質問です!! :2006/02/13(月) 14:28:22
CString ss;
wchar_t wc = 'あ';

とある時、wc経由でssの文字列を"あ"としたいのですが、
× ss = wc;
× ss.Format("%c", wc);
いずれも、上手くいきませんでした。
ssは"?"が入ってる・・・

他に方法はありますでしょうか?
CStrnig::Format()に、マルチバイト文字を明示する方法とか・・・?
Unicodeビルドではなく、マルチバイトビルドで実現したいです。




760 名前:デフォルトの名無しさん :2006/02/13(月) 14:31:39
printf 関数の型フィールド文字

761 名前:デフォルトの名無しさん :2006/02/13(月) 14:35:43
>>757
数冊買ったのをまずはやれ。分からなかったら、調べろ。
楽して覚える方法なんてねーからな。

それができなきゃプログラム諦めれ。そっちのが幸せだ。


762 名前:質問です!! :2006/02/13(月) 14:36:09
ss.Format("%C", wc);
だと、ss=""になってしまいましたよ・・・


763 名前:デフォルトの名無しさん :2006/02/13(月) 14:39:02
コンストラクタ

764 名前:質問です!! :2006/02/13(月) 14:43:05
CString ss;
wchar_t wc = 'あ';
CString ts(wc);

ss = ts;
だと、ss= "・"になってしまいましたよ・・・



765 名前:デフォルトの名無しさん :2006/02/13(月) 14:44:06
( ・ω・)

766 名前:デフォルトの名無しさん :2006/02/13(月) 14:56:58
>Unicodeビルドではなく、マルチバイトビルドで実現したいです。

>wchar_t wc = 'あ';
この時点でマルチバイトじゃないか?

767 名前:質問です!! :2006/02/13(月) 15:11:54
すみません・・・説明が及びませんでした・・・
プロジェクト→プロパティ→文字セット→「マルチ バイト文字セットを使用する」
でお願いしたいという意味でした。

768 名前:デフォルトの名無しさん :2006/02/13(月) 15:13:58
デバッガでどの段階で思い通りの動作をして無いか追ってみ。

769 名前:質問です!! :2006/02/13(月) 15:26:20
CString ss;
wchar_t wc = 'あ'; // wc = 0x82a0 ss = ""
ss = wc; // ss = "?"

デバッガで追った時、この部分で ss = "あ"とならず
思い通りの動きになっていません

770 名前:デフォルトの名無しさん :2006/02/13(月) 15:30:59
デバッガをUnicodeを表示にチェック

771 名前:デフォルトの名無しさん :2006/02/13(月) 15:37:41
お前らいつまでマジボケ続ける気なの?

772 名前:デフォルトの名無しさん :2006/02/13(月) 16:37:37
UNICODE使わねぇのにwchar_tかよ

773 名前:デフォルトの名無しさん :2006/02/13(月) 16:41:32
L'あ'

774 名前:デフォルトの名無しさん :2006/02/13(月) 16:44:52
>>761
買ったものは実践してます。
わからないところもありません。
特に問題はないです。
「楽して」ではなく「楽しく」出来たらいいなと思っただけです。

たとえば物理や数学でも演習がなく定義や法則ばかり書いてある参考書よりは
演習問題が豊富でソレを解きながら覚えた方が楽しいと思います。
そういうの(実際にアプリを作りながら解説)を実践しているHPなどご存じでしたら
紹介していただけたらなぁ。と思っただけです。
特にそういうところがないのなら別に良いです。

昔BASICを覚えたのはBASICマガジンなどでゲームプログラムを打ち込み、そしてソレを
弄ってあ〜でもないこ〜でもないやって理解していき、その過程が楽しいかったので
そういうものを求めていました。

775 名前:質問です!! :2006/02/13(月) 16:49:35
wchar_t型の文字からchar型の文字列に変換する自作関数へ投げるから
もういいもん!><

776 名前:デフォルトの名無しさん :2006/02/13(月) 16:55:45
そうとうテンパってきてるな


777 名前:デフォルトの名無しさん :2006/02/13(月) 16:58:22
質問です。
現在WinXP ProSP2 + VC++6.0環境下で、
MFCベースにて一定時間ごとに処理を行うプログラムを作っています。

その中で100msecごとに処理を行いたいのですが、
settimer( 1, 100, 0 )
void Chogehoge::OnTimer(UINT nIDEvent){
〜処理〜
}
では、
処理が正確に回らず、1msecずつ遅れ最終的に100msecの単位が飛んだりします。

なので、マルチメディアタイマーを利用しようと思っているのですが、

TIMECAPS timeCaps;//分解能格納
timeGetDevCaps(&timeCaps, sizeof(timeCaps));//分解能取得
timeBeginPeriod(timeCaps.wPeriodMin);//分解能の最小値

FTimerId = timeSetEvent(100, timeCaps.wPeriodMin, TimerProc, (DWORD)this, TIME_PERIODIC );

でタイマーを生成し

void Chogehoge::TimerProc( UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2 ){
〜処理〜
}
とやっても、マルチメディアタイマー使用以前と同様、処理が遅れてしまいます。
実際100msec周期で正確に処理を行いたいとき、どのようにすればよいのでしょうか?
# 優先度をリアルタイムに変更してもうまく回りませんでした。

778 名前:デフォルトの名無しさん :2006/02/13(月) 16:58:44
最初からchar使えよ

779 名前:デフォルトの名無しさん :2006/02/13(月) 17:01:28
>>777
ラッキーおめ

とりあえずタイマー部分だけをマルチスレッド化して、
100-10〜15msくらいのときに通達すればいいのではないかと。

もしくはただのループ

780 名前:質問です!! :2006/02/13(月) 17:02:22
>>776
もっといい方法あったら、教えて下さい

>>778
wcahr_tが一文字ずつ飛んでくるから、それをCString型にスタックしたかったの!><

781 名前:デフォルトの名無しさん :2006/02/13(月) 17:04:53
>>769
>>773

782 名前:デフォルトの名無しさん :2006/02/13(月) 17:07:39
>>780
そんなこと一言もいってないじゃねぇか

783 名前:質問です!! :2006/02/13(月) 17:12:32
>>781
Unicodeじゃダメなの!><

>>782
知りたかったのは、wchar_t→CString & 非Unicode
でしたので、噛み砕いちゃいました・・・

784 名前:デフォルトの名無しさん :2006/02/13(月) 17:14:50
はなしがつうじない ただのちしょうのようだ

785 名前:デフォルトの名無しさん :2006/02/13(月) 17:17:17
Unicode受け取っておいてUnicodeじゃダメなのもないもんだ

786 名前:質問です!! :2006/02/13(月) 17:19:33
受け取るの、Shift-JISだもん><;


787 名前:デフォルトの名無しさん :2006/02/13(月) 17:21:39
すんまそん、プリコンパイル済みヘッダについて教えてください。

/Yc プリコンパイル済みヘッダーを作成する
/Yu プリコンパイル済みヘッダーを使う

というのが有るのですが、毎回 stdafx.h の内容を変更するたびに
一度 *.pch を削除して /Yc に変更してコンパイルして
/Yu に戻してビルド、という手順を踏む必要があるのでしょうか?

stdafx.h を書き換えたら勝手にそいつから *.pch を作成して
以後それを使ってくれるようにはできますか?

788 名前:デフォルトの名無しさん :2006/02/13(月) 17:22:11
>>786
じゃあcharにしとけ

789 名前:デフォルトの名無しさん :2006/02/13(月) 17:22:15
SJISはマルチバイト

はい次の方どうぞ

790 名前:デフォルトの名無しさん :2006/02/13(月) 17:23:09
自分で試せばいいだろ
なんでわざわざ聞く必要が?

791 名前:デフォルトの名無しさん :2006/02/13(月) 17:23:16
>>786
wchar_t使うのにUNICODEじゃないなんてねぇよ、Windowsでは

792 名前:デフォルトの名無しさん :2006/02/13(月) 17:24:07
>>787
いちいちオプションいじらないでリビルドするだけだろ

793 名前:デフォルトの名無しさん :2006/02/13(月) 17:25:07
おまいらつくづくバカだなぁ

794 名前:デフォルトの名無しさん :2006/02/13(月) 17:25:31
>>792 そのとき /Yc にしておくべきですか?
それとも /Yu にしておくべきですか?

795 名前:デフォルトの名無しさん :2006/02/13(月) 17:25:59
>>794
VC++2003だと思うが/YXな

796 名前:デフォルトの名無しさん :2006/02/13(月) 17:26:26
>>792
ええ、あなた程度でも思いつくような事はさすがにやってます^^;;;

797 名前:デフォルトの名無しさん :2006/02/13(月) 17:26:41
いえいえとんでもない!
>>793の逝きっぷりには到底及びもつきませんよ!!!
今後ともよろしくお願いしますね!
じゃぁ氏ね

798 名前:質問です!! :2006/02/13(月) 17:27:41
>>789
だから、マルチバイトって最初っから言ってるじゃないですかぁ

>>791
お兄さん、VS2005でデフォルトがUNICODEなんでしょ?

でも、みなさんありがとう
もういいです><;


799 名前:デフォルトの名無しさん :2006/02/13(月) 17:29:04
(        ゚Д゚)

800 名前:デフォルトの名無しさん :2006/02/13(月) 17:29:55
(           ゚Д゚)

801 名前:デフォルトの名無しさん :2006/02/13(月) 17:30:24
(             ゚A゚ )


802 名前:デフォルトの名無しさん :2006/02/13(月) 17:31:07
(´Д`          ゚A゚      ´Д`)

803 名前:デフォルトの名無しさん :2006/02/13(月) 17:31:08
>>795 VC++ 2005 です。ヘルプには /YX という
オプションは有りませんでした。

804 名前:デフォルトの名無しさん :2006/02/13(月) 17:31:12


  .__
 .Z|・∀・|
  |__|Z
   / <
   .図



805 名前:デフォルトの名無しさん :2006/02/13(月) 17:31:26
伸びてくんな
こっちみんな
キモチワルイ

806 名前:デフォルトの名無しさん :2006/02/13(月) 17:32:21
伸びてくんな
こっち(´Д`          ゚A゚      ´Д`) みんな
キモチ(          ゚Д゚ )ワルイ

807 名前:デフォルトの名無しさん :2006/02/13(月) 17:33:30
>>779
レスありがとうございます。
タイマー用のスレッドってどういったものなんでしょうか?
settimerなど使用すればkillするまで、一定時間ごとにメッセージを投げてくれる。
メッセージはOnTimerで自動的に受け取れるという感じだと思うんですが
スレッドで実際やるとしたら…
void Chogehoge::OnOK()
{ 〜前処理〜
AfxBeginThread( TimerThrd, this, THREAD_PRIORITY_NORMAL);
}
UINT Chogehoge::TimerThrd ( void * ){
settimer(1,100,0 ); //?????
}
void CProtDlg::OnTimer(UINT nIDEvent)
{ 〜処理〜
}
これじゃ変わってませんよね…orz
どうすればいいんでしょう?

早めにまわして・・・
void CProtDlg::OnTimer(UINT nIDEvent)
{
SYSTEMTIME st; // 現在時刻
GetLocalTime(&st); // 現在時刻取得
if ( m_mill != ( st.wMilliseconds / 100 ) ){
〜処理〜
m_mill = st.wMilliseconds / 100;
}
}
# m_millはメンバ変数
これだと処理が重くなりますし…。

808 名前:デフォルトの名無しさん :2006/02/13(月) 17:38:22
>>803
VC++2005からは/YXが廃止されたから/Yuでおk
ただし、ちゃんとファイル名を指定するか、#pragma hdrstopを使うこと。

809 名前:デフォルトの名無しさん :2006/02/13(月) 17:38:31
いちいち聞くより、ヒント貰ったら後は自分で調べた方が速いぞ

810 名前:デフォルトの名無しさん :2006/02/13(月) 17:45:08
VC6.0ってアセンブラ使えますか?

811 名前:デフォルトの名無しさん :2006/02/13(月) 17:47:05
>>780
CStringW

812 名前:デフォルトの名無しさん :2006/02/13(月) 17:49:16
>>810
インラインアセンブラのことだったら使える。
ただし拡張命令はSP6だとMMXどまり。
SP5にProcessorPackを当てると3DNow、SSE/SSE2まで。

813 名前:デフォルトの名無しさん :2006/02/13(月) 18:00:13
>>807
100ms毎になにやりたいんか知らないが、きっかり100msやるとしたら
専用ハードが無いと無理じゃないのかな。
そこそこの精度ならスレッド作って、GetTickCount()やパフォーマンスカウンタ見ながらループさせるとか。(負荷かかるけど)


814 名前:807 :2006/02/13(月) 18:53:51
100msec周期というのは、そこそこの精度で十分です。
オシロからのデータをもれなく収集を行いたいというプログラムです。
現状は秒単位+msec単位を記述するとこんな感じです。

 10.597
 10.698
 10.799
 10.900 ←0.1sec飛んでる
 11.001

という感じで間が飛んでしまうのを、何とかしたいというのが本題です。
時間は100msecまでしか、保存を行わないのでそれ以下は問いません。
難しく解釈してしまった方申し訳ないです。

スレッド内でループで時間判定…
UINT Chogehoge::TimeThrd( void * param ){
SYSTEMTIME st; // 現在時刻
mill_tmp = 0;

while(終了条件){
GetLocalTime(&st); // 現在時刻取得
if ( st.wMilliseconds / 100 ){
〜処理〜
mill_tmp = st.wMilliseconds / 100;
}
Sleep(50); // 負荷を下げたいので
}
}
# 上に書いたやつの2番煎じです…
これだといやでも負荷かかりますし…orz


815 名前:デフォルトの名無しさん :2006/02/13(月) 18:54:57
> 10.799
> 10.900 ←0.1sec飛んでる
( ゚Д゚)( ゚Д゚)( ゚Д゚)  ( ゚Д゚ )

816 名前:デフォルトの名無しさん :2006/02/13(月) 19:04:33
きょうは何かあったの?
大地震のまえぶれだろうか?

817 名前:デフォルトの名無しさん :2006/02/13(月) 19:33:12
>>814
そのデータだと、そこそこの精度がでているが。どこが0.1[s]
飛んでいるんだ?10.799はほぼ10.8だぞ。
タイマーは、別スレッド作られるはず。MSDN読め。
学部か修士ぐらいだろうが、自分で少しは調べろ。ためにならん。

818 名前:デフォルトの名無しさん :2006/02/13(月) 19:34:17
>>814
ms単位の経過時間が欲しければ、わざわざGetLocalTimeせんでもGetTickCount()でいいだろ。

819 名前:デフォルトの名無しさん :2006/02/13(月) 19:37:13
>>818
gettickcountは評判悪い

820 名前:デフォルトの名無しさん :2006/02/13(月) 19:53:02
ループしまくって
RDTSCで読み続けるんだ!

821 名前:デフォルトの名無しさん :2006/02/13(月) 19:54:34
こんばんは、
EPSファイルを、GIFファイルに、変更するフリーのDLLないでしょうか。

できれば、EPSを読み込んだあと、GetPixel()とかできるのがよいです・・。

822 名前:デフォルトの名無しさん :2006/02/13(月) 21:09:00
>>821
http://pc8.2ch.net/test/read.cgi/tech/1138893959/229

823 名前:デフォルトの名無しさん :2006/02/13(月) 21:20:31
VS2003を使ってます

VC++で、MFCのダイアログベースでテスト用のプログラムを作って色々試してたんですが
今しがた突然、デバッグをしようとF5を押すと、
「デバッグを開始できません プログラム 'EXEのフルパス' を開始できません。 アクセスが拒否されました。」
というメッセージボックスが出てデバッグができなくなりました。
プログラムを変更したのがいけなかったかと思い、Ctrl+Zで元に戻してリビルドしたりしても一向に直りません
Debugフォルダごと削除してビルドしなおしたりしてもダメでした

解消方法なと、どなたか心当たりありませんか?

824 名前:デフォルトの名無しさん :2006/02/13(月) 21:21:06
>>819
なんで?

825 名前:デフォルトの名無しさん :2006/02/13(月) 21:23:03
>>823 リブート

826 名前:デフォルトの名無しさん :2006/02/13(月) 21:24:42
確かに、リブートはしてません・・・(ファイル送信してるもので・・・)
後でやってみます

827 名前:デフォルトの名無しさん :2006/02/13(月) 21:29:24
>>826
リブートしても直らない、に3000点

828 名前:デフォルトの名無しさん :2006/02/13(月) 21:29:38
>>826 ほら、空っぽのディレクトリなのに
削除できなかったりすることあるだろ?
再起動すると削除できるけど。
まぁ、あれみたいなもんだ。

829 名前:デフォルトの名無しさん :2006/02/13(月) 22:41:23
>>828
リブートしても直らない、に3000点

830 名前:デフォルトの名無しさん :2006/02/13(月) 22:48:47
ちょwwwwww
何でこんなに大盛況なの??

831 名前:デフォルトの名無しさん :2006/02/13(月) 23:06:47
VS2005をWin2000SP4で使用しています。
今度DirectXを使ってゲームを作ろうと思い、DirectX9 UpdateSummerをインストールしました。
ヘッダとライブラリのパスは設定したのですが、プログラムでDirectXのメソッドを呼び出そうとすると
外部参照エラーが発生します
-----------------------------------------------------------
リンクしています...
main.obj : error LNK2019: 未解決の外部シンボル _Direct3DCreate9@4 が関数 _WinMain@16 で参照されました。
D:\Visual Studio 2005\Projects\DXTEST\Debug\DXTEST.exe : fatal error LNK1120: 外部参照 1 が未解決です。
-----------------------------------------------------------
解決法がありましたら、どなたかお願い致します。

832 名前:デフォルトの名無しさん :2006/02/13(月) 23:11:02
libをリンクしろや

833 名前:デフォルトの名無しさん :2006/02/14(火) 07:15:21
libをリンクしても直らない、に3000点

834 名前:823 :2006/02/14(火) 08:23:35
>>825
リブートしたら動きました
お騒がせしました

>>827,829
残念w

835 名前:デフォルトの名無しさん :2006/02/14(火) 13:44:19
起動時のワンポイントをひょうじするようにしたいのだけどどうしたらいいですか?

836 名前:デフォルトの名無しさん :2006/02/14(火) 13:45:13
そのように作ればいい。

837 名前:デフォルトの名無しさん :2006/02/14(火) 13:47:55
http://www.geocities.jp/dondokodon41412002/

838 名前:デフォルトの名無しさん :2006/02/15(水) 00:13:11
>>834
なんでリブートしたら直ったのかは突き止めたの?

839 名前:デフォルトの名無しさん :2006/02/15(水) 08:36:26
リブートしたら直るようなもん、どうやって突き止めるんだよ

840 名前:デフォルトの名無しさん :2006/02/16(木) 19:02:16
フリーってことでvisual c++のエキスプレスエディションつっこんでみたが、
有名な
1 #include <stdio.h>
2
3 main()
4 {
5 printf("Hello!\n");
6 }

が上手くできない・・・
新規プロジェクト作成でどこえらんでいいかもわからんしww

とりあえずオレにはC++無理ってことでFA???


841 名前:デフォルトの名無しさん :2006/02/16(木) 19:07:19
>>840
FA

842 名前:デフォルトの名無しさん :2006/02/16(木) 19:08:08
FAK

843 名前:デフォルトの名無しさん :2006/02/16(木) 19:10:43
>>840
ところでそれはC++ではなくCなんだが・・・

844 名前:デフォルトの名無しさん :2006/02/16(木) 19:22:33
C++でもコンパイル通る

845 名前:デフォルトの名無しさん :2006/02/16(木) 19:23:20
( ゚д゚)

846 名前:デフォルトの名無しさん :2006/02/16(木) 19:36:38
>>840
void main() に汁!または int main() にして最後に return 0; に汁
C++ 風にしたいなら <iostream.h>に汁!

847 名前:デフォルトの名無しさん :2006/02/16(木) 20:22:30
>>846
うそおしえるなよ。

848 名前:デフォルトの名無しさん :2006/02/16(木) 21:20:31
正解はこちら↓

849 名前:デフォルトの名無しさん :2006/02/16(木) 21:25:36
以上が正解です↑

850 名前:デフォルトの名無しさん :2006/02/16(木) 21:27:33
(1) void main()だめ。int main()にする。

(2) <iostream.h>は古い。
#include <iostream>してusing namespace std;

851 名前:デフォルトの名無しさん :2006/02/16(木) 21:40:14
馬鹿よけのためにはint main(void)で。

852 名前:デフォルトの名無しさん :2006/02/16(木) 22:39:18
>>840
まともな解答が欲しければ何がどううまくいかないのか、どこで躓いているのか書け。

853 名前:デフォルトの名無しさん :2006/02/17(金) 00:30:53
VC++7(.net)のデバッガって、開発中のアプリケーションを、デバッガ上ではなく
単体で起動してcrashさせてからアタッチすると、どこからともなくプロジェクトを見つけてきて、そのうえソースまで表示してくれませんか?
あれってどうやってるんでしょう?どっかにexeの名前とソリューションの場所のテーブルでも持ってるんでしょうか?


854 名前:デフォルトの名無しさん :2006/02/17(金) 00:31:46
>>853
アセンブリキャッシュにでも書き込まれてるんじゃね?

855 名前:デフォルトの名無しさん :2006/02/17(金) 06:14:40
バイナリにパスがはいってたような

856 名前:デフォルトの名無しさん :2006/02/17(金) 09:58:21
Visual C++ で作った(リリース用の)バイナリって、
どこまで情報埋め込まれているか分からないから不安。
例えば何らかのフルパスが入ってるとすれば当然
Document and Settings\俺の名前\Visual Studio Projects\
みたいな情報も含まれているわけで、別に何か
困るわけでもないけど会社のPCだとそこは社員番号だったりして・・・
ちょっと嫌。

857 名前:デフォルトの名無しさん :2006/02/17(金) 10:04:10
(°д ゚)ハァ?

858 名前:デフォルトの名無しさん :2006/02/17(金) 10:06:33
リンカ設定のデバッグ情報の生成をONにしておくと
pdbファイルのフルパスがバイナリに突っ込まれるよ。
VC++8は何故かReleaseビルドまでONがデフォルトなので注意。

859 名前:デフォルトの名無しさん :2006/02/17(金) 10:16:09
Expr、Negative、Literalというクラスがあります。
Exprはabstract classで、Negative、LiteralはExprをinheritしたものです。

たとえばMainの中で、
Expr* e = new Negative( new Literal(3) ); と表記すると、
e = -3 となります。

質問ですが、この状況でdelete eとやれば、newで作られたNegativeとLiteralもちゃんとdeleteされるんでしょうか?
もしされないのならどうすればいいのか教えてください。
Exprのデストラクタをvirtualにすればいいのかと思いましたが、どうやればいいのか分かりません。
よろしくお願いします。

860 名前:デフォルトの名無しさん :2006/02/17(金) 15:21:00
何故そこでeが-3になるのか判らんが、
少なくともそのように設計されているなら、
それでいいだろ。

861 名前:デフォルトの名無しさん :2006/02/17(金) 15:23:07
>e = -3 となります。
?

>Exprのデストラクタをvirtualにすればいいのかと思いましたが、どうやればいいのか
virtual ~Expr() ;

862 名前:デフォルトの名無しさん :2006/02/17(金) 15:56:45
ぬるぽ

863 名前:859 :2006/02/17(金) 16:23:48
なんとか解決しました。
有難うございました >>860-861

864 名前:デフォルトの名無しさん :2006/02/17(金) 16:55:59
>>856,858
注意も何も、そんなオソロシイ場所にプロジェクトを作成するヤツが悪い

865 名前:デフォルトの名無しさん :2006/02/17(金) 17:01:07
>>864 そこしかいじれないようにIT部門が管理している。

866 名前:デフォルトの名無しさん :2006/02/17(金) 17:03:54
>>865
管理も何も、そんなオソロシイ会社に就職するヤツが悪い

867 名前:デフォルトの名無しさん :2006/02/17(金) 17:05:26
>>866 そこまで言われたらもう返す言葉がない。

868 名前:デフォルトの名無しさん :2006/02/17(金) 17:20:36
実際オソロシイな
そのIT部門のヤツらはバカ揃いか

つーか、おめぇはIT部門じゃねぇのかよ

869 名前:デフォルトの名無しさん :2006/02/17(金) 17:23:09
イット部門

870 名前:デフォルトの名無しさん :2006/02/17(金) 17:49:42
イっとるね


871 名前:デフォルトの名無しさん :2006/02/17(金) 19:13:34
思いついたギャグをすぐ書き込むのは止めたほうがいいよ。
オッサンからのアドヴァイスです。

872 名前:デフォルトの名無しさん :2006/02/17(金) 21:01:59
>>856
そのフォルダの俺の名前は、VCをインストールする時に
入力する名前がフォルダ名になるって事?

873 名前:デフォルトの名無しさん :2006/02/18(土) 00:10:55
>>872
856に書いてある「俺の名前」(Document and Settingsの直下)は
Windowsのユーザー名が当てはまるところ。VC++とは何の関係も無い。

874 名前:デフォルトの名無しさん :2006/02/18(土) 01:45:19
やヴぁい。俺のリリースしたexeにしっかり俺の名前が!?!?!
俺がテストデータに使った得ろ動画もプロジェクトのどっかに残っていて
あとで納品後に見つかったらどうしようガクブル


875 名前:デフォルトの名無しさん :2006/02/18(土) 02:17:25
>>874
通常は表に出てこないから大丈夫では?

876 名前:デフォルトの名無しさん :2006/02/18(土) 04:08:00
初歩的な質問ですんまへん、今って#include<iostream.h>とヘッダファイルの引用の .h をつけないで
#include<iostream>にするのが常識なんですか?

877 名前:デフォルトの名無しさん :2006/02/18(土) 04:15:34
あと>>851に書かれているint main(void)と括弧の中にvoidを入れるのも常識ですか?

878 名前:デフォルトの名無しさん :2006/02/18(土) 04:35:06
850,851じゃないけど・・・
<iostream.h>は古い書き方なので、.hつけないのが推奨。
int main(void)は、C++は型にうるさいのでつけた方がいいってことだろう。

879 名前:デフォルトの名無しさん :2006/02/18(土) 05:50:29
僕のはVC6だけど、バイナリエディタで見たが、
Debugは作った位置のパスがあったが、
Releaseの方は何も無い感じだった。

>>873
サンクス。そこで作品を作るとヤヴァイという事か。
デスクトップとか、ドライブのトップ辺りがいいのかな。

880 名前:デフォルトの名無しさん :2006/02/18(土) 06:47:56
だから、人に渡したりするときは、ビルドの設定変えればいいだけだろ・・・

881 名前:デフォルトの名無しさん :2006/02/18(土) 06:55:41
いや、リリースの方で出るって言っていたので。

882 名前:デフォルトの名無しさん :2006/02/18(土) 06:59:06
>>881
>>858


883 名前:デフォルトの名無しさん :2006/02/18(土) 07:10:42
>>876
ヘッダファイルをインクルードする時のこと全般で言えば別に .h を書かないのが常識なんて無いよ
C++のSTL等一部のヘッダファイルが、そもそものファイル名自体に .h がつかなくなってるだけ

884 名前:デフォルトの名無しさん :2006/02/18(土) 10:06:56
むしろヘッダ名がそのままファイル名そのものであるとは限らないというのが規格の立場。
VC++のヘッダ名 == ファイル名は実装方法の1つに過ぎない。

885 名前:デフォルトの名無しさん :2006/02/18(土) 11:20:05
>>882
あっw。すまん。

886 名前:デフォルトの名無しさん :2006/02/18(土) 14:28:41
VS 2005 C++だす
× String str = "Hello";
○ String ^str = "Hello";
いちち^付けないといけないみたいですね、
^ってどういう意味よ?
くだすれVisual C++(超初心者用)で聞いたら
該当スレで聞いてみたら? って言われたんで
ここでよかったかな?


887 名前:デフォルトの名無しさん :2006/02/18(土) 14:34:44
>>886
【.NET】 C++/CLI について語ろうぜ 【最適】
http://pc8.2ch.net/test/read.cgi/tech/1126450441/

888 名前:デフォルトの名無しさん :2006/02/18(土) 14:47:11
↑サンクス

889 名前:デフォルトの名無しさん :2006/02/18(土) 16:44:24
カスが

890 名前:デフォルトの名無しさん :2006/02/18(土) 17:36:59
質問させてください。
今コマンドラインからサーバにアクセスするクライアントプログラムを作っていて、
コマンドラインから動かす時にいろんなオプションをつける事が必要なのでgetoptを使っています。

int option = getopt(argc, argv, "p:s:r:f:");
switch(option)
case 'f' : filename = optarg; break;

の様に使っているのですが、引数が複数ある場合にどうすればいいかわかりません。
例えば、 prog -s 1.1.1.1 80 とコマンドラインから動かした場合、
optargに1.1.1.1は入ってるのですがどうやって80を取り出せばいいのか分かりません。

よろしくお願いします。

891 名前:デフォルトの名無しさん :2006/02/18(土) 17:39:58
getopt()なんて非標準関数を使わなければいいと思うよ。
まぁ、仕様をよく確認しろって話な訳だが。

・引き数つきオプションの取れる引き数は一つだけ。
・オプションではないパラメータはオプション処理後にargvから取り出す。

892 名前:デフォルトの名無しさん :2006/02/18(土) 17:46:45
ちょっと質問なんですが、通常のアプリケーション製作についてです。

WinMainで渡されてくるパラメータ(特にHINSTANCE)って、どこかに保存してますか?
俺はグローバルにコピーして置いてるんですが、こんなやり方でも問題無いですよね?
(↑グローバルはあんまり使うなと言われているので)

それとも何かお勧めの方法があったら参考までに教えて下さい。よろしくお願いします。

893 名前:890 :2006/02/18(土) 17:53:59
>>891
うーん、やっぱり自分で作らないと駄目かな。
返答ありがとうございました。

894 名前:デフォルトの名無しさん :2006/02/18(土) 17:57:59
>>892
<windowsx.h>のGetWindowInstanceを使えば、
ウィンドウハンドルから関連するインスタンスハンドルが手に入るから、それを俺は使っている。

895 名前:デフォルトの名無しさん :2006/02/18(土) 18:00:26
>>894
そんなAPIあったんだね。ありがと。

896 名前:デフォルトの名無しさん :2006/02/18(土) 18:13:24
C++/CLIを使っているんですが、
自分のクラスライブラリのシングルトンのクラスにあるSystem::Drawing::Size型のプロパティを変更しようとしたら
p->Size = System::Drawing::Size(64, 64);
と設定はできるのですが、
p->Size.Width = 64;
のように個別に設定しようとしたら必ず0になってしまいます。

どうすれば個別に設定できるようになりますか。

897 名前:デフォルトの名無しさん :2006/02/18(土) 18:17:23
>>896
>>887

898 名前:デフォルトの名無しさん :2006/02/18(土) 19:02:55
次スレからはタイトルに「非CLI」って入れなきゃだめかな

899 名前:デフォルトの名無しさん :2006/02/18(土) 19:24:57
C++/CLI はマイナーだから特に注意書きはいらんだろ

> 637 名前:デフォルトの名無しさん[sage] 投稿日:2006/02/18(土) 17:01:58
> GUI でモノを作りたければ、素直に MFC に進んだ方がいいと思われ
> C++/CLI はちと初心者にはお勧めできない。普通の方法では満足できなくなった玄人向け
> だから
> あとは、635 の進めるとおり、C# でモノを作ってみて満足できなくなったら、またこちらに
> 出戻ってくると言うのもいい

900 名前:デフォルトの名無しさん :2006/02/18(土) 19:37:09
必要だとすれば非GUI(コンソール)のスレ
立て逃げでよければ俺が立ててやってもいいけど

901 名前:デフォルトの名無しさん :2006/02/18(土) 19:42:52
C++/CLI スレも初心者は来て欲しくないそうだ

902 名前:デフォルトの名無しさん :2006/02/18(土) 19:51:33
そこで、質問。CLIってなんすか?C++は知ってましたが・・・

903 名前:デフォルトの名無しさん :2006/02/18(土) 19:52:04
CommonLanguageInfrastructure

904 名前:デフォルトの名無しさん :2006/02/18(土) 20:42:49
>>903
略された単語をしっかり見ると分かるもんですね

905 名前:デフォルトの名無しさん :2006/02/18(土) 20:59:30
Visual Studio 2005 C++です
秀和システム発行VisualC++逆引き大全 500の極意から
一部抜粋のプログラムなのですがコンパイルできません
プログラムの振る舞いとしては,を!に変換するだけの事なのですが
.\list_2.cpp(9) : error C2440: '=' : 'const char [2]' から 'char' に変換できません。
この変換が可能なコンテキストはありません。

2005のC++ではchar型の変数を定数として扱っているのでしょうか?


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

int main(void)
{
 char buf1[13]="Hello, world";

 buf1[5]="!";

 cout << buf1 << endl;

return 0;
}

906 名前:デフォルトの名無しさん :2006/02/18(土) 21:07:52
"!"と'!'の違いをわかった上で言ってるのか?

907 名前:デフォルトの名無しさん :2006/02/18(土) 21:09:17
>>905

buf1[5]="!";



buf1[5] = '!';

にしてみてくれ。
上のコードだと、!とぬるぽが入るから2文字になちゃーうよ

908 名前:896 :2006/02/18(土) 21:10:40
指定されたスレに行ってまいります。

909 名前:デフォルトの名無しさん :2006/02/18(土) 21:11:28
>>907
'\0' はヌルポではない!

910 名前:デフォルトの名無しさん :2006/02/18(土) 21:18:49
>>909
うん知ってるw
誰かにガッされたかったんだ。

今は反省している。

911 名前:デフォルトの名無しさん :2006/02/18(土) 21:24:02
>>907
スマソbuf1[5] = '!'; でやっても同じです秀和システムのHPからソースDLしてもやっぱり一緒でしたガ━━(;゚Д゚)━━ン!!
因みそのソース貼らせてもらいます本では
  char buf1[13]="Hello, world"; //文字の配列を確保します。
  char buf2[]="Hello, world"; //これでもOKです。
でしたが下記の様に変わっていました
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(void)
{
//char buf1[13]="Hello, world"; //文字の配列を確保します。
  const wchar_t* buf1[13]="Hello, world"; //文字の配列を確保します。
  const wchar_t* buf2[]="Hello, world"; //これでもOKです。
  buf1[5]='!'; // 6文字目を!に変えます。
  cout << buf1 << endl;
// 6文字目をヌル文字にすると、文字列はそこで終わりになります。
  buf1[5]=0;
  cout << buf1 << endl;
//文字列を全部1から作成することもできます。
  char buf3[10];
  buf3[0]='H';
  buf3[1]='e';
  buf3[2]='l';
  buf3[3]='l';
  buf3[4]='o';
  buf3[5]=0; //最後の0(ヌル文字)を忘れずに
  //要素数が余る分には問題はありません。
  cout << buf3 << endl;
}


912 名前:905 :2006/02/18(土) 21:32:32
Borland C++ではコンパイルできました
なんでだろう?

913 名前:デフォルトの名無しさん :2006/02/18(土) 21:33:20
>>911
> const wchar_t* buf1[13]="Hello, world"; //文字の配列を確保します。
> const wchar_t* buf2[]="Hello, world"; //これでもOKです。
全然良くない。

あと、ヌル文字は0でも問題ないが、'\0'が一般的。

914 名前:デフォルトの名無しさん :2006/02/18(土) 21:42:21
たぶんC++スレで質問した方がまともな回答が得られる。
このスレでその辺の低レベルな質問に答えてるのは初心者だから

915 名前:デフォルトの名無しさん :2006/02/18(土) 21:46:57
それっぽいソース探してきたが、(chapter2\p51-2.cpp)
const wchar_t* ってどっからでてきたんだw

#include <iostream>
using namespace std;

int main(void)
{
char buf1[13]="Hello, world"; //文字の配列を確保します。
char buf2[]="Hello, world"; //これでもOKです。

buf1[5]='!'; // 6文字目を!に変えます。
cout << buf1 << endl;

// 6文字目をヌル文字にすると、文字列はそこで終わりになります。
buf1[5]=0;
cout << buf1 << endl;

//文字列を全部1から作成することもできます。
char buf3[10];
buf3[0]='H';
buf3[1]='e';
buf3[2]='l';
buf3[3]='l';
buf3[4]='o';
buf3[5]=0; //最後の0(ヌル文字)を忘れずに
//要素数が余る分には問題はありません。
cout << buf3 << endl;
}


916 名前:905 :2006/02/18(土) 21:49:13
'\0'にしても、VS2005C++ではなんも変わりません
.\list_2.cpp(8) : error C2440: '初期化中' : 'const char [13]' から 'const wchar_t *[13]' に変換できません。
この変換が可能なコンテキストはありません。
こんな調子です(;´∀`)
Borland C++は
#include "stdafx.h"
をコメントアウトして
  const wchar_t* buf1[13]="Hello, world"; //文字の配列を確保します。
  const wchar_t* buf2[]="Hello, world"; //これでもOKです。

  char buf1[13]="Hello, world";
  char buf2[]="Hello, world";
こうしたらすんなりコンパイルできました



917 名前:デフォルトの名無しさん :2006/02/18(土) 21:53:19
要するに>>915そのまんまなわけだ。
VC++でもそうしたら?

918 名前:905 :2006/02/18(土) 21:54:35
>>915
ここですが
ttp://www.shuwasystem.co.jp/books/7980/1096-0/1096-0.html
Visual C++ .NET 逆引き大全 500の極意

サポート項目 > 【ダウンロード】
この度は、「Visual C++ .NET 逆引き大全 500の極意 」をお買い上げいただきありがとうございました。
本書には以下のサポートがあります。 (2005/6/27更新)



919 名前:デフォルトの名無しさん :2006/02/18(土) 21:55:17
わざと間違い探しでもやってるんだろ
気づけよ

920 名前:905 :2006/02/18(土) 21:58:40
おや?
>>915のソースに
#include "stdafx.h"
を足したらデキマスタ


921 名前:デフォルトの名無しさん :2006/02/18(土) 21:59:27
>>905のソースでbuf1[] = "!"にしとけ

922 名前:915 :2006/02/18(土) 22:00:33
>>918
ええ、そこですよ。
で、>>911のおかしなソースのファイル名は何ですか。

923 名前:デフォルトの名無しさん :2006/02/18(土) 22:02:24
>>920
足さんでもいいと思うんだが。

924 名前:905 :2006/02/18(土) 22:09:18
>>922
解凍して、p51-2.cppのファイルをWクリックしてVisual Studioを起動したら
確かに、
  const wchar_t* buf1[13]="Hello, world"; //文字の配列を確保します。
  const wchar_t* buf2[]="Hello, world"; //これでもOKです。
に変わっていました、今再解凍して確かめたら、
char buf1[13]="Hello, world"; //文字の配列を確保します。
char buf2[]="Hello, world"; //これでもOKです。
だったYO
>>923
確かにそうですね藁

925 名前:デフォルトの名無しさん :2006/02/18(土) 22:43:03
---------------環境---------------
VC++6.0、WindowsXP HomeEdition SP2
----------------------------------
習作でMIDIを解読、線形リストに登録するプログラムを作成したのですが、
データの多いMIDIを扱った場合エラーも無くプログラムが終了してしまうことがあります。

for(int i=0;i<tracks;i++)
{
printf("[%02d]トラックを読み込み...",i);
pnt = trackdata[i].Init(pnt);
printf("完了\n");
}

上記の部分で、「〜読み込み...」まではでるのですが、「完了」の文字が出る前に
exit() でもやったかのようにプログラムが終了してしまいます。
ファイルサイズの少ないMIDIファイルでは問題なく動作しています。


ひょっとしたらと思うのですが、メモリを使いすぎると勝手にプログラムが終了してしまうということはあるのでしょうか?

926 名前:デフォルトの名無しさん :2006/02/18(土) 23:28:37
ここは初心者が初心者の質問に答えるスレ

927 名前:デフォルトの名無しさん :2006/02/19(日) 00:27:40
VC++6.0で自作したアイコンにハンドラを作成する際には「表示」→「ClassWizard」でいけるのですが、.net2003ではどのようにするのでしょうか?
右クリックでも「イベントの追加」が出てこないのですが。

928 名前:デフォルトの名無しさん :2006/02/19(日) 01:56:19
http://www.microsoft.com/japan/msdn/visualc/
Visual C++って今では
Visual C++ 2005
Visual C++ .NET 2003
とありますが、それより前のVisual C++ 6.0で
Windows用のアプリを作っていくことにおいて
今後問題があるようなことってありますか?

929 名前:デフォルトの名無しさん :2006/02/19(日) 01:58:35
>>928
それ以前はC++標準への準拠度が低く、STLすら完全に使えない。
Cを使うのなら別に問題ないだろうけど。

930 名前:デフォルトの名無しさん :2006/02/19(日) 02:07:26
>>929
>STLすら完全に使えない。
なるほど、レスありがとうございました。やっぱす最新版を買い直すかな・・・

931 名前:デフォルトの名無しさん :2006/02/19(日) 03:54:57
メモリダンプで ?? と表示されているアドレスは何を意味しているのでしょうか?
ヘルプを読んでみても記述されている箇所が見当たりません。


932 名前:デフォルトの名無しさん :2006/02/19(日) 06:09:18
ゆとりゆとり

933 名前:デフォルトの名無しさん :2006/02/19(日) 14:14:52
Win32SDK、VC++6.0で開発しています。

WinMain関数の最後にreturn msg.lParam; を行いますが、この後またWinMainに戻って来るというバグが出ました。
Debugモードだと出ないのに、Releaseモードでだけ出る現象なのでどうやって追えば良いか解らないのですが、Releaseモードでコンパイルした
exeをIDE側のソースコードと連動させるにはどうしたら良いのでしょうか。

そもそも、WinMainにまた戻ってくるというのはどういう原因が考えられるでしょうか?

934 名前:デフォルトの名無しさん :2006/02/19(日) 15:05:56
戻り値はwParamの方。

935 名前:デフォルトの名無しさん :2006/02/19(日) 15:53:40
>>933
デフォルトではリリースでもデバッグできる。

936 名前:デフォルトの名無しさん :2006/02/19(日) 16:03:58
>>934
あれ、マジっすか。ポカやってしまいましたか。

>>935
付属してるMSDN見ながらやってるんですが、どうも最適化でぐちゃぐちゃになるっぽくてうまくいかんのです。
コードの実行速度の最適化 だけで出る現象なんですよねぇ。。。。。
サイズの最適化やデフォルトだと出ないと言う。


ぐぐりながらいろいろ施行してみます。

937 名前:デフォルトの名無しさん :2006/02/19(日) 17:40:44
>>936
最適化したコードでブレークポイントを設定しているとデバッガが混乱することがあるけど大丈夫?

938 名前:デフォルトの名無しさん :2006/02/20(月) 05:52:31
BC++より移行中なのですが、コンパイラがBC++かVC++を判定するにはどのようにしたらよいですか?

939 名前:デフォルトの名無しさん :2006/02/20(月) 06:04:59
>>938
VC++は _MSC_VER というマクロシンボルを定義してる
Borlandのが何を定義してるかは知らんが、同じように
何か固有の物を定義してるはず。
それを#ifdefで調べろ

940 名前:デフォルトの名無しさん :2006/02/20(月) 16:21:43
__BORLANDC__

941 名前:デフォルトの名無しさん :2006/02/20(月) 18:25:48
つーか、BC++かVC++かのどちらかだけなら、Borlandのが何を定義してるかとか気にせんでも
#ifdef _MSC_VER
#else
#endif
でいいべ?

942 名前:デフォルトの名無しさん :2006/02/21(火) 02:10:01
_MSC_VERは駄目だろう
VC++でなくても定義されるはず
BOOST_MSVCでいけ

943 名前:デフォルトの名無しさん :2006/02/21(火) 02:19:58
>>942
されてないされてない。
それに生のVC++使ってもBOOST_MSVCなんか定義されないし。

944 名前:デフォルトの名無しさん :2006/02/21(火) 02:35:06
>>943
されているされている
君はもうレスするな。

BOOST_MSVC
Defined if the compiler is really Microsoft Visual C++, as opposed to one of the many other compilers that also define _MSC_VER.

945 名前:デフォルトの名無しさん :2006/02/21(火) 02:47:53
で、生のVC++では定義されないBOOST_MSVCに
どれほどの意味があるわけ?

946 名前:デフォルトの名無しさん :2006/02/21(火) 03:26:56
VC以外で _MSC_VER が定義される環境って何処か知っておきたい。

947 名前:デフォルトの名無しさん :2006/02/21(火) 07:48:41
BOOST_MSVC ってどこで定義されてるの?

948 名前:デフォルトの名無しさん :2006/02/21(火) 08:47:33
>>947
ttp://www.boost.org/boost/config/compiler/visualc.hpp

949 名前:942=944=948 :2006/02/21(火) 08:55:08
ごめんなさい、俺が愚か者でした

950 名前:デフォルトの名無しさん :2006/02/21(火) 12:20:27
無料でwindows DLL作れますか?

951 名前:デフォルトの名無しさん :2006/02/21(火) 12:35:57
BOOSTって思いっきり書いてあるのに
どんな思考回路なら素のVCで定義されてると思えるんだろうな

952 名前:デフォルトの名無しさん :2006/02/21(火) 14:38:55
>>949
おーい、逃げるな。せめて>>946には答えていけ。

953 名前:デフォルトの名無しさん :2006/02/21(火) 19:52:01
ICCのWin版のIA-32だと定義されてるな<_MSC_VER

954 名前:デフォルトの名無しさん :2006/02/21(火) 21:46:30
INITCOMMONCONTROLSEXと書く時ドキッとします

955 名前:デフォルトの名無しさん :2006/02/21(火) 22:04:13
そういや、InitCommonControlsは何もしない関数だって話があったなー。
あれをみたときはへー、と思ったものだ。

956 名前:デフォルトの名無しさん :2006/02/21(火) 23:48:04
呼び出すことによって、コントロール使用前にDLLが確実にロードされるようにするだけだからな

957 名前:デフォルトの名無しさん :2006/02/22(水) 20:35:04
>>956のレスを見て、>>955の気持ちを理解した

958 名前:デフォルトの名無しさん :2006/02/22(水) 23:41:55
質問です。Windows 2000、SP4 です。

VC++ 6.0 で動いていたプロジェクトを 2005 でビルドすると、libc.lib が見つかりませんというリンクエラーがおきました。
コンパイルオプションでは /ML ではなく /MT を指定しており、他に libc.lib とリンクしている箇所が見当たらないのですが、
なぜか自動的にリンクしようとします。

廃止されたライブラリがデフォルトでリンクされるというのも考えづらいのですが、
とりあえず現在は、「特定のライブラリを無視する」 に libc.lib を入れてエラーを回避しています。
が、何かが間違っている気がします。

なぜ libc.lib にリンクしようとするのか、もっとスマートにエラーを解決する方法はないのか。
よろしくお願いします。




959 名前:デフォルトの名無しさん :2006/02/22(水) 23:47:43
はいはいFAQFAQ

960 名前:デフォルトの名無しさん :2006/02/23(木) 00:34:43
少し重めのプログラムを書いているのですが、最適化のために
コードのプロファイルをしたいと思っています。

Visual C++.net standard version 2003を使っているのですが、
そもそも、そんな機能はあるのでしょうか?

プロファイラに手をだそうと思ったのがはじめてで、いろいろ検索してみたのですが
いまいちよくわかりません。

何か参考になるweb等あれば教えていただければ幸いです。

よろしくお願いします。

961 名前:デフォルトの名無しさん :2006/02/23(木) 08:28:42
>>959
お教えいただけないでしょうか・・・。
libc.lib で検索しても、/ML を指定して標準 C++ ライブラリのヘッダをインクルードすれば libc.lib にリンクされる、
2005 では /ML は廃止された、までの情報しか取得できませんでした。


962 名前:デフォルトの名無しさん :2006/02/23(木) 10:23:01
VC++2005を昨日入れたばっかりです。

Cfileでバイナリファイルを扱おうと、afx.hをincludeしたら、エラーが山のように出ました
Form1.hの#pragma onceの上に入れたんですけど間違い?

10年以上前にTurbo Cで組んでた時とは環境が全然違うので戸惑ってます


963 名前:デフォルトの名無しさん :2006/02/23(木) 12:59:35
Form1.h
そもそもMFCプロジェクト?

964 名前:デフォルトの名無しさん :2006/02/23(木) 13:27:21
仮想リストビューでチェックボックスって使えるの?

965 名前:デフォルトの名無しさん :2006/02/23(木) 17:30:30
すいません、マルチスレッドアプリでの動作について質問があります。

1CPUのWindows XP Pro環境で、VC++.NET(MFC)にてアプリを作成しています。

A,B,Cの3つのスレッドから参照される、Xというクラスがあります。

Xクラスは、配列構造のデータ領域を持ち、以下の3つのメソッドでその
データ領域にアクセスすることができます。
 ・Add   配列の次の要素にデータを入れる
 ・Get   配列の次の要素のデータを返す
 ・Remove  配列の次の要素のデータを削除する
 ※それぞれのメソッドは、内部的に次の要素のインデックスを管理して
  おり、データ領域の前から順に操作を実行します

このXクラスは、アプリのメインスレッドでインスタンス化され、スレッド
A、Bはそのポインタを使ってアクセスしています(つまり、Xクラスオブジェ
クトは1つ)。

スレッドA,Bからは、次々にAddメソッドでデータを投入されます。
スレッドCからは、次々にGetメソッドで要素を取得し、Removeで削除して
いきます。

↓続く

966 名前:デフォルトの名無しさん :2006/02/23(木) 17:31:44
このとき、スレッドAでAddメソッドコール中に、スレッドBからのAddメソッド
コールは起きうるでしょうか?

気にしているのは、Addメソッドが同時に処理されてしまうと、内部で管理
しているインデックス値が、それぞれの処理で重なってしまい、片方のAdd
データが他方のAddで消されてしまうのではないかということです。

CPUが1つで、オブジェクトも1つなので、このような現象は発生しないと
考えているのですが、どうでしょうか?

みなさんのお知恵をお貸しくださいm(_ _)m


967 名前:デフォルトの名無しさん :2006/02/23(木) 18:01:51
>CPUが1つで、オブジェクトも1つなので、このような現象は発生しないと
スレッドAがAddの途中でCPUの処理が他のスレッドに移ることがあるのは当然。
スレッドAがAddしているときにスレッドBにCPUが移ってAddするのは確率の問題。

968 名前:デフォルトの名無しさん :2006/02/23(木) 18:02:46
マルチスレッドについて全く調べてないに1票。

969 名前:デフォルトの名無しさん :2006/02/23(木) 18:03:46
多分次につまずくのはデッドロック

970 名前:デフォルトの名無しさん :2006/02/23(木) 18:06:04
つか、スレッドをスイッチのときに、オブジェクトうんぬんなんて関係ないだろ。
そんなこと考慮してたら、他のスレッドに切り替えられないだろ!

971 名前:965 :2006/02/23(木) 18:31:06
色々とご意見ありがとうございます。

Windowsのマルチタスクは、タイムスライスではないと思っていたので
すが、タイムスライス方式なんですか?
処理をOSに戻すまでは、別のスレッド・プロセスに処理が移ることは
ないと思っていたのですが・・・
どうやら、私の勘違いだったようで...


972 名前:デフォルトの名無しさん :2006/02/23(木) 18:41:57
>>971
Win95からそうだけど…そうじゃなかったのは、Win3.1だよ。

973 名前:デフォルトの名無しさん :2006/02/23(木) 18:42:16
Windowsは10年前からプリエンプティブだよ。

974 名前:デフォルトの名無しさん :2006/02/23(木) 18:42:24
お前はWindows3.1でも使っているのかと。

975 名前:965 :2006/02/23(木) 18:43:54
私の認識は、初期Windowsのマルチスレッドだったようです。
#お恥ずかしいm(_ _)m

969さんの指摘に注意しつつ、セマフォをぶち込むことにします。
ありがとうございました。


976 名前:デフォルトの名無しさん :2006/02/23(木) 18:44:20
>>971
昔の16ビットWindowsはたしかにノンプリエンプティブなマルチタスクだった。
今の32/64ビットWindowsはプリエンティブなマルチタスクになっている。

977 名前:デフォルトの名無しさん :2006/02/23(木) 18:45:34
>>971
なんてAPIで処理をOSを戻してたの?

978 名前:デフォルトの名無しさん :2006/02/23(木) 18:47:39
GetMessageとか。

979 名前:デフォルトの名無しさん :2006/02/23(木) 18:47:47
>>975
わかっているとは思うがスレッドCからGetするときも気をつけるように。
古いインデックスを頼りに範囲外アクセスなんていったら泣きだからな。

980 名前:デフォルトの名無しさん :2006/02/23(木) 22:04:32
掛け算のプログラムだす
配列宣言をこうすれば巧くいきますが
int a[9]={1,2,3,4,5,6,7,8,9};
int b[9]={1,2,3,4,5,6,7,8,9};
向学心から、C++では配列のコピーが出来ないのだろうかと
考え小一時間、答えが出せません
コピーの仕方があれば教えてください、
具具ってみたらJAVAにはあるみたいなんですが、C++には無いのかな?

// p99.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//掛け算九九JR━―━―━(゚∀゚)━―━―━― !!

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

int main(void)
{
 int a[9]={1,2,3,4,5,6,7,8,9};
 int b[9];
 a[9]=b[9];//コンパイルは通るが、実行したら、わけわかめのエラーがでる
 //int b[9]={1,2,3,4,5,6,7,8,9};

 for(int j=0; j<9; j++){
   for(int i=0; i<9; i++){
     cout << a[j]*b[i] << " ";
     }
   cout << endl;
   }
}


981 名前:デフォルトの名無しさん :2006/02/23(木) 22:26:31
あぁ?
バカかおめぇ?
そんな配列要らねぇし
仮に配列使うとして、配列1つでいいし

982 名前:デフォルトの名無しさん :2006/02/23(木) 22:32:52
そんな事は、分かっているんだが
っていうか、配列のコピーの仕方教えてくれろ
こうだろ↓
#include "stdafx.h"
#include <iostream>
using namespace std;

int main(void)
{
int a[9]={1,2,3,4,5,6,7,8,9};
  for(int j=0; j<9; j++){
    for(int i=0; i<9; i++){
     cout << a[j]*a[i] << " ";
  }
 cout << endl;
  }
}


983 名前:デフォルトの名無しさん :2006/02/23(木) 22:34:36
>>980
a[9]=b[9];
これが何をしているのか理解できないのなら、C/C++の基本がなってないという事。
最初から勉強しなおす事をお勧めする。

984 名前:デフォルトの名無しさん :2006/02/23(木) 22:42:53
こうだよ低脳

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

int main(void)
{
  for(int j=1; j<10; j++){
    for(int i=1; i<10; i++){
     cout << j*i << " ";
  }
 cout << endl;
  }
}


985 名前:デフォルトの名無しさん :2006/02/23(木) 22:43:44
>>980
・STLのコンテナを使う。
・配列をメンバに持つ構造体を使う。
・配列の要素を一つずつコピーする。

986 名前:デフォルトの名無しさん :2006/02/23(木) 22:47:54
それも、わかってるんだがな
( ・∀・)アヒャ
int a[9]={1,2,3,4,5,6,7,8,9};
を構造体宣言すれば、配列bにコピー出来るのも、既に分かっている
っていうかもっと、簡単なコマンドってないのかなと
聞いてみる

987 名前:デフォルトの名無しさん :2006/02/23(木) 22:53:28
>>985
ん?
コンテナなるものがあるのか
>>・STLのコンテナを使う。
これ(・∀・)イイ!!
>>・配列をメンバに持つ構造体を使う。
漏れでも使える
>>・配列の要素を一つずつコピーする。
これも使える
どう書くの?
教えて( ゚д゚)クレー


988 名前:デフォルトの名無しさん :2006/02/23(木) 22:58:52
C++スレ行け

989 名前:デフォルトの名無しさん :2006/02/23(木) 23:03:00
そういうな、教えてくれ
STLのコンテナ
<ノ丶`Д´>ノ マンセー

990 名前:デフォルトの名無しさん :2006/02/23(木) 23:04:25
教えてクン(*´Д`)ハァハァ

991 名前:デフォルトの名無しさん :2006/02/23(木) 23:04:46
>>980
memcpyじゃだめなの?

992 名前:デフォルトの名無しさん :2006/02/23(木) 23:06:15
やっぱバカの臭いがするな

993 名前:デフォルトの名無しさん :2006/02/23(木) 23:12:29
C++スレ行けばいいのに

994 名前:デフォルトの名無しさん :2006/02/23(木) 23:15:37
memcpyはint型の変数でもコピーできるのかな
ちょっとやってみよう、だめだったらC++行きたいが
ねもいしな


995 名前:964 :2006/02/24(金) 00:04:15
int a[9] = {1,2,3,4,5,6,7,8,9};
int b[9];
memcpy(b, a, sizeof(a));

C言語初心者スレに行ってくださいm(__)m


996 名前:デフォルトの名無しさん :2006/02/24(金) 00:05:29
>>995
( ´Д`) 黙れリストビュー

997 名前:デフォルトの名無しさん :2006/02/24(金) 00:05:55
>>995
( ´Д`) 黙れチェックボックス

998 名前:958 :2006/02/24(金) 00:44:50
無理ですかね・・・。どなたか分かる方がいらっしゃればお願いします。
/MT、/MTd、どちらにしても libc.lib とのリンクエラーが出ます。(libcd.lib ではない)
何度かフルコンパイルも行ってるのですが・・・。


999 名前:デフォルトの名無しさん :2006/02/24(金) 00:47:12
埋め

1000 名前:デフォルトの名無しさん :2006/02/24(金) 00:47:43
  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    1000
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|


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