★初心者にVisual C++を教えるスレ★ Part33at TECH
★初心者にVisual C++を教えるスレ★ Part33 - 暇つぶし2ch771:デフォルトの名無しさん
09/06/04 00:39:32
VC++2005でCStringを使おうとすると以下のエラーが出てしまいます。
何か設定など必要なのでしょうか?

error C2065: 'CString' : 定義されていない識別子です。

772:デフォルトの名無しさん
09/06/04 00:48:17
#include <tchar.h>
#include <atlstr.h>

773:デフォルトの名無しさん
09/06/04 01:01:37
>>771
VC++2005eeじゃね?
有料版じゃないとMFCは使えないよ

774:771
09/06/04 04:55:54
>>772様 >>773様 御回答ありがとうございます。

VC++2005eeにて文字列変数のコピーをするにはどうしたらよいのでしょうか?

775:デフォルトの名無しさん
09/06/04 07:11:09
lstrcpy

776:デフォルトの名無しさん
09/06/04 07:28:37
文字列変数というのがchar*なら>>775

#include <string>してstd::string使うとか。
C++/CLIならSystem::Stringもあるけどまあ別物か

777:デフォルトの名無しさん
09/06/04 08:11:08
もしかして標準C/C++の基本がまだできてないなら
C/C++スレへ行け

778:757
09/06/04 11:55:50
>>764
C++と.NETだとC++のランタイムがスタティックリンクができないので
.NETが入ってたとしてもC++のランタイムのインストールが必要って聞いたんですけど
そんなことないですか?


プロジェクトのプロパティでランタイムライブラリを
マルチスレッド デバッグ (/MTd)
に変えてリビルドしたら
コマンド ライン error D8016 : コマンド ライン オプション '/MTd' と '/clr:pure' は同時に指定できません。
と言われました。
マルチスレッド デバッグ (/MT)でも同じ感じです。

>>765
作りたいのは「ブラウザとかのツール系」です。
.NETなのかな~

まあ、両方ザックリ本読んで考えて見ます。




779:デフォルトの名無しさん
09/06/04 13:44:07
RPGゲームを作っています

main関数の中でとりあえず作ってみたのですが、
これをそのままクラスにするいい方法はありますか?
コード自体はたいした量ではないので、作り直すのは簡単なのですが
後学のためにも教えてください。

それとも戦闘画面をメインにし、フィールドを歩くときは別フォームを呼び出したりするほうが良いでしょうか


780:デフォルトの名無しさん
09/06/04 14:11:49
地道に作り直せ

781:デフォルトの名無しさん
09/06/04 14:29:42
VS2003で作成されたActiveXコントロールの更改をしているのですが、
最適化オプションが、
・プログラムサイズ
・実行速度
の時は問題ないのですが、
・無効
・最大限の最適化
・カスタム
にして、リビルドを行うと、Regsvr32で以下のエラーが発生します。
「LoadLibrary("○○.dll")に失敗しました。指定されたモジュールが見つかりません。」
原因が全くわかりません。
どなたか原因をご存知の方教えて下さい。

782:デフォルトの名無しさん
09/06/04 14:41:48
>>780
うーん、残念です
ありがとうございました~

783:デフォルトの名無しさん
09/06/04 15:18:13
>>781
Dependency Walker などを使って依存しているライブラリに違いが
ないか調べてみるとか

784:デフォルトの名無しさん
09/06/04 16:12:10
元々自分で作った物じゃないから作りを理解してないんだろ

785:781
09/06/04 18:13:26
>>783
素晴らしいToolの紹介をありがとうございました。

最適化無効でビルドされたDLLと最適化実行速度でビルドされたDLLを
調べてみたところ、Regsvr32が失敗する方(最適化無効)で開けないDLLがあるというようなエラーが出ました。
そのDLLをプロジェクトに配置してみたら、ビルド後イベントのRegsvr32が成功し、エラーはなくなりました。

リビルドではエラーはでなくなったのですが、コマンドでRegsvr32を実行すると、
やはり同様のエラーが出て登録はできません。(リビルド時に登録されたDLLを登録解除もできません。)

786:781
09/06/04 18:15:00
続きです。

これは何がいけないのでしょうか…?

引き続き、ご存知の方教えてください。

787:デフォルトの名無しさん
09/06/04 18:55:51
class Test1
{
virtual ~Test1() = 0 {}
};
class Test2
{
virtual ~Test2() = 0 {}
};
class Test3 : virtual public Test1, virtual public Test2
{
virtual ~Test3() = 0 {}
};
これをコンパイルすると、
warning C4505: 'Test3::~Test3' : unreferenced local function has been removed
という警告が出るのですが、何が問題なんでしょうか?

788:デフォルトの名無しさん
09/06/04 18:58:19
>>785
気になるのはDLLの配置場所かな

確かDLLのロードは
- 環境変数PATHで指定されたディレクトリ
- exeのある場所
- カレントディレクトル
などを参照したと思うけど、
VC上からビルドして実行すると、たまたまカレントディレクトリが上記の <project>
になるので、DLLは <project> 直下においても読み込んでくれる
しかし、コンソールから実行する場合、カレントディレクトリやPATHに注意しないと
うまくロードされないとか

789:781
09/06/04 19:25:52
>>788
まさにその通りでした。配置場所をバイナリファイルと同じ場所に配置することで解消しました。
(一層上のプロジェクトファイルに配置してました。)

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

ただ、最適化オプションの違いでエラーになったり、ならなかったりするのが
不明のままなのが気になりますが…。

790:デフォルトの名無しさん
09/06/04 19:44:00
C++初心者です。
TextBoxを画面に表示したいんですが上手く作成できません。
プロジェクト作成でWIN32を選択してからテキストボックスを作りたいと思っています。

TextBox textBox1;
textBox1 = gcnew TextBox;
textBox1->Location = Point(100, 16);
Controls->Add(textBox1);

をソースに追加したのですが

error C2065: 'TextBox' : 定義されていない識別子です。
error C2146: 構文エラー : ';' が、識別子 'textBox1' の前に必要です。
error C2065: 'textBox1' : 定義されていない識別子です。
error C2065: 'gcnew' : 定義されていない識別子です。
error C2146: 構文エラー : ';' が、識別子 'TextBox' の前に必要です。
error C2227: '->Location' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
型は ''unknown-type'' です。
error C3861: 'Point': 識別子が見つかりませんでした
error C2065: 'Controls' : 定義されていない識別子です。
error C2227: '->Add' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
型は ''unknown-type'' です。

というコンパイルエラーが出ます。
テキストボックスはフォームでないと作成できないのでしょうか?
環境はMicrosoft Visual C++ 2005です。

791:デフォルトの名無しさん
09/06/04 21:02:55
いろいろ間違いすぎてどこから説明したものやら・・・
とにかく最初から最後まで間違ってる

792:デフォルトの名無しさん
09/06/04 21:32:30
>>790
そのTextBoxは.NETのWindows Formsの一部。
CLRプロジェクト以外では使えない。
おとなしく.NET Frameworkの世界にいなさい。

793:デフォルトの名無しさん
09/06/04 23:08:25
一体どこからそういう情報もってきてんだ?
情報仕入れたとこに全部書いてるだろ

794:デフォルトの名無しさん
09/06/04 23:09:20
入門書を4~5冊はやらないと全体が見えないよな

795:デフォルトの名無しさん
09/06/04 23:11:38
>>793>>778にレスね

796:デフォルトの名無しさん
09/06/04 23:17:58
VC6 での質問です
変数の値が変更された時にブレークポイントがひっかかるようにする方法って
どのようにすればできるのでしょうか?

797:デフォルトの名無しさん
09/06/04 23:41:39
[編集] メニューの [ブレークポイント] をクリックします。


[ブレークポイント] ダイアログ ボックスで、[データ] タブをクリックします。


[評価される式を入力してください] ボックスに変数名を入力ます。


[OK] をクリックしてブレークポイントを設定します。

798:デフォルトの名無しさん
09/06/04 23:53:07
>>797
できました
ありがとうございます

799:デフォルトの名無しさん
09/06/05 15:50:52
VC2008EEでデバッグしています。
forのループ内にブレークポイントを置いてステップアウトしているんですが、
ループの回数が1000単位なので、1回ずつ変数の状態を見るのは手間がかかりすぎてしまいます。
例えば100回に1回だけ変数の状態を見たい場合、いい方法はないですか?

800:デフォルトの名無しさん
09/06/05 15:55:42
>>799
>>796-797の応用

801:デフォルトの名無しさん
09/06/05 17:22:52
>>800
6と2008EEの違いのせいか、>>797の項目が見つからず、
いろいろいじってたらヒットカウントというぴったりの物がありました。
どうもでした。

802:デフォルトの名無しさん
09/06/05 18:21:37
いまここに、Ansi C で書いたスタティックライブラリ c.lib があります。
そのライブラリをつかって、C++で書いたアプリケーション(GUIに依存しない部分を記述したもの)myapp があります。
GUI はお手軽に C# で書きたいので、アプリケーション部分 myapp を dll 化して、それを C# から呼び出したいです。

そこで、myapp.dll をつくりたいのですが、いざビルドしてみると、myapp から c.lib の関数を参照している部分でリンカエラーになります。
c.lib をスタティックリンクさせた状態で myapp.dllをつくるにはどうすればよいでしょうか?
c.dll を作るのがめんどくさいので、myapp.dll が c.lib を内包してくれるとありがたいのですが。




803:デフォルトの名無しさん
09/06/05 20:22:08
できるはずだから、リンカオプションがまずいだけ。

804:デフォルトの名無しさん
09/06/05 22:17:43
extern "C"
{
#include "[c.libの関数のヘッダ]"
}
でもリンクエラーが出る?

805:デフォルトの名無しさん
09/06/05 22:19:15
リンカオプションですか....
c.lib をスタティックリンクするのって、もしかして
myapp.dll のソースで #pragma comment(lib, "c.lib")
だけではダメだったりしますか?
(もちろん c.lib のあるディレクトリにパスが通ってるのが前提として)


806:デフォルトの名無しさん
09/06/05 22:34:56
それであっている。EXEでLIB使うときと同じ。
そういえば、そのLIBとDLLでCRTの設定は同じ?
異なっているといるとよくリンカに怒られる。

807:デフォルトの名無しさん
09/06/05 23:58:52
現在デバッグビルドで試していますが、ランタイムライブラリの設定は c.lib と myapp.dll の両方で
「マルチスレッドデバッグ (/MTd)」で統一してあります。

呼び出し規約が c.lib だとデフォルトの設定のままで __cdecll に、
mydllではDLLのお約束(?)に従って __stdcall になっているのが気になりますが、
これは問題があったとしても実行時にでるものであって、リンカエラーとは関係ないですよね...
書き忘れましたが、リンカエラーというのは

未解決のシンボル "int __stdcall AAA()" (?AAA@@BBB@@CCC@D" が関数 "public: int __thiscall EEE::FFF() (?FFF@EEE@@GGG) で参照されました

というのがつらつらでてくるものです。
myapp(C++)もともと exe として作っていて、そこから c.lib を参照するために、
cライブラリには既に extern "C" が記述してあります。

そしてその exe はきちんとビルドできて、実行できていました。

それでも念のため、ライブラリの #include をさらに extern "C" で囲んでみると、
なぜか Direct3D のヘッダ d3dx9math.h で大量の

"operator *" Cのリンゲージ関数はC++のクラス D3DXVECTOR2を戻せません

メッセージがでました。

もうすこし試してみます。

808:デフォルトの名無しさん
09/06/06 00:34:48
呼び出し規約の違いはdefファイル使わねえとそのまま名前装飾に影響する

809:デフォルトの名無しさん
09/06/06 00:54:26
そういうことで惑うなら、呼出規約はソースコードに
いちいち書いたほうがいいよ。コンパイラオプションにて一括で指定するのではなく。

810:デフォルトの名無しさん
09/06/06 02:08:13
MFCのMDIで秀丸みたいなマルチドキュメントにしたいんだけど(タブ形式)
普通にEditビューじゃタブ形式にならないんだけど、どうすればいいの?

811:デフォルトの名無しさん
09/06/06 03:03:48
なるだろ?
2008のSP1限定だけど

812:807
09/06/06 11:32:31
なるほど、呼び出し規約を変えたら嘘のようにエラーがなくなりました。
いままで呼び出し規約を気にした事はなかったので、良い勉強になりました。どうもありがとう。

813:デフォルトの名無しさん
09/06/06 12:15:31
なるほどなるほど

814:デフォルトの名無しさん
09/06/06 12:30:33
VC++でWin32プログラムを作成しています。
VS2008の雛形を元に、DialogBoxを追加しようとしているのですが上手く出来ません。
現在はファイルとヘルプの2個だけです。
やったこと
(1)WndProc()のmessage引数で、WM_CREATEが渡された場合に
DialogBox(hInst, MAKEINTRESOURCE(IDD_XXXBOX), hWnd, Xxx);
と書いた
(2)Xxxは以下のような関数です
INT_PTR CALLBACK Xxx(HWND, UINT, WPARAM, LPARAM);

コンパイルは出来たのですが、DialogBoxは増えませんでした。
どうかやり方を教えてください。



815:デフォルトの名無しさん
09/06/06 12:46:35
その手順で普通にやればできるから、コードがどこかおかしい。

816:デフォルトの名無しさん
09/06/06 13:02:13
ShowWindowしてないだけだったりして。

817:デフォルトの名無しさん
09/06/06 13:07:01
通常はそれも不要だが。

818:デフォルトの名無しさん
09/06/06 13:21:55
モーダルで停止

819:デフォルトの名無しさん
09/06/06 13:26:23
ダイアログボックスなら「表示」と書くと思うが「追加」だとか「増えません」だとか表現している点が気になる。

・・・見当違いのことをやろうとしているのではあるまいか?

820:デフォルトの名無しさん
09/06/06 14:06:02
libjpegのライブラリにjpegtran機能も組み込みたいと思ってるのですが、
ソース・ヘッダファイルにjpegtranプロジェクトに入ってるもの(transupp等)を足しても、
そっちで宣言されている関数だけ、
ライブラリを呼ぶ側のアプリでリンクエラー(外部参照未解決)が出てしまいます。
その他の標準でlibjpegプロジェクト内で既に宣言されていた関数は(使えるかはともかく)エラー出ません。

ソースはIJGのではなく、VC++のプロジェクトファイルも入ってる高速化版(ソフトウェア工房α)です。
nasmも入れてあり、コンパイル自体はエラー吐くことなく成功します。

ビルドの仕組みを理解できてなくてSource/Header Files に入れるだけでは駄目っぽい以外解らず助言頂けませんでしょうか。
ただし、lib自体の容量は大きくなります。

VC++のバージョンは6.0です。Win32アプリ開発。

821:デフォルトの名無しさん
09/06/06 14:36:50
しかし、
Vc6の開発者おおいね。。libjpegとかつかったなあ。VC6ってGDI+つかえるんだっけ。。

822:デフォルトの名無しさん
09/06/06 17:47:15
ライブラリの開発者に直接聞かないで全然関係ない掲示板で質問されてもな

823:デフォルトの名無しさん
09/06/06 18:52:55
>>821
使える。

824:820
09/06/06 19:40:49
ライブラリそのものは自分でビルドしてます。
また、ソースコードはほぼIJGそのままで、IJG提供のソースを、調べたnmakeでのコンパイルしても
transupp等の組み込みが出来てないので、同様のエラーを吐きます。

日経ソフトウェアダウンロード からプロジェクトファイルを落として見たものの同様の状況で
jpegtranに使用される関数をライブラリに組み込む事が出来ませんでした。
ただSource/Header Filesに入れるだけではライブラリ作成時にエラーが出なくとも呼び出し側でリンクエラー同じです。

bccでlibjpegライブラリを使ってjpegtranの無劣化回転処理を組み込んでいる方が居たので、
可能な事は確かなのですが・・・。(そのライブラリはVC++からでは使用できず)

825:デフォルトの名無しさん
09/06/06 20:05:58
すみませんひとりごとでした

826:デフォルトの名無しさん
09/06/06 20:08:50
そこで#pragmaですよ。。

827:デフォルトの名無しさん
09/06/07 07:29:11
Win32アプリケーションを選択してC++でプログラムを書いてるのですが、
std::cout<<message<<std::endl;
とかやってもどこにもメッセージが出力されません。どうすればよいですか?


828:デフォルトの名無しさん
09/06/07 08:01:24
AllocConsole()とかを使おうかと思ったのですが、よく分からなかったので
HWNDをMessageBox()に渡して、メッセージを出すことにしました。
ありがとうございました。


829:デフォルトの名無しさん
09/06/07 10:41:00
下のように、クラスAAのインスタンスを、メモリーに割り当てたときに。
コンストラクタとデストラクタをどうやって起動したらいいのでしょ?

class AA { int i1,i2; AA(); ~AA(); }
void func()
{
 char dat[100];
AA *dat;
 dat = (AA *)dat;
}


830:デフォルトの名無しさん
09/06/07 10:44:43
割り当てたら勝手に実行されるんじゃないの
解放したらまた同じく

831:デフォルトの名無しさん
09/06/07 10:46:14
上の場合、ポインターがセットされるだけなので、実行されないです。
この場合の実行の仕方を知りたいです。

832:デフォルトの名無しさん
09/06/07 10:46:35
Win32アプリケーションとWindowsフォームアプリケーションでは、何が違いますか?


833:デフォルトの名無しさん
09/06/07 10:48:55
>>832
フォームの使用・非使用

834:デフォルトの名無しさん
09/06/07 11:46:45
WinMain/main

835:デフォルトの名無しさん
09/06/07 12:38:05
VisualStudio 2008 EEのVC++で公開ソースをビルドしようとしたのですが、
afxwin.hがないとエラーが出たので”Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う”
を見て設定しました。そして、ビルドをしたら
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
というエラーがでます。ソースは

_AFXWIN_INLINE CMenu::operator==(const CMenu& menu) const
  { return ((HMENU) menu) == m_hMenu; }
_AFXWIN_INLINE CMenu::operator!=(const CMenu& menu) const
  { return ((HMENU) menu) != m_hMenu; }
_AFXWIN_INLINE HMENU CMenu::GetSafeHmenu() const
  { ASSERT(this == NULL || m_hMenu == NULL || ::IsMenu(m_hMenu));
    return this == NULL ? NULL : m_hMenu; }

となっており、2行目と4行目でエラーがでます。
どう書き換えればエラーが直るでしょうか。

836:デフォルトの名無しさん
09/06/07 12:45:37
MFCはEEじゃ使えないからダメ。

837:835
09/06/07 13:03:46
>>836
ということはソースを修正しても無駄ということですね。ありがとうございました。

838:デフォルトの名無しさん
09/06/07 13:57:38
>>829 の質問別スレで聞いて見ます。

839:デフォルトの名無しさん
09/06/07 14:10:05
実体がないのにコンストラクタは働かない。

840:デフォルトの名無しさん
09/06/07 14:53:27
小生、昨日、サッカーを久しぶりにテレビ観戦して
試合後、ニュー速で試合を見て思ったことを、色々書いたら
ぼっこぼこ馬鹿にされたなりよ。やっぱ小生がそこそこ偉い発言できるのはMFCしか無いと思ったなりよ。

841:デフォルトの名無しさん
09/06/08 10:00:06
DLLなど複数プロジェクトが含まれるソリューションを開発する時、
ソース内のincludeパスの指定どうしてますか?
VC++の場合はProjectDirとSolutionDirの2つがデフォルトで
使えると思いますがこれの使い分けとか気にしてます?

842:デフォルトの名無しさん
09/06/08 11:21:47
VS2008で、Cのプログラムをコンパイルするとき、CとしてコンパイルするかC++として
コンパイルするかというのは、自分で決められますか?

843:デフォルトの名無しさん
09/06/08 11:27:48
できる。
IDE内ならオプションにあるべ。
コマンドラインでも指定できるし、何も指定しないと拡張子から区別される。

844:デフォルトの名無しさん
09/06/08 12:40:49
>>843
ありがとうございます。
別ファイルにある
double func();
というのをmain()から呼んでる時、main()のすぐ上でint func();という宣言があるので
C++では呼び出せてたのですが、ふとこれがCだったら呼び出せてなかったっけ、と気になった
ので…。


845:デフォルトの名無しさん
09/06/08 14:15:29
ソースを書いてる時のコメントの色が見づらいので変更したいのですが色とかはどうやって変更したらいいですか?

846:デフォルトの名無しさん
09/06/08 14:19:03
ツール - オプション - 環境 - フォントおよび色

847:デフォルトの名無しさん
09/06/08 14:36:58
>>846
ありがとうございます!!

848:デフォルトの名無しさん
09/06/08 19:17:07
VC6 いまだに使ってますけど
ゲーム作成にしか使わないんですがバージョンアップする必要ってあります?

値段とファイルサイズだけがバージョンアップされあまり期待できないのですが

849:デフォルトの名無しさん
09/06/08 20:00:50
>>848
VC6はもうC++対応じゃないと思った方がいい。VC6言語だと思った方がいいくらい、標準と違う。

それを踏まえると、標準C++を学びたいわけでもなく、
現状のゲーム作成で困ってないなら変えない方がいいんじゃないかな?


850:デフォルトの名無しさん
09/06/08 20:02:05
Microsoft Visual C++ 2008 Express Edition
無償で公開されているから体験してみるもよかれ!

851:デフォルトの名無しさん
09/06/08 20:08:53
便乗質問・・・

VC6のStandardでしこしこ
アプリ作ってんだけど、
ぷろになりたいと思ってきた。その場合、Proffessional
editionの方がいいのかえ?


852:デフォルトの名無しさん
09/06/08 20:17:07
VC6のサンプルプログラム見せるよりは、新しいVCのサンプルの方が可能性は高い

853:デフォルトの名無しさん
09/06/08 20:18:38
サンプル -> 自作ソフトのサンプル

854:デフォルトの名無しさん
09/06/08 20:21:19
>>850
EE版だとMFC動かないんだよね
.netFrameworkは開発者のオナニーがたくさんつまった作品
オナニーたくさんやった挙句なにも便利になっていない
相変わらず細かいことをするにはいつもどおりの苦労を迫られるし
今度はやけにネットの情報が少ない

855:デフォルトの名無しさん
09/06/08 21:01:31
.NETで楽するならC#やVB.NETのような新言語でやらないとだめだ。
C++でやったら両方の悪いとこ同士が増幅されるだけ。

>>851
VC6の頃だと、Standardでは作ったものの商用利用が認められていなかった気がする。
そういう意味でProfesionalが必要だった。
あと、Stdでは最適化が使えない。

VC2005 (VC8)の辺りから、エディション問わず商用利用可能になっている。
最適化も基本的なものは全エディションで使えるし。

856:デフォルトの名無しさん
09/06/08 21:05:55
Visual C++ Express Editionにboostを入れようとしています。

(1) boost のダウンロードURLリンク(www.boost.org) のWelcome - Download から
 boost_1_38_0.zip とboost-jam-3.1.17-1-ntx86.zip をダウンロード

(2) boost_1_38_0.zip を展開し、内容をC:¥develop へ展開する。(他のディレクトリでも可)

(3) boost-jam-3.1.12-1-ntx86.zip を展開し、bjam.exe をC:¥develop¥boost_1_38_0 へコピー

(4) コマンドプロンプトを開き、ディレクトリを移動。
CD C:¥develop¥boost_1_38_0

(5) "C:¥Program Files¥Microsoft Visual Studio 9.0¥Vc¥bin¥vcvars32.bat" を実行

(6) bjam --build-type=complete msvc stage を実行

(7) Visual Studio を起動し、[ツール] > [オプション] を開き[プロジェクトおよびソリューション]>[VC++ディレ
クトリ] を開く。
右上の「ディレクトリを表示するプロジェクト」で「インクルードファイル」を選び、新しい行を作って
"C:¥develop¥boost_1_38_0" を追加する。おなじく「ライブラリファイル」に"C:¥develop¥boost_1_38_0¥
stage¥lib" を追加する。

と手順どおりにしているのですが、

fatal error C1083: include ファイルを開けません。'boost/array.hpp': No such file or directory

というエラーがでてコンパイルができません。
どうしたらいいですか??


857:デフォルトの名無しさん
09/06/08 21:17:20
そのエラーメッセージに書いてある通り

858:デフォルトの名無しさん
09/06/08 23:39:12
クリティカルセクションの質問なのですが、
main()でInitializeCriticalSection()やって、その後_beginthreadex()します。
その後以下の処理を行うスレッドを100個起動させます。
EnterCriticalSection()
カウンターをインクリメント
LeaveCriticalSection()
そして、main()関数内でWaitForMultipleObjects()で全スレッドの終了を待ちます。
WaitForMultipleObject()の直後にカウンターの数を表示させているのですが、
これが100になりません。(95とか55とか)
クリティカルセクションの使い方が間違ってるのでしょうか?


859:デフォルトの名無しさん
09/06/08 23:43:40
カウントの処理に問題があるのでは?

860:デフォルトの名無しさん
09/06/08 23:58:22
WaitForMultipleObject()が全スレッドの終了まで待っていないようです。


861:デフォルトの名無しさん
09/06/09 00:12:24
>>858
それ以前に、そのスレッドちゃんと全部生成されていることを確認したか?

862:デフォルトの名無しさん
09/06/09 00:21:34
>>861
確認しました。やっぱりWaitForMultipleObject()がスレッドの完了待ちをしてませんでした。
WaitForMultipleObjects(100, hThreads, TRUE, INFINITE);
この形で呼び出していて、戻り値は-1でした。


863:デフォルトの名無しさん
09/06/09 00:31:03
とりあえず自己解決しました。
main()の最後に
while(count!=100)
;
みたいなループを入れると動きました。なんとか動きそうです。


864:デフォルトの名無しさん
09/06/09 00:39:48
WaitForMultipleObject の第一パラメタ(最大ハンドル数)は 64 まで


865:デフォルトの名無しさん
09/06/09 00:50:56
>>864
ええーっ、64ですか?
そうか、MAXIMUM_WAIT_OBJECTSですか…

じゃあ65以上のスレッドを待ちたい時はどうすんのかと思ってMSDN見たら、
64個のスレッドを待つまとめスレッドを作って、そのスレッドを待つようにしろ、
と書いてました。そんなの今からかけないよ~

でもありがとうございました。




866:デフォルトの名無しさん
09/06/09 08:26:07
スレッドが100個とかどういうとき必要になるんだろう。


867:デフォルトの名無しさん
09/06/09 10:37:05
HTTPサーバみたいなサーバプロセスを書いているのですが、コネクションが来るたびに
スレッドを生成してWorker Threadパターンでやってます。今朝は100個のコネクション
が一挙にキタ場合のテストをやろうとして、ああなってしまいました。


868:デフォルトの名無しさん
09/06/09 15:53:55
アルゴリズムってなんですか?
分かりやすい例えを教えてください

869:デフォルトの名無しさん
09/06/09 16:17:33
>>868
アルゴリズムすなわち解法
問題と答えをつなぐものがアルゴリズム。

たとえば「1~10の総和はいくら」という問題に

Aさんは 1+2+3+4+5+6+7+8+9+10
Bさんは 11×5

と考えるだろう。
Aさんの解法もBさんの解法も「1~10の総和はいくら」の答えを求めるアルゴリズム。

870:868
09/06/09 16:19:35
当然正しい答えが出なきゃならんし,有限の時間で答えが出なきゃならん。

ってかスレ違いだと思われ。

871:デフォルトの名無しさん
09/06/09 17:44:48
ググれ

872:デフォルトの名無しさん
09/06/09 19:37:15
MFCについて質問があります。
ダイアログ上のボタンを押下したときに、エディットボックスを追加する関数を加えたいのですが、
エディットボックスを追加する関数というのはあるのでしょうか?
また、エディットボックスを追加すると同時にメンバ変数も追加することができるのでしょうか?

873:デフォルトの名無しさん
09/06/09 20:50:02
>エディットボックスを追加する関数
動的に追加するならCEdit::Create();

動的に追加せずとも、非表示でエディットボックスを作成しておき、ボタンをクリックしたときに表示させる
という手法もある。

>メンバ変数も追加することができるのでしょうか
メンバ変数はあらかじめ用意しておく必要がある。

874:デフォルトの名無しさん
09/06/09 20:59:32
CObject は動的生成機能もサポートしています。これは実行時に特定のクラスのオブジェクトを作成する機能です。

875:デフォルトの名無しさん
09/06/09 21:03:27
>>873さん
ありがとうございます。

876:デフォルトの名無しさん
09/06/09 22:09:10
仮想関数やWindowsハンドラをオーバーライドして
基低クラスの関数を最後に呼び出すかどうかってオーバーライドする関数によって違うみたいなんだけど
初心者じゃそこらへんわからないよね(´・ω・`)

877:デフォルトの名無しさん
09/06/09 22:12:00
「非標準の拡張機能が使用されています : 右辺値のクラスが左辺値に使用されます。」って警告ってどうやったら取れるんでしょうか
めっちゃいっぱい出ていて困っています

878:デフォルトの名無しさん
09/06/09 22:12:48
>>876
何を...>>876君、君が何を言っているのか分かんないよ

879:デフォルトの名無しさん
09/06/09 22:14:44
>>877
とりあえず再現するソースを公開しろ

880:876
09/06/09 22:17:22
たとえばPrecreateWindow関数をオーバーライドすると
BOOL CMyNaviView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。

return CView::PreCreateWindow(cs);
}
って、最後にreturn CView::PreCreateWindow(cs);の一文が入るんだけど、
本を読んでるとこれをreturn TRUE;に変更するとか、初心者じゃわからないよね(´・ω・`)

881:デフォルトの名無しさん
09/06/09 22:30:54
PreCreateWindow()の戻り値の意味を知っていればわかるだろ。

で、君がわからないのか、それとも他人がわからないことを嘆いているのか、どっちだ?

882:876
09/06/09 22:34:36
わしがわからんのじゃけど。

883:デフォルトの名無しさん
09/06/09 22:38:24
PreCreateWindow()が FALSE を返すとウィンドウは作成されない。
じゃ、CView::PreCreateWindow() はどういう時に FALSE を返すのか、オーバーライドした関数ではどうすべきか、
なんてなことを勉強していくしかないな。AAAA

884:デフォルトの名無しさん
09/06/09 22:39:33
うう、すまぬ。最後のAAAAは無視してくれ。
Shiftキーと同時に押しちまった。

885:876
09/06/09 22:42:07
わかりました。ありがとう。

道は長そうだけど、そういうふうに意識して勉強していきます。

ありがとう。

886:デフォルトの名無しさん
09/06/10 01:08:54
_beginthreadex()で作ったWindowsのスレッドに、各スレッドごとに独自のデータを
保持させることはできますか?


887:デフォルトの名無しさん
09/06/10 01:18:39
>>886
つTlsAlloc, TlsFree 等

888:デフォルトの名無しさん
09/06/10 01:34:25
>>886
生成するスレッドにはパラメタを1つ渡せるので、スレッドの単位で作成したクラスや構造体の
インスタンスアドレスを渡せば良い

889:デフォルトの名無しさん
09/06/11 23:29:45
フォルダごとコピーしてデスクトップに持ってきてデバッグしようとしたらデバッグ情報が読み込めません、シンボルが一致しません
って警告が出るんですけどどういう意味ですか?

890:デフォルトの名無しさん
09/06/11 23:39:29
>>889
デバッグ情報にはソースファイル位置などがフルパスで格納されているから
フォルダを移動すると正常にデバッグできない

891:デフォルトの名無しさん
09/06/11 23:40:12
>>890
じゃあ、どうすればいいんです?

892:デフォルトの名無しさん
09/06/11 23:42:49
元の位置でデバックする

893:デフォルトの名無しさん
09/06/11 23:47:20
それじゃ意味ねええええっうぇwっうぇえww

894:デフォルトの名無しさん
09/06/11 23:52:43
シンボルサーバ作ればいいだけだろ

895:デフォルトの名無しさん
09/06/12 00:02:50
    /::::::::::::::::::(  /::::::::::ヾ ヽ ヽゞ::::::::::::::::ヽ
   /::::::::::::::::::::::::::::::::::ヾ  i i ソ::::::::::::::::: ヽ
  /:::::::::::::::::::::::::::::::::::::ゞ ! i ゞ::::::::::::::::::ヽ
 /:::::::::::::::::::::─< ̄● ̄>─ | i |─< ̄● ̄>─:::::::ヽ
 |:::::::::::::::::::::/    ̄   ̄    ─ 、   ̄  ̄   ヽ::::::::|
. |:::::::::::::::::::/            /   ヽ         ヽ:::::::|
..|::::::::::::::::::/              i       |          \:::::|ぶぁぁか
.|:::::::::::::::::/              ヾ     丿        _ \::::|
..|::::::::::::::::/       ̄ ─ _    ` ─ ̄ '      ─ ̄    ヽ:::|
 |::::::::::::::::             ─ ー  | |  ー─ ̄        ヽ:|
 ヽ:::::::::::::: |     ━ ─ ─ ー ─ - | |  ─  ー ⌒ ─     |
  ヽ:::::::::::::|          _ _─ ─││ ─/ヽ_ヽ      |
   ヽ::::::::::::|      ─ ̄           _─ ̄  ノ  /─    |
    ヽ:::::::::::|          _ _ ─  ̄      / 丿     |
     ヽ::::::::::|        ヽ ̄    / ̄ - -_    / /      /
      \:::::::::|        \   ノ    -_ _ ) / /     /
       \:::::::|          \      ノ ─' ノ       /
         \:::::|            ─ _ __ ー '       /



896:デフォルトの名無しさん
09/06/12 00:06:23
リモートログインしちゃえよ

897:デフォルトの名無しさん
09/06/12 02:02:02
MFCのために¥15000だしたいんだけど、金無いなりよ。

898:デフォルトの名無しさん
09/06/12 02:03:59
>>897
学生ならドリスパでタダでVS2008プロを落とせる

899:デフォルトの名無しさん
09/06/12 09:55:20
VC++eeなんですけど
プロジェクトフォルダで、自分の書いたソースファイルとかプロジェクトの設定が書いてあるファイルなどと、
ビルドした時の中間ファイル?とかビルドファイルとフォルダを変える事ってできますか?

どこでも参照できるように自鯖のサブバージョンに入れてみたんですけど、容量がどんどん肥大化していく・・・

900:デフォルトの名無しさん
09/06/12 10:01:52
ドリスパって何?

901:デフォルトの名無しさん
09/06/12 11:19:53
サッカーのチーム

902:デフォルトの名無しさん
09/06/12 13:22:13
>>899
プロジェクトのプロパティの全般カテゴリに中間ディレクトリ指定できんだろ。
んまーそこで困ってるならsvnの無視プロパティ活用しろよとは思うが。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch