くだすれVisual C++(超初心者用)

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Visual C++使いが優しくコメントを返しますが、
お礼はVisual C++の布教と初心者の救済をお願いします。

Visual C++ Home Page
http://www.microsoft.com/japan/msdn/visualc/
2デフォルトの名無しさん:2005/12/29(木) 09:58:38
3デフォルトの名無しさん:2005/12/29(木) 12:45:06
part2とか付けろよ。。。
4デフォルトの名無しさん:2005/12/29(木) 13:03:40
ワロタw

visual studioくれwww
5デフォルトの名無しさん:2005/12/29(木) 13:06:59
>>4
いまなら2005が無料配布中ですよ。
6デフォルトの名無しさん:2005/12/29(木) 19:23:17
Express Edition だけどな。
でも初心者には十分すぎると思われ。
7デフォルトの名無しさん:2005/12/29(木) 19:40:41

弘法は筆を選ばず
8デフォルトの名無しさん:2005/12/29(木) 20:10:29
Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う
(Win32APIを使った開発には必須)ができません(別にしないけど)
パスの指定で
実行可能ファイル C:\Program Files\Microsoft Platform SDK\Bin
という記述が間違っているのでしょうか?
かれこれ2時間悩みました。。
9デフォルトの名無しさん:2005/12/29(木) 20:16:57
>>8
できないとはおそらくエラーが出るということだろうが、もっと詳しく。
10デフォルトの名無しさん:2005/12/29(木) 21:26:52
別にしないんならできなくてもいいんじゃね( ´_ゝ`)
11デフォルトの名無しさん:2005/12/29(木) 21:58:19
そういや、Visual Studio 2005 Professional なら
Platform SDK 同梱なんだろうか。
.NET Framework SDK は同梱だった気がするけど。
12デフォルトの名無しさん:2005/12/30(金) 00:00:40
>>11
うん。入ってる。
MFCとATLが付いてるからね。
13デフォルトの名無しさん:2005/12/30(金) 00:46:37
http://www.otto.to/~kasiwano/newpage22.htm
のドライバとDLL使って
VC6でコンパイルしようとしたら
途中で固まるんですが、、
libのリンクとDLLをsystem32にいれて
ヘッダーもINCLUDEしてます。

コンパイル中・・で何分立っても進まなくなって強制終了してます・・。

ソースは
#include ".\uusbd.h"

void main(){

}
原因がわかりません、、
どなたか教えてください。
148ですけど:2005/12/30(金) 01:13:36
サイトいろいろ調べてやっとできました。
この説明、日本語版でぬけてるらしいです。
しっかりしてくれよぉ(;´Д`A

デフォルトでC:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application\html\1033にある
 AppSettings.htmファイルをエディタで開き、441行目から444行目を次のようにコメントアウトする
 // WIN_APP.disabled = true;
 // WIN_APP_LABEL.disabled = true;
 // DLL_APP.disabled = true;
 // DLL_APP_LABEL.disabled = true;
 これで新プロジェクトでWin32 Consoleアプリを選んだときのウィザードにて、
 Windows Application、DLL、Libが選べるようになる
15デフォルトの名無しさん:2005/12/30(金) 02:35:41
>>14
何を今更
16前スレ974:2005/12/30(金) 09:30:37
new や malloc 系の関数ではヒープからメモリが確保されますが、
調子に乗って確保していくとスワップが発生するところまで
確保できてしまいます。そこで、「この辺で許しておいてやるか」
ってくらいのところでメモリの確保をやめたいのですが、
「まだメモリ確保できそう」とか「もうそろそろやばそう」
といった情報はどうすれば取得できるのでしょうか?

.NET Framework の中にある PerformanceCounter クラスのようなもの
を使うしかないでしょうか?
17デフォルトの名無しさん:2005/12/30(金) 09:34:19
GlobalMemoryStatus?
18前スレ974:2005/12/30(金) 10:37:06
>>17 おお、これかも知んない。ありがとうございます。
パフォーマンスカウンタで Memory\Available MBytes
の値をゲットしようとあれこれ調べ始めてたところでした。
次いでなんで両方から情報を取得して比較してみます。
19デフォルトの名無しさん:2005/12/30(金) 13:00:05
VC++ってopendirとか使えないの?
20デフォルトの名無しさん:2005/12/30(金) 13:05:33
ceilやfloorもあるけどroundが居ません。
例えば741.852を741.9と四捨五入したいときはどうするべ?
21デフォルトの名無しさん:2005/12/30(金) 13:05:36
使えないものはない
22デフォルトの名無しさん:2005/12/30(金) 13:08:50
>>20
人が作ったのを探す、自分で作る
2318:2005/12/30(金) 13:17:14
当たり前といえば当たり前ですが、
パフォーマンスカウンタで取得した値も
GlobalMemoryStatus で取得した値も
ほとんど差がないですね。

前者 326385664バイト
後者 326369280バイト
24デフォルトの名無しさん:2005/12/30(金) 13:33:43
どう作るのかを聞いてみたかったんだ。
じゃコンナ感じ?(double)((int)(741.852*10^2+5)/10^2)
25デフォルトの名無しさん:2005/12/30(金) 15:24:51
>20
一般的にroundは四捨五入ではなくbankers roundなので注意
26デフォルトの名無しさん:2005/12/30(金) 18:36:54
>>25
bankers roundってなに?
ISO/JISで定義されている、俗に言うISO丸めのことかな?
27デフォルトの名無しさん:2005/12/30(金) 19:05:31
>>15
今更ってみんなすんなりできたの?
28デフォルトの名無しさん:2005/12/30(金) 19:07:33
>>26
そうだね。
MSはVBAのroundを "銀行型"って言ってる。
http://support.microsoft.com/default.aspx?scid=kb;ja;418216
29デフォルトの名無しさん:2005/12/31(土) 16:48:58
マルチバイト文字列を出力する際に、盲目的に
std::wcout.imbue(std::locale("japanese"));
std::wcout << L"本日は大晦日なり";
のようにしているのですが、"japanese" のところに
与えられる文字列にはどのようなバリエーションがあるのでしょうか?

試しに "ja_JP.EUC-JP" などとすると実行時に例外 (std::runtime_error)
が throw されます。コンパイラは Visual C++ 2005 です。
3029:2005/12/31(土) 17:22:44
int main(void) {
//std::locale::global(std::locale("japanese"));
std::wcout.imbue(std::locale("japanese"));
std::wstring ws(L"本日は晴天なり");
std::wcout << ws << std::endl;
return 0;
}

上のコードをコマンドプロンプトで実行すると正しく日本語が
表示されますが、main() 関数内の一行目のコメントをはずすと、
何も表示されなくなります。なぜでしょうか?
31デフォルトの名無しさん:2005/12/31(土) 17:41:19
いままで日本語とか何も意識しないで使ってけど
3229:2005/12/31(土) 17:48:19
>>31 あれ、そうですか。
俺の環境(?)だと、
std::wcout.imbue(std::locale("japanese"));
しないと std::wcout はワイド文字列をちゃんと表示してくれません。
33デフォルトの名無しさん:2005/12/31(土) 17:50:32
>>29
http://msdn.microsoft.com/library/ja/vclib/html/_crt_Language_and_Country_Strings.asp
言語識別文字列と国/地域識別文字列の組み合わせ。
34デフォルトの名無しさん:2006/01/02(月) 13:13:14
質問です
VisualC++はRADではない、と教わったのですがダイアログベースのアプリケーション等を作る時などは
普通にGUIでコントロール部品を貼り付けてコードを書いたりしますよね
これはRADとは言えないのでしょうか?
「RADな開発環境」とは一体どういう意味なのでしょうか?

35デフォルトの名無しさん:2006/01/02(月) 13:23:52
じつにくだらない質問だ
生きててよかった
36デフォルトの名無しさん:2006/01/02(月) 13:47:45
くだらなくて今更人に聞けないんですよ…
37デフォルトの名無しさん:2006/01/02(月) 14:41:33
分からない事がありまして
C言語でファイルを入力し演算するソースを考えていまして
ファイルから下記の数字が入っているtxtファイルがあったとして
■ファイルの中身
-----------------------------
23
426
3
46
12




-----------------------------

このテキストファイルを読み込み一行ごとの数字を
それぞれ変数を作って入れたいのですが
どのように組めば宜しいでしょうか。

テキストファイルを中身を丸ごとひとつの変数には入れれる
のですが・・・。
環境 OS 2K   .net2003
38デフォルトの名無しさん:2006/01/02(月) 14:43:32
どうみても冬休みの宿題です
本当にありがとうございました
39デフォルトの名無しさん:2006/01/02(月) 14:44:03
VCと関係ねー
40デフォルトの名無しさん:2006/01/02(月) 14:48:30
素直に宿題だって言えばよかったのにな。
ごまかせるとか思ってたのかと。
41デフォルトの名無しさん:2006/01/02(月) 15:13:26
C/C++の宿題を片付けます 56代目
http://pc8.2ch.net/test/read.cgi/tech/1135125328/l50
42デフォルトの名無しさん:2006/01/03(火) 18:25:54
>>34
おれもよくわからんが、ビルダーマンセーなやつに聞いたら
ぽとぺたやって説明してくれた。
そいつにVC6のダイアログ作るところ見せたら(゚Д゚)ポカーンして
たが、どうなんだろうな。
43デフォルトの名無しさん:2006/01/03(火) 18:51:43
>>23
その数字はどのメンバですか?dwAvailPhys?
44デフォルトの名無しさん:2006/01/04(水) 02:47:22
マネージドアプリケーションを作ってますがやりにくい...
ネイティブの方が楽に感じるのですが、やっぱりマネージドを覚えないとまずいでしょうか?
45デフォルトの名無しさん:2006/01/04(水) 04:09:46
コンソールアプリケーションで、何かキーを押すまで終了しないようにするには
どうすればいいですか?
いちいちプロンプトから実行するのがめんどくさい・・・
46デフォルトの名無しさん:2006/01/04(水) 06:14:11
VCなのにコンソールアプリケーションやってるやつ
47デフォルトの名無しさん:2006/01/04(水) 06:16:04
>>45
意味分からん
48デフォルトの名無しさん:2006/01/04(水) 08:08:33
>>45
[ctrl]+[F5]
「デバッグ無しで開始」
49デフォルトの名無しさん:2006/01/04(水) 08:12:17
>>45
return の所にブレークポイント置くとか
5029:2006/01/04(水) 08:27:12
>>46 え?俺、ほとんどVCではコンソールアプリしか作ってないけど。
グラフィカルなもの作るときには特に C# の方が作りやすいし。
51デフォルトの名無しさん:2006/01/04(水) 08:43:42
>>44
VC++ 2005のC++/CLIはだいぶまともになったと言う話だが。
52デフォルトの名無しさん:2006/01/04(水) 08:50:50
Managed C++ と C++/CLI はぜんぜん違う。
Managed C++ に比べてずいぶんすっきりきれいになった。
でも、一から Windows アプリを組むなら C# でいいじゃん、と思った。
53デフォルトの名無しさん:2006/01/04(水) 11:26:21
>>45
getch
getchar
54デフォルトの名無しさん:2006/01/04(水) 14:23:41
商用パッケージ製品で.NETアプリまだー?
55デフォルトの名無しさん:2006/01/04(水) 14:49:19
intellisenseに関する質問です
他人の作ったDLLを使うためにヘッダファイルを読み込んだのですが、
そのヘッダファイルには当然、関数の宣言しかされていません。
また、intellisenseの仕様は

void foo(); // これだけだとintellisenseが効かない
void foo(){}; // intellisenseが効く

となっていると思うのですが、
つまり関数の宣言だけのヘッダファイルをincludeしてもintellisenseが効きません。
このDLLを使うにあたってintellisenseの機能を使いたい場合はどうすれば良いのでしょうか?
どなたかご教示願います
56デフォルトの名無しさん:2006/01/04(水) 15:47:00
>>55
プロジェクトにヘッダファイルを追加かな?
5755:2006/01/04(水) 16:30:48
>>56
それは既にやってます
58デフォルトの名無しさん:2006/01/04(水) 16:35:22
ncb消せ
5955:2006/01/04(水) 16:41:28
>>58
それもやってます
が、駄目です
60デフォルトの名無しさん:2006/01/04(水) 16:44:28
DLLをソースからビルドしないとだめだろ
61デフォルトの名無しさん:2006/01/04(水) 16:46:58
>>55 え?関数の宣言だけじゃ、IntelliSense だめなの?
そんな訳はないと思うんだが。

とりあえず宣言だけずらずらと並べて、
実装は後回しにしてプログラム組んでいくことなんてよくあるけどなぁ。
っていうか、普通クラス設計ってそういうもんじゃね?
62デフォルトの名無しさん:2006/01/04(水) 17:04:45
設計とかじゃなくて時間かかるから何回も同じことやらないように
あらかじめ作ったやつを参照するようになってる。
6355:2006/01/04(水) 17:13:15
>>61
私もそんな訳無いよなあ…昔やったときはちゃんとintellisense使えた筈なのになあ
とか思いつつ実際に新規プロジェクト作って試してみてもそうなってしまうので困ってます
申し訳ないのですが試してみていただけないでしょうか?
最悪VCインストールし直しですかね…
6455:2006/01/04(水) 17:14:14
ちなみにVC++2003です
65デフォルトの名無しさん:2006/01/04(水) 18:01:48
ブラウザ情報のビルドをやったらできるようになった気がしなくもない。
66デフォルトの名無しさん:2006/01/04(水) 18:23:13
ちなみに >>55 の欲しい IntelliSense の機能ってのは、
関数の引数のヒント表示のこと? >>55 みると
対象となる関数には特に名前空間も指定していないみたいだから
NamaeKukan:: まで入力したら NamaeKuukan::Kansu が
候補に出てくるってことじゃないよね?
そうじゃなくて Kansu( まで入力したら引数に関する
ヒントが表示されるって言うもの??
6755:2006/01/04(水) 18:31:09
>>65
すみません、ぐぐってみましたがちょっと良く分かりませんでした
ちょっと小一時間外出しなければならないので後でもう一度調べてみます

>>66
欲しい機能は
・「Kansu(」  まで入力したら引数に関するヒントが表示される機能
・「Kan」 まで入力して Ctrl+Enter で「Kansu」と補完してくれる機能
・「::」 「.」 「->」 記号の後を自動で補完する機能
の3つです
68デフォルトの名無しさん:2006/01/04(水) 18:36:23
>>55 の言ってることはホントみたいだなぁ。
Visual Studio .NET 2003 で確認。

void Kansuu1(int a, int b, int c); //IntelliSense効かない
void Kansuu2(void){}; //IntelliSense効く

namespace NamaeKukan {
Kansuu1(char a, char b, char c); //IntelliSense効かない
Kansuu2(char a, char b, char c){}; //IntelliSense効く
};

class Kurasu {
Kansuu1(void); //IntelliSense効く
Kansuu2(void){}; //IntelliSense効く
};

俺、クラスにする必要がない関数でもいつも
クラスの中で static public な関数にしてたから気づかなかった。
69デフォルトの名無しさん:2006/01/04(水) 18:45:33
しかーし、 printf とか strlen とかは
ちゃんと引数のヒント出るよね。
70デフォルトの名無しさん:2006/01/04(水) 19:00:54
しかし#include <cstdio>としてもstd::でprintfなどは候補に現れない。
<cstdio>を覗くと名前空間stdの中にusing ::printf;と書いてある。だめだこりゃ。
71デフォルトの名無しさん:2006/01/04(水) 19:03:38
#include <stdio.h> だけで
printf( と入力すると
引数のヒントが出るんだけど、
これなんでだろね。
72デフォルトの名無しさん:2006/01/04(水) 19:11:37
Visual Studio 2005 Professional で確認した

void Kansuu1(int a, int b, int c); //IntelliSense効く(ここが 2003 と違うところ)
void Kansuu2(void){}; //IntelliSense効く

namespace NamaeKukan {
Kansuu1(char a, char b, char c); //IntelliSense効かない
Kansuu2(char a, char b, char c){}; //IntelliSense効く
};

class Kurasu {
Kansuu1(void); //IntelliSense効く
Kansuu2(void){}; //IntelliSense効く
};
73デフォルトの名無しさん:2006/01/04(水) 19:13:30
こういう現象って、日本語版特有のものなのかね?
74デフォルトの名無しさん:2006/01/04(水) 19:49:38
>>70
>しかし#include <cstdio>としてもstd::でprintfなどは候補に現れない。

うむ〜かなり重傷だなぁ。それは。
75デフォルトの名無しさん:2006/01/04(水) 19:52:32
しかし std::swap とかは std:: と入れただけで候補に出るんだよな。
テンプレートだから出るってことか?
わからん〜 どういう理屈で出たりでなかったりするんだろう。
76デフォルトの名無しさん:2006/01/04(水) 19:57:33
【大吉】 (No.6944) モナー神社
願事 : 思いの儘となる しかしやり過ぎては悪し
待人 : 遅く来たる
失物 : 出づべし
旅立 : 早く行くが利
商売 : 見込み確かなれば儲け有り
学問 : 労多いが成果有り
争事 : 思うままに勝つ
転居 : 騒がずして吉
病気 : 気長く保養せよ 吉
縁談 : 良縁あり 人に頼んで進めよ
77デフォルトの名無しさん:2006/01/04(水) 23:21:11
Express Editionの使い方が分かりません・・・
特にコンパイルの方法が分からないのです!
どうかおしえてください。
おねがいします。(´・ω・`)
78デフォルトの名無しさん:2006/01/04(水) 23:25:00
>>75
そう。テンプレートだから。

正確にはインラインで定義されているからなのだろうが。
7955:2006/01/05(木) 08:16:22
どうやら再インストールの必要は無さそうですね
「昔やったときは出来たはずなのに・・・」
ってのは、いろいろ開発環境渡り歩いてるせいで多分VC#辺りと勘違いしたのだと思います
わざわざ試していただきありがとうございました
80デフォルトの名無しさん:2006/01/05(木) 08:34:01
>>78 じゃ、 printf( で引数ヒントが出るのはなぜだろう。
81デフォルトの名無しさん:2006/01/05(木) 22:36:49
そういや、確かにVC++のIntellisenseはかなり微妙になったな。
82デフォルトの名無しさん:2006/01/06(金) 00:18:58
>>81 微妙って?
2003 → 2005 で良くなったってこと?悪くなったってこと?
8381:2006/01/06(金) 02:11:52
俺の感覚だけど、2003のほうが良かった。
2005は補完やパラメータ表示をしてくれなかったり、表示がおかしい事がやたらと多い気がする。
この辺のことはみんなどう思ってるんだろ?
84デフォルトの名無しさん:2006/01/06(金) 09:47:05
>>67
「Kan」 まで入力して Ctrl+Enter で「Kansu」と補完してくれる機能
って、俺の VS だと 2003 でも 2005 でも使えないんだけど・・・
そもそも Ctrl + Enter を押しても改行が入るだけ。
おまえら、例えばメンバ関数内でメンバ変数を入力するとき、
IntelliSense 効かせるために this-> とかわざわざ打ってませんか?
85デフォルトの名無しさん:2006/01/06(金) 10:48:17
>>84
Ctrl+SpaceのTypo
86デフォルトの名無しさん:2006/01/06(金) 13:51:38
>>84
VS6,0だとCtrl + Spaceで補完できるよ。
文字を打たずにやると、参照できるすべての関数が表示される。

結構便利。
87デフォルトの名無しさん:2006/01/06(金) 13:58:52
>>85-86 知らんかった・・・
Visual C++ つかってもう長い事たつのに、知らなかった・・・
言語やライブラリについて調べることは多いけど、
そういやIDE自体についてはヘルプを読んだことすらなかった。
88デフォルトの名無しさん:2006/01/06(金) 16:49:24
Visual C++ の標準ライブラリって、C99 準拠でしたっけ?
FP_NAN が定義されていない・・・

もしかして FP_NAN は非標準????
89デフォルトの名無しさん:2006/01/06(金) 16:52:36
VC++はC99に対応していない。
90デフォルトの名無しさん:2006/01/06(金) 17:16:01
>>89 あれ、そうでしたか。
どうりで、 nan() とか isnan() とかもないわけだ・・・
という事は C95 準拠ってことですか?
91デフォルトの名無しさん:2006/01/06(金) 17:24:06
>>86

我が家では、 Ctrl+Space は必ず異常終了してしまう。。。 VS6.0+SP6
92デフォルトの名無しさん:2006/01/06(金) 17:30:43
>>99
一部準拠してる場合もあるしバージョンによる違いもある。
93デフォルトの名無しさん:2006/01/06(金) 19:52:21
>>99には失望した。
94デフォルトの名無しさん:2006/01/06(金) 20:24:06
基本的なことなんですけど・・
↓みたいな関数を作成した場合

CString getHoge()
{
TCHARbuf[4096];
   〜略〜

CString strBuf;
strBuf = buf;

return strBuf;
}

戻り値のCStringのインスタンスstrBufって、呼出側で、明示的にdelete
しないと、いけないの?
それともJavaみたいに、オブジェクトの非参照カウントが0になると
自動的に開放される?


95デフォルトの名無しさん:2006/01/06(金) 20:31:17
>>94
概念的にはstrBufのコピーが一時オブジェクトとして作られ、それが戻り値になる。
deleteする必要はない。deleteするのはnewしたものだけ。
96森のクマさん:2006/01/06(金) 20:31:29
>>94
その場合スタックに確保されるので無問題
97デフォルトの名無しさん:2006/01/06(金) 20:35:30
その例の場合、strBufは存在意義がない。
単純に、
return buf;
でよろしい。
98デフォルトの名無しさん:2006/01/06(金) 20:52:30
>>97
意図を汲んでやれ。
strBufにbufを代入したいんじゃなく、
何らかの結果をstrBufに返したいんだと俺は解釈。

>>99
  l::::::::::::::::::|_!::lヽ:::::::::ハ::::::::::::::::::::::::::::::::i、::! ノ
  !:::::::::::::::::l-‐ェ!;ト ヽ:::::l ´!:::::::::::::::::::::::::::::l ` ヽ   幺ク 亡 月 |  ┼‐ .|] |]
  l:::::::::::::::::「(;;;)ヽ、__、::レ'´l:::::::::/l、:::::::::::::l   /   小巴 三l三. ヽ_ノ / こ o o
  !:::::::::/l:::l__,,,rタ"゙、;!)、__!::::/ノ 〉、::::::::l   \
   l::::/ lヽ!    _ _   l;/´  ! >、::l   /
  ノノlヽ、_!    r――‐┐   /_ノ:::|  /
    l::::::>、   レ,二二ェ!  /i:::::::::::l   ̄ ̄|_     /ヽ、  /\   /\    /
    l:::/ /::ヽ、 `ー-―-' ,ィ'::::!\:::::l    (ヽ、//\/   \/   \/   \/
    レ' ム-''´lヽ、  _,,./! ゙ヾ!__ヽ!    ヽ´ヽ、ヽ
            !   ̄     レ;'´  |  (,ゝ、 \ ヽ l、
        /| _,,.-/´  ;; .,,,-!  ヽ、 ヽ、 | | ! l
       / 斤'"〇 /´    ,;;:''" _,l_   ヽ ヽ/  l | l
      /; l、」_,,/     '' ゙;;/  ヽ、   〉  `ヽ  l/
      /!,r''´!/  /     ';,/"゙''':;,,,,;;'' \ /     ,!
    / l ,;;  |l  /`'';, ,,   /   ,;;''"゙''   l     /
99デフォルトの名無しさん:2006/01/06(金) 20:55:38
失望された。絶望された。
      ク
でも私は貝けない。
100デフォルトの名無しさん:2006/01/06(金) 22:07:11
std::ostringstream oss;
oss << "nanashi";
std::string s = oss.str();

とすると、最後の代入演算子で本当にコピーが発生
してるんですよね??

もうこれ以上 oss をいじることはないんで、
oss の内部で使っている(と想像しているんだが)
string を切り離して取り出せません?
なんかコピーが発生しているのが非効率的に思えて。
101デフォルトの名無しさん:2006/01/07(土) 00:14:26
>>100
できない。
どうしても気になって仕方がなければ自分で代わりのものを作れ。
102デフォルトの名無しさん:2006/01/07(土) 07:39:37
>>101 THX

やっぱりガベコレ欲しいなぁ、C++にも。
って言うと C++/CLI 使えや、ゴルァ
ってことになるんですかね?
103デフォルトの名無しさん:2006/01/07(土) 07:43:24
bohem gc
104デフォルトの名無しさん:2006/01/07(土) 07:50:40
const string &s = ost.str();
cout << s;

とかできるけど、こういうのはインスタンス化されてしまうだろうしな。
105デフォルトの名無しさん:2006/01/07(土) 08:12:54
ガベコレで思い出したけど、
リファレンスカウンタを実装したスマートポインタって
標準化されてましたっけ? boost にあった?
106デフォルトの名無しさん:2006/01/07(土) 08:31:12
boost::shared_ptr
boost::shared_array
これ?
107森のクマさん:2006/01/07(土) 08:33:01
ミリ。なぜならば
ソースと実際の挙動とで違いがあるから。
コンパイラ様が、『真面目にコピーせんでもええやん』と解釈したら、参照テーブル作って終わり。
になるかもしれない

あと最後の一行、初期化になっていないのは認識しちょる?構築後代入
108デフォルトの名無しさん:2006/01/07(土) 08:39:24
>>107
>ソースと実際の挙動とで違いがあるから。

挙動の予測可能性がC++の原則?
109デフォルトの名無しさん:2006/01/07(土) 09:40:06
>>95-98
レスありがとう。メモリリークしてないか気になってて
安心した。

>>97
return buf;でも、コピーコンストラクタ(っていうんでしたっけ?)が
働いて、CStringオブジェクトが生成されて、そいつへの参照ポインタが
返却されるって認識でOKですよね?
無駄なコードは書かないに越したことないから、指摘ありがとう。

>>96
戻り値のCStringオブジェクトのインスタンスの実体が確保されてるのは
スタックではないのかな?と僕は思ってるのですが・・違う?

Cでいうところの、↓は開放済みスタックへの参照でNGと同じで
char *getHoge() {
char buf[256];
return buf;
}

↓これだと、OKみたいな
char *getHoge() {
static char buf[256];
return buf;
}
110デフォルトの名無しさん:2006/01/07(土) 09:40:24
>>104
そもそもbasic_ostream::str()はbasic_stringそのものを返す。
const basic_string&を返すのではないから無意味。
111デフォルトの名無しさん:2006/01/07(土) 09:45:38
>>109
実際にはgetHogeを呼び出す側が、スタックにsizeof (CString)分のメモリを用意して、
そこへのポインタを隠し引数としてgetHogeに渡す。
getHogeではreturnするとき、その隠し引数で渡されたポインタの指す先に、
戻り値オブジェクトを作成する。

インライン展開されれば話はまた違うだろうが。
112デフォルトの名無しさん:2006/01/07(土) 09:55:19
よく単位を間違えて代入してしまうので、
別の型にしておけばいいじゃん、と思って

typedef double millisecond;
typedef double microsecond;
typedef double second;

ってやったけど、

millisecond x = 0.1;
microsecond y = 0.2;
second z = 0.3;

としても x=y; y=z; z=x; とかなんの警告も出ないのね。
やっぱそれぞれクラスを作らなきゃだめ?
113デフォルトの名無しさん:2006/01/07(土) 09:57:21
もしかしてVCとは全然関係ないC++の話?
114デフォルトの名無しさん:2006/01/07(土) 10:06:19
>>113 ごめん、C++ 一般のスレいってきまつ
115デフォルトの名無しさん:2006/01/07(土) 17:11:07
MFCのCStringオブジェクトに格納された、デリミタで区切られた文字列から
直接任意のフィールドを取り出すことってできますか?
CSVファイルの二番目のフィールドを取るとかです。
116デフォルトの名無しさん:2006/01/07(土) 17:21:28
効率考えないならAfxExtractSubString
117デフォルトの名無しさん:2006/01/07(土) 17:36:10
>>115
つ[sscanf()]
118デフォルトの名無しさん:2006/01/07(土) 18:04:46
サンクス!
strtokはどうしても好きになれませんでした。
119デフォルトの名無しさん:2006/01/07(土) 19:22:55
>>118
なぜ?
120デフォルトの名無しさん:2006/01/08(日) 12:19:02
errno で質問です
VC++2005EEを使用しているのですが
msvcrt71.dll を参照している DLL と
それを LoadLibrary で呼び出す EXE があって、
EXE側が参照しているのが msvcrt80.dll なので、
DLL側とEXE側で errno が共有できません

EXE側からも msvcrt71.dll を LoadLibrary して GetProcAddress で _errno を引っ張ってきて
どうかうまくできるには出来たのですが、もっとスマートな方法はないでしょうか?
121デフォルトの名無しさん:2006/01/08(日) 13:28:31
errnoなんか共有しない。
122120:2006/01/08(日) 14:08:55
>>121
そういうものなの?(´・ω・`)
123デフォルトの名無しさん:2006/01/08(日) 14:57:41
居るよね
問題が解けないからって出題者を馬鹿にして居直る人間
124デフォルトの名無しさん:2006/01/08(日) 18:13:58
質問です。

リストビューのメイン項目に複数行文字列が入って、
その項目の中に1つだけ「テスト」という文字列が入っています。
その「テスト」という文字列が代入されている項目番号を取得したいのですが
どうしたらいいでしょう?
125デフォルトの名無しさん:2006/01/08(日) 19:30:11
>>124
検索する。
126デフォルトの名無しさん:2006/01/08(日) 20:53:00
>122
そのためのCOM。そのためのIErrorInfo。
まあ、SetLastError,GetLastErrorのペアを使うようにする手もあるけど。
127デフォルトの名無しさん:2006/01/08(日) 21:38:29
いつから event って C++ で予約語になったの?
エディタで青く色づけられるんだけど。
C# じゃなくって、 C++ でも event って予約語なの??
128デフォルトの名無しさん:2006/01/08(日) 22:14:22
>>127
おそらくC++/CLIの拡張。
129120:2006/01/08(日) 22:15:27
>>126
COMのことはよくわからないので GetLastError、SetLastError を試してみたのですが、
うまく行きませんでした。
DLL 側が errno しか使用していないのでダメみたいです。
ありがとうございます、勉強になりました。
13081:2006/01/08(日) 23:10:25
DLLのerrnoを返すような関数を用意すればいいんじゃないか?
131デフォルトの名無しさん:2006/01/08(日) 23:35:45
>>130
今のとこ、
typedef int* (FP_ERRNO) ();
FP_ERRNO dll_errno = (FP_ERRNO) GetProcAddress(MH, "_errno");
int e = *dll_errno();
ってな感じでやってます。
132デフォルトの名無しさん:2006/01/09(月) 00:00:24
プログラミングを始めたいんですが、VisualC++とVisualC#とはどう違うんですか?
素人はどっちを買ったらいいか、特徴や利点などについて教えてください。
よろしくお願いします。
133デフォルトの名無しさん:2006/01/09(月) 00:14:01
上がってきたスレを色々読み>>132は解決しましたました。
有難うございました。
134デフォルトの名無しさん:2006/01/09(月) 00:25:19
ヘルプって英語しかないんですか?
日本語のヘルプがほしいんですが
135130:2006/01/09(月) 02:33:37
>>131
すまん、DLLの改変が出来るなら同じバージョンのCRT使えるか。
どうしてもDLLのerrnoが必要ならその方法でいいと思うよ。
136120:2006/01/09(月) 03:11:37
>>135
他の人が配布しているDLLを利用しているので
改変が出来ないんです
ご助言ありがとうございました。
このやり方で対応したいと思います。
137124:2006/01/09(月) 14:57:42
お願いします。
138デフォルトの名無しさん:2006/01/09(月) 19:56:21
超初心者です。
ウインドウ'sプログラムなのに
#include "window.h"がありません。
#include "stdafx.h"があります。
なじぇですka?
139デフォルトの名無しさん:2006/01/09(月) 20:28:48
>>138
"stdafx.h"はビルド時間を短縮するためのプリコンパイルドヘッダのためにある。
"stdafx.h"はプロジェクト毎に存在し、その中で<windows.h>などがインクルードされているはず。
140デフォルトの名無しさん:2006/01/09(月) 21:34:27
サンクス!
141デフォルトの名無しさん:2006/01/09(月) 21:42:43
質問です。
VC++6でウィンドウが最大化されているかどうかという
状態を取得したいのですが、ずばりそのものを
BOOLで取得できるような関数ってあるのでしょうか?
142デフォルトの名無しさん:2006/01/09(月) 21:59:26
関数でよければありますよ
143141:2006/01/09(月) 22:23:51
>>142
なんていう関数か教えてください。
144デフォルトの名無しさん:2006/01/09(月) 22:40:32
IsZoomed
145141:2006/01/09(月) 23:04:14
>>144
ありがとうございました!!!!!
解決しました。
146124:2006/01/09(月) 23:39:03
これを調べる関数はありますでしょうか?
147デフォルトの名無しさん:2006/01/09(月) 23:49:06
関数でよければありますよ
148デフォルトの名無しさん:2006/01/10(火) 01:07:51
>>147
なんていう関数か教えてください。
149デフォルトの名無しさん:2006/01/10(火) 07:41:31
VC++6.0と、DirectX9.0c 2003 Summer を使用してコーディングをしようとしています。
MSDNライブラリのように、VCのエディタからF1でDirectXのドキュメントを表示させたいのですが、
VCに外部ヘルプを登録する方法はありませんか?
150デフォルトの名無しさん:2006/01/10(火) 09:44:07
MSDNVS98.COLで探すといい

MSDNの改造
http://otsu.cool.ne.jp/umajou/
DirectX全バージョンのSDKヘルプをMSDNに統合する
http://www.sofarts.com/oldnew/computer/env-soft/windows/app_programming/vs/vs-dx-msdn.htm
151デフォルトの名無しさん:2006/01/11(水) 01:30:13
>>148
SendMessage
152124:2006/01/11(水) 02:06:45
>>151
ありがとうございました。
解決しました。
153デフォルトの名無しさん:2006/01/12(木) 09:38:55
VC6のときはできていたのに、
最近VC2003を使いだしたのですが、
リソースにアイコンのインポートができません。
なぜ?
154デフォルトの名無しさん:2006/01/12(木) 09:42:26
そのアイコンのフルパス中に、全角文字があるというオチ?
155デフォルトの名無しさん:2006/01/12(木) 10:26:29
>>154
あ、そうです。
ありがとうございます。やってみます。
VC6ではインポートできるのに。。。
156デフォルトの名無しさん:2006/01/12(木) 10:54:03
どうでもいいけど、凄い日本語だな。
初心者云々以前に日本語の勉強が必要そうだw
157デフォルトの名無しさん:2006/01/12(木) 11:06:49
質問です。
コンソールアプリケーションでビットマップを作成するソフトを作りたいのですが、
メモリ上のビットマップイメージに文字列や円をAIPを使って
簡単に描画することは出来ないのでしょうか?
現時点では、ビットマップイメージを作成し出力する事はできるのですが…
どなたか詳しい方、何卒宜しくお願いします。
158デフォルトの名無しさん:2006/01/12(木) 11:13:12
>ビットマップイメージを作成し出力する事はできる
これでできてるのでは?
159デフォルトの名無しさん:2006/01/12(木) 11:15:39
フォームをクリックして移動するコードを書きました。
添削をお願いしますm(_ _)m

private: System::Void Form1_MouseDown(System::Object * sender, System::Windows::Forms::MouseEventArgs * e)
{
HWND Fgw = GetForegroundWindow();
ReleaseCapture();
SendMessage(Fgw, WM_SYSCOMMAND, SC_MOVE | 2, 0);
}
160デフォルトの名無しさん:2006/01/12(木) 11:32:30
>>158
出来ている事は、例えばint[x][y][3]の中にドットのマップを格納し、
それを元に画像を作るという事でレベルの低い事です。
現在はもうちょっとレベルの高い部分、
例えば座標10,100に赤で大きなフォントで"テスト"と書く
ような事を実現したいのですが、調べてもらないのです…
161デフォルトの名無しさん:2006/01/12(木) 11:46:42
VisualStudioのオプションやプロジェクトでのディレクトリ指定時に
マクロを指定できると思うのですが、
これをユーザで新規に定義する方法はありますか?

スレ違いの場合は、適切なスレを教えていただければ幸いです。
162デフォルトの名無しさん:2006/01/12(木) 12:40:10
>>157,160
>メモリ上のビットマップイメージに文字列や円を
メモリDCとCreateDIBSection();
>座標10,100に赤で
SetTextColor( hMemDC, RGB(255, 0, 0) );
TextOut( hMemDC, 10, 100, "テスト", 6);
163デフォルトの名無しさん:2006/01/12(木) 13:00:02
>>161
スレ違いっていうか、日本語の勉強をしなおしてきてください。

>>160
調べてもらない?
164デフォルトの名無しさん:2006/01/12(木) 13:16:24
WM_CTLCOLORSTATICが
どのコントロールから来たか識別するには
どうしたらいいですか?
165デフォルトの名無しさん:2006/01/12(木) 13:22:05
>>163
> >>161
> スレ違いっていうか、日本語の勉強をしなおしてきてください。

日本語の問題ではなくて質問内容の不備ということではないのですか?
166デフォルトの名無しさん:2006/01/12(木) 13:48:09
>>163
日本語の勉強をしなおしてきてください。
167デフォルトの名無しさん:2006/01/13(金) 16:32:41
元の画像に文字列を描画する方法についての質問です。
頂いたヒントを元に以下のようなコードを作成したのですがどうしても上手く動きません。
何故でしょうか?詳しい方お願いします…

iWidth : ビットマップの幅
iHeight: ビットマップの高さ
line_length : ビットマップの1ライン分のバイト幅
lpBP : 元のビットマップのピクセルデータへのポインタ


CBitmap memBMP;
CDC memDC;

memDC.CreateCompatibleDC(NULL);
memBMP.CreateCompatibleBitmap(&memDC,iWidth,iHeight);

//ビットマップの内容を取得1:コピーするバイト長2:バッファ
memBMP.GetBitmapBits(iWidth*line_length,lpBp);

//メモリDCに内部処理用BMPを選択
memDC.SelectObject(memBMP);

//文字列の描画
SetTextColor(memDC, RGB(255, 0, 0) );
TextOut(memDC, 10, 10, "テスト", 6);

//元の画像への書き込み
memBMP.SetBitmapBits(iWidth*line_length,lpBp);

memDC.DeleteDC();
memBMP.DeleteObject();
168デフォルトの名無しさん:2006/01/13(金) 16:40:00
visual studio 2003 って、Service Packは全く出てないのですか?
ttp://www.microsoft.com/japan/msdn/vstudio/downloads/default.aspx

こちらの記事には「また、Visual Studio .NET 2003のSP3からは」とかあるけど、誤植なんですか?
ttp://www.itmedia.co.jp/enterprise/articles/0506/15/news006.html
169デフォルトの名無しさん:2006/01/13(金) 16:48:49
>>167
作ったビットマップオブジェクトに描画してる(ちゃんとされているか怪しいが・・・)だけで
元の画像に変化無し

そもそも元の画像ってなに?
170デフォルトの名無しさん:2006/01/13(金) 17:06:53
コンソールアプリ?
171デフォルトの名無しさん:2006/01/13(金) 18:30:00
>>167
SetとGetが逆かも。
CreateCompatibleBitmapはデバイス依存のビットマップを作成するから、
白黒とかパレットかもしれんのでCreateDIBSectionで24bitのビットマップを
自前で定義する。
ttp://www31.ocn.ne.jp/~yoshio2/vcmemo7-1.html
あとはぐぐるなり
172デフォルトの名無しさん:2006/01/15(日) 14:40:52
RebarをOfficeXP風のグリッパーにしようと思い、生成後に
::SendMessage(hWndReBar, 0x0000042B, 0, 1);
とgoogleして出てきたソースからdefineされている値を突っ込んでみたのですが
どうにもうまく動きません。
解決方法ご存知の方居ましたらご回答お願いします。
173デフォルトの名無しさん:2006/01/15(日) 15:14:34
Visual C++ で暗号化ソフトを作ろうとしているのですが、どこか参考になるHPなど知りませんか?
174デフォルトの名無しさん:2006/01/15(日) 17:03:52
DESでもつかっとけ
ソース理解するのも容易だし
175デフォルトの名無しさん:2006/01/15(日) 17:51:29
質問です。複数個のLPSTR文字列を、まとめて
ひとつの文字列に格納したいのですが、上手くいきません。
ソースは以下なのですが、どうすればよいのでしょうか?
指南願います。

LPSTR InputText = "Ans.";

// 文字を格納
for(int i = 0; i < m_CurrentTypeNum; i++){
if(m_TypedWords[i] != ""){
lstrcat(InputText, m_TypedWords[i]);
}else{
lstrcat(InputText, "□");
}
}

lstrcat(InputText, "こたえ");
lstrcat(InputText, "\0");

return InputText;
176デフォルトの名無しさん:2006/01/15(日) 18:07:05
>>175
InputTextにはAns.を格納できるだけのメモリしか指していないし、
C/C++的には文字列リテラルへは書き込みできない。

普通はmallocしたりstd::stringやらCStringを使う。
177デフォルトの名無しさん:2006/01/15(日) 18:53:35
>>176
ありがとうございます。
CStringにはまだ慣れてないので、char操作してみます。
178デフォルトの名無しさん:2006/01/16(月) 04:43:20
自分で作った関数のサイズを取得する関数ってないですか?
関数ポインタを使うときに関数のサイズも知っておきたいので・・・

179デフォルトの名無しさん:2006/01/16(月) 05:02:57
なんで知りたいの?
180デフォルトの名無しさん:2006/01/16(月) 07:42:19
関数にサイズなんてない。
181デフォルトの名無しさん:2006/01/16(月) 07:49:06
サイズはあるだろ。
182デフォルトの名無しさん:2006/01/16(月) 11:31:49
>>179
関数ポインタの勉強をしてるときに
「ポインタの位置から関数分のサイズを別の場所にコピーすれば、
コピーした関数を実行できるのかな?」
と疑問に思ったんですが、関数のサイズがわからなくて・・・
183デフォルトの名無しさん:2006/01/16(月) 11:54:08
>>182 実行できるわけねぇ・・・
いまの IA32 のコードって全部 PC 相対になってるわけじゃないから、
リロケータブルじゃないし。だから実行にはローダが必要なわけで。
6809 とか 68000 系を使ってればできそうな気もするけど。
184デフォルトの名無しさん:2006/01/16(月) 12:14:34
まぁどうしても実験したいなら、/FAs等でリスティングファイル書き出して、
自分で計算するのが早いと思う。
185デフォルトの名無しさん:2006/01/16(月) 13:38:45
関数をコピーする意図がわかりませぬ。
186デフォルトの名無しさん:2006/01/16(月) 18:47:07
関数ポインタの指す先は、関数の実体へのジャンプコード。
なので、もう少し頭を絞らないといけない。
187デフォルトの名無しさん:2006/01/16(月) 19:01:01
スレッド 'Win32 スレッド' (0xad8) はコード 0 (0x0) で終了しました。
スレッド 'Win32 スレッド' (0xf80) はコード 0 (0x0) で終了しました。
スレッド 'Win32 スレッド' (0x474) はコード 0 (0x0) で終了しました。
プログラム '[4020] Poo.exe: ネイティブ' はコード 0 (0x0) で終了しました。

これって正常ですか?(0x0)で終了しましたが1回にいくつも出てるんですが・・・
188デフォルトの名無しさん:2006/01/16(月) 19:01:58
プログラムの中で平行して動いてる副プログラムが3つあってそれぞれが終了したって意味
正常
189デフォルトの名無しさん:2006/01/16(月) 19:03:30
実際、関数自身のサイズを知る方法ってあるのかな?
190デフォルトの名無しさん:2006/01/16(月) 19:03:32
副プログラム?
知らないうちに呼び出してしまったのでしょうかね?
191デフォルトの名無しさん:2006/01/16(月) 19:03:51
そういやMFCのWizard使うと勝手に内部でいくつかスレッド作ってるようだけど
何処で何のためにスレッド使ってるんでしょう?
192デフォルトの名無しさん:2006/01/16(月) 19:07:53
意識しなくてもマルチスレッドなライブラリを使ってる事はよくあるよ
193187:2006/01/16(月) 19:11:28
コンパイラオプションが「マルチスレッド デバッグ(/MTd)」となってます
これですね!
ありがとうございました
194デフォルトの名無しさん:2006/01/16(月) 19:13:13
mapファイルとか、pdbファイルを自分で読めばいけるとおもう
195デフォルトの名無しさん:2006/01/17(火) 02:27:57
CStringのサイズ上限はどの程度なんだろう。
だれか知ってます?
ちなみにVC++.netです。
196デフォルトの名無しさん:2006/01/17(火) 02:36:00
なんかINT_MAXという説があるな。
とすると2ギガくらい?

だとすれば実用上問題ない大きさか。
ストリングで100メガとか超えるようなら黙ってcharでメモリ割り当てて
使いまわすわけだから。
197デフォルトの名無しさん:2006/01/17(火) 07:58:14
VB6.0→C#ときてて、
そろそろ自分用2chブラウザ作ってみたいと思い、
C++のソースを拾ったんだけど、
とりあえず何て拡張子のファイル叩けば良いの?
dsp
dsw
rc
cpp
...

あ、VS2003でdsp叩いたら
「変換してね。元にもどせないよ」
と出て、OK押下〜。

ここまで合ってる?
198デフォルトの名無しさん:2006/01/17(火) 08:21:26
dsw
199デフォルトの名無しさん:2006/01/17(火) 08:34:27
>>197
何のソース?
俺も参考にしたいから教えてくれないか
200デフォルトの名無しさん:2006/01/17(火) 08:42:27
>>198
サンクスコ

>>199
http://www.geocities.jp/loveloveplatinum/
エミュとかもそうだけど、オラが興味持つAppのソースはいつもC++。。


まず環境からかぁ。。
201デフォルトの名無しさん:2006/01/17(火) 08:46:07
>>200
サンクスコ
202デフォルトの名無しさん:2006/01/17(火) 08:54:57
#include "zlib.h"かぁぁ。
バージョン関係ないのかな。。

今日は会社午後からにしよ。。
203デフォルトの名無しさん:2006/01/17(火) 09:10:37
なんかビルドしようとするとzlib.hで構文エラーが多発なんだけれども、
VS2003でzlib.hの構文は通らない?

とするとV6環境作らなきゃ?

現在の状況
1 http://www.geocities.jp/loveloveplatinum/ のソースゲット
2 C++ダター
3 VS2003でdsw叩いたら「VS2003ぽく変換しますよ?」→変換OK。
4 とりあえず、右も左もわからずビルド
5 「zlib.hが見つかりませんよ」
6 http://www.sra.co.jp/people/m-kasahr/zlib/
7 ↑から英語版落としてdswと同じディレクトリに配置
8 おっ、5のエラー消えた。
9 と思ったら構文エラー多発。→「プログラム内のエラーが100個を超えました。コンパイルは中断されます。」

現在に至る。

・zlib.hが違う?
・VS2003のC++じゃ文法違う?

オラが無知というのは置いといてくれ。。
204デフォルトの名無しさん:2006/01/17(火) 09:12:52
追伸
構文エラー多発なのは、zlib.hの中身。
ほぼ毎行怒られてる。。

ウワー丸出しデスネ。
205デフォルトの名無しさん:2006/01/17(火) 09:18:08
http://www.zlib.net/
ここじゃないか?
206デフォルトの名無しさん:2006/01/17(火) 09:24:11
下らない質問で申し訳ないんですが、
例えばリソースビューでダイアログを挿入し、CFooHGというクラスを追加します
するとクラスウィザードはFooHG.cppに
#include ".\foohg.h"
#include "FooHG.h"
とヘッダーファイルを2回インクルードしているんですが、どういう事でしょうか?
#include ".\foohg.h"は必要ない感じもしないでもないのですが・・・
207デフォルトの名無しさん:2006/01/17(火) 09:24:27
>>205
ver1.14〜1.23で全滅。

現在有力な俺的妄想
・VS2003じゃ構文違うんだっ

あと2時間ある。マターリやってみます。
208デフォルトの名無しさん:2006/01/17(火) 09:42:37
ソース同梱のexeを実行してみたら zlib.dllじゃなくて LZ32.DLL を使ってるようだけど
209デフォルトの名無しさん:2006/01/17(火) 09:45:56
>>206
いらないと思ったらコメントにしてリビルドしてみればいい。
210206:2006/01/17(火) 09:49:08
コメントアウトしてもビルド可能なんですが
クラスウィザードが入れたものなので、何か訳ありなのかな?と・・・
211デフォルトの名無しさん:2006/01/17(火) 09:55:27
http://g-browser.s12.xrea.com/Gicko_src_020325.zip
これにzlibはいってたよ
212デフォルトの名無しさん:2006/01/17(火) 10:35:06
>>211
う〜ん。それ使っても怒られます。

error C2143: 構文エラー : ';' が 'const' の前にありません。

こんなんばかり。

やっぱり環境カナーと思い、久しぶりにV6引っ張り出したら
インスコ失敗。こんなのどうやったら失敗するんだよと。
インスコ中にXPのSP2から導入された火壁ダイアログが表示され、
「ポート空けちゃいますよ?」と言われ、「ブロック」を選択したあたりから
負けていたんだ。動きおかしかったもの。
プログラムの追加と削除でアンインスコしようと思ったら一覧に表示されないし。
VB6.0のインスコ中に何のデータを送信しようってんだ。
お断りだ。

さて、
システムの復元逝ってきます。
213212:2006/01/17(火) 11:03:31
俺用メモ

Windows セキュリティの重要な警告
このプログラムをブロックし続けますか?
名前 Microsoft(R)VisualStudioVSA RPC EventCreator
発行元 Microsoft Corporation

・このプログラムをブロックし続けますか?
→後で決める
・JITの設定を上書きしますか?
→いいえ

ここで再起動求む。
再起動逝って来ます。

214212:2006/01/17(火) 11:25:10
VisualC++ 6.0インスコ正常終了
でも>>203とほぼ同じ状況。
違うと言えば、エラーが4行になった事。

でも全て同じ行でのエラーで、最後のエラーが「予期せぬEOFが」っていうので
きっと言ってる事は同じか。

さて、レベル低杉。
215212:2006/01/17(火) 11:32:22
>>211
のファイル、ダウンロード後、
何も手を加えないで
VC++6.0EnterpriseEditionの環境でビルド通りました。
ありがとうございます。

--------------------構成: GickoBrowser - Win32 Release--------------------
リソースをコンパイル中...
コンパイル中...
CDropTarget.cpp
Etc.cpp
File.cpp
Gicko.cpp
GickoBrowser.cpp
GickoViewer.cpp
ItaTree.cpp
SureList.cpp
Tab.cpp
リンク中...

GickoBrowser.exe - エラー 0、警告 0

さて、これからC++の勉強。。
目標は2週間。今月末までにC#で形にします。

仮称)会社でばれずに2ちゃんねる。
216212:2006/01/17(火) 11:48:42
F5押下でGicko browserが起動する状態になりますた。

そいじゃF11でステップ印。。。
と思ったら、
「混合モード」からのスタートで全アドレスチェックをしてる感じ。
それじゃ板ファイル取得メソッドらへんにブレークポイントを置いて。。
F5押した。
'C:\WINDOWS\system32\kernel32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\user32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\gdi32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\comdlg32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。

こんなんがデバッグ情報にいっぱいだけど、
VB&C#厨のオラにはワカラネス。

217デフォルトの名無しさん:2006/01/17(火) 12:05:17
それは気にしなくていいメッセージ
218212:2006/01/17(火) 12:20:45
>>217
ありがとう。気にしない事にする。

今したいこと。
・このC++のソースから2chとの接続してるメソッドを探し、ぱくる。
・その為に全体の流れを見ておきたい。
・そこでトレースですよ。
・F11押すと「デバッグ情報がない。続行するにはOK押して」
・OK押した。
・[停止]-[混合モード]とタイトルバーに表示され、0042C6D5などメモリアドレスと思われるものが表示される。そしてF11を押すたびに全アドレスを走査。
・ワカラナス。しょうがないのでデバッグの停止
・どっかそれらしきメソッドにF9押下でブレークポイント設定。
・さて、F5押下。ブレークポイントまで飛んでけ。
・エラー「これらのブレークポイントは向こうです。実行プログラムはプログラムのはじめで停止します。
・ワカラナス。

今知りたい事。
ソースを拾った時、アプリがどこから走るかを調べる方法。
昼休みだしよろしくおながいします。

追伸
もう我慢できずに会社ずる休み。
ニートじゃないよ。
219デフォルトの名無しさん:2006/01/17(火) 12:39:34
メッセージで動いてるから最初から全部追いかけるのは不可能
だからソース見て必ず通る場所にブレークかけるしかない。
220デフォルトの名無しさん:2006/01/17(火) 12:50:14
>>219
ありがとう。
それらしきところにブレーク置いても
・エラー「これらのブレークポイントは向こうです。実行プログラムはプログラムのはじめで停止します。
ワカラナス。

それで始まったデバッグも[混合モード]で
ワケワカラナス。

混合モードって回避できないのかな?
何らかのエラーの為に混合モードになってる?

いやー。思いやられる。
221デフォルトの名無しさん:2006/01/17(火) 12:55:18
VC++.NET2003でビルドした(リリース版)静的ライブラリをメモ帳で開いてみたらオブジェクトファイルのフルパスが入ってたんだけど、
どうしてこんなのが入ってるの?なんか気持ち悪いんだけど。
222デフォルトの名無しさん:2006/01/17(火) 13:20:55
混合モードは右クリック→ソースを表示で解除
223デフォルトの名無しさん:2006/01/17(火) 13:40:44
>>222
毎度ありがとう。

・右クリック→ソースを表示
をすると、
「ポンッ」て音がして解除できない。。
インフォメーションマークのメッセージボックス表示音だと思う。

超初心者以下でモウシワケナス
224デフォルトの名無しさん:2006/01/17(火) 14:11:28
それビルドして実行してみたけど
デバッグビルドでもソース出なくて混合モードになるな
どっかいじれば直るかもしれないけど、
ひろってきたやつだからまともに動く保証はないわけだし
225212:2006/01/17(火) 14:24:44
>>224
手間とらせてしまいました。
ありがとう。

>デバッグビルドでもソース出なくて混合モードになるな
通常の動きじゃないんだ。。。。

どちらにせよ、絶対的に知識足らなくて、
迷惑かけました。ごめんなさい。

また夜に来ます。
ありがとうございました。
226デフォルトの名無しさん:2006/01/17(火) 14:59:14
227デフォルトの名無しさん:2006/01/17(火) 15:01:58
228デフォルトの名無しさん:2006/01/17(火) 15:58:59
229デフォルトの名無しさん:2006/01/17(火) 18:14:17
いままでGUIプログラムはC#で作ってきた俺が、
C++ で作ろうと思いたちました。C++は常用してます、UNIXでですけど。
最近の Windows 世界では MFC じゃなくて ATL なるライブラリを
使うのがはやり?みたいなので、↓のようなチュートリアルから
入ろうと思ってます。
http://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/ATLwindowing/

が、最初に躓きました。まず、なんという種類のプロジェクトを
使えばいいんでしょうか??「ATLプロジェクト」から
ウィザードをたどってプロジェクトを生成するのかと思ったんですが、
途中で DLL / EXE の指定なんかが出てきて混乱してます。

ぐぐってみると「DLLではインプロセスサーバを作ります」なんていう
記述があるんですが、あり?俺ってCOMコンポーネント作りたかったんだっけ?
普通のアプリ作りたかったんだけどなぁ、と混乱しています。

ATLを使ったHello worldアプリを作るためには、
いったいどういう手順でウィザードを薦めればいいのでしょうか?
230デフォルトの名無しさん:2006/01/17(火) 18:41:50
どうやら単純にMFCでGUIアプリ作るときと同じく
「Win32プロジェクト」を作成し、最初から
用意されているコードを消せばいいだけのようですた。

しかーし、さらにぐぐってみるとなにやら WTL なる
ものがあるらしい。
231デフォルトの名無しさん:2006/01/17(火) 18:41:58
>>225
デバッグ情報が入っていない。
プロジェクトの設定でデバッグ情報ありにする。
232デフォルトの名無しさん:2006/01/17(火) 19:45:56
>>229
ATLプロジェクトはCOMサーバを作るためのプロジェクト。
普通のアプリケーションを作りたければ230のとおりで合っている。
233212:2006/01/17(火) 21:25:22
>>231
メニューの[プロジェクト]→[設定]を押下し、
表示された「プロジェクトの設定ダイアログ」で、
[リンク]タブをアクティブにし、

「デバッグ情報を生成する」にチェックを入れました。

が、おなじすねぇ。

環境ムズカシス。
234デフォルトの名無しさん:2006/01/18(水) 09:01:36
>>233
デバッグできた。
ソース開いてからF5かF11で起動
235デフォルトの名無しさん:2006/01/18(水) 16:48:51
タイマーを使って、取得した値を1秒ずつ表示させたいのですが、
どんな関数を使えばタイマーはじつげんできるのですか?
236デフォルトの名無しさん:2006/01/18(水) 16:50:00
timeGetTime
237デフォルトの名無しさん:2006/01/18(水) 17:18:32
>>235
SetTimer
238デフォルトの名無しさん:2006/01/18(水) 18:35:53
配布可能なdllの一覧って、どこで見られますか?
VisualStudioをインストールしたフォルダのどこかに
在った様な・・・
239デフォルトの名無しさん:2006/01/18(水) 18:55:04
拡張子txtだからすぐみつかる
240デフォルトの名無しさん:2006/01/18(水) 18:56:31
>>239
すぐ見つかりました
愛してる
241デフォルトの名無しさん:2006/01/18(水) 20:45:28
VC++2005EE(無料のやつ)をインストールしたんですけど、
コンパイルの仕方すらわかりません。
そのレベルの使い方が書いてある説明書の場所を教えてください。
242デフォルトの名無しさん:2006/01/18(水) 21:23:08
情報をもう少し具体的に。ソフト自体の使い方を知りたいのか、
なんのアプリ(.NETか、Win32apiか、consoleか)を作りたいのか、
C++はある程度わかるのか、何をしたいのか(目的)などで
答えはかなり変わるのでは?
243241:2006/01/18(水) 22:08:18
>>242
すみません、ソフト自体の使い方です。
244241:2006/01/18(水) 22:09:59
>>242
勢いあまった・・・。
とりあえず、Win32アプリのサンプルプログラムをコンパイルしてみたいんですが・・・。
C++はわからないです。
Cを少しかじった程度なので・・・。
245デフォルトの名無しさん:2006/01/18(水) 22:25:19
だとしたら、たぶんplatform SDKが必要ですね。
expressはそのままではwin32アプリは使えないはず。
え〜っとどこかに・・・あ、あったあった。
ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
これを参考にインストールするべし。
とりあえず、面倒だけどCを復習しながら、win32apiを直接使うと
いいかもね。
246241:2006/01/18(水) 22:29:31
>>245
む、コンパイラっていっつも設定がややこしいんですね。
ありがとうございます、頑張ってみます。
247デフォルトの名無しさん:2006/01/18(水) 23:17:08
IEで生成したcookieの中身を見る方法ってありますか?
目標としては自分の訪れたHPで記録されているcookieの
ビューワーを作りたいなんて考えてます。
248デフォルトの名無しさん:2006/01/19(木) 00:10:35
>>247
メモ帳で見れる。
249デフォルトの名無しさん:2006/01/19(木) 02:09:47
□!!!これを見た貴方は3日以内に死にます!!!■
■死にたくなければ、このレスをコピーして他のスレに □
□10回貼り付けて下さい。1時間以内にです!もし無 ■
■した場合は、今日寝ている間に富子さんがやってきて□
□貴方の首を絞めに来ます。富子さんは太平洋戦争の■
■時に16歳という若さで亡くなった女の子で、未だに成 □
□仏していないそうです。信じる信じないは貴方次第。 ■
■今年になってからこのレスを無視した人で、“呪われ □
□て死亡した人”が続出しています。これは富子さんの ■
■呪い。呪われて死んでもいいのならこれを無視するこ□
□とでしょうね。                        ■
■――貴方がこうしているうちに富子さんが後ろから見□
□ていますよ…。                       ■
■□■□■□■□■□■□■□■□■□■□■□■□
250デフォルトの名無しさん:2006/01/19(木) 03:05:22
タイマを使って、プログラムを走らせてから
1秒ごとに、何か計算した値をコマンドプロンプト
に出力させたいのですが、可能なのでしょうか?
/*
while(1){
計算処理
 if(1秒たてば){
printf()
}
 else 計算処理に戻る 
}
などのようにできるなら、やり方を教えていただけないでしょうか?
251デフォルトの名無しさん:2006/01/19(木) 03:27:37
>>250
// 厳密には1秒ではないが、計算処理が充分に早ければ使い物にはなる。
for (time_t oldTime = time(NULL);;) {
//計算処理
if (oldTime != time(NULL)) {
oldTime = time(NULL);
printf("");
}
}
252デフォルトの名無しさん:2006/01/19(木) 03:41:43
>>250
Windowsアプリ(windows.hを使うアプリ)なら、SetTimerを使うこともできる。
253デフォルトの名無しさん:2006/01/19(木) 03:51:03
>>251
ありがとうございます。
試してみるとうまくいきました。
254デフォルトの名無しさん:2006/01/19(木) 03:56:25
>>252
SetTimerはどのように使えばよいのでしょうか?
調べたのですが、SetTimerの返り値がわかれば、
if(SetTimer())などのようにできるのでしょうか?
255デフォルトの名無しさん:2006/01/19(木) 04:50:36
いやいや、
SetTimerはウィンドウを作成することが前提なので
コンソールアプリを使うのであればあまり適さない。
256241:2006/01/19(木) 07:44:01
>>245
すみません、手探りで最後までやってみたんですけどできませんでした・・・。
多分、手順2か、3が間違ってると思うんですが、

手順2
 リンク先で、「PSDK-x86.exe」をダウンロードしてきて、
C\Programfiles\Micro〜(ディフォルトの場所)にインストールする。

手順3
 [オプション] →[プロジェクトとソリューション] →[Visual C++ フォルダ] の
[Visual C++ フォルダ]が見つからなかったので、[Visual C++ ディレクトリ]の
Win32プラットフォーム→実行可能ファイル、インクルードファイル、ライブラリファイルに
C:\Program File\Microsoft Platform SDK\Bin
同上、\Include、\Libとそれぞれ書き足す。

おかしい場所がないでしょうか?
お願いします。
257デフォルトの名無しさん:2006/01/19(木) 07:55:50
手順3
[オプション] [プロジェクトとソリューション] [Visual C++ ディレクトリ]

実行可能ファイル:C:\Program File\Microsoft Platform SDK\Bin
インクルードファイル:C:\Program File\Microsoft Platform SDK\Include
ライブラリファイル:C:\Program File\Microsoft Platform SDK\Lib

であれば手順3はOK

あとはわからないね。
258241:2006/01/19(木) 08:27:27
>>257
わ、朝早くからありがとうございます。
やり方はあってたんですかね・・・?
とりあえず、帰ったらもう一回やりなおしてみます。
259デフォルトの名無しさん:2006/01/19(木) 08:58:36
>>251
だからtimeGetTime使っとけって
精度msだから
260259:2006/01/19(木) 09:00:02
アンカー間違った
× >>251
>>250
261247:2006/01/19(木) 12:23:22
>>248
言葉足らずでした、すいません。メモ帳で中身が見る事が可能なのは
調べてわかったのですが、指定したurlのクッキーをvisualc++で
読み込んで、キーと値のリストを出したいのです。
262デフォルトの名無しさん:2006/01/19(木) 12:49:31
うろおぼえ
iなんたら
263デフォルトの名無しさん:2006/01/19(木) 13:18:40
都道府県別刑法犯・犯罪率分析表

. 1 大 阪 府 37.93  26 高 知 県 15.82
. 2 福 岡 県 31.68  27 静 岡 県 15.82
. 3 千 葉 県 27.82  28 長 野 県 15.77
. 4 愛 知 県 27.43  29 富 山 県 15.71
. 5 埼 玉 県 24.78  30 山 梨 県 15.53
. 6 東 京 都 24.76  31 香 川 県 15.24
. 7 京 都 府 24.60  32 熊 本 県 14.45
. 8 滋 賀 県 23.42  33 石 川 県 14.28
. 9 兵 庫 県 23.33  34 福 井 県 14.09
10 岐 阜 県 22.79  35 佐 賀 県 14.04
11 和歌山県 22.32  36 徳 島 県 13.45
12 奈 良 県 21.51  37 新 潟 県 13.41
13 神奈川県 21.33  38 宮 崎 県 13.16
14 宮 城 県 21.25  39 大 分 県 12.66
15 三 重 県 21.11  40 鳥 取 県 12.10
16 広 島 県 20.66  41 島 根 県 11.41
17 茨 城 県 20.53  42 青 森 県 11.39
18 岡 山 県 19.25  43 鹿児島県 11.16
19 栃 木 県 18.13  44 秋 田 県 10.66
20 愛 媛 県 17.89  45 岩 手 県 10.64
21 沖 縄 県 17.56  46 山 形 県 10.50
22 山 口 県 16.56  47 長 崎 県.  9.23
23 福 島 県 16.44  全国平均   18.08
24 北 海 道 16.36
25 群 馬 県 16.11

264デフォルトの名無しさん:2006/01/19(木) 18:09:00
265デフォルトの名無しさん:2006/01/19(木) 21:22:23
>>264のサイト見たんだが、
なにも考えずにSQLサーバー入れてしまった。
なんかまずいんだろうか。
266デフォルトの名無しさん:2006/01/19(木) 22:50:20
余計なサービスが動いていたり、HDを余計に食ったりしても
気にならないんならいいんじゃないの?
267デフォルトの名無しさん:2006/01/20(金) 04:18:36
#include <iostream.h>

main()
{
cout << "test\n";

return 0;
}


Visual Studio C++ 2005でこれがコンパイル通りません。
なんでだろ。
268デフォルトの名無しさん:2006/01/20(金) 04:24:40
なんでって、古い規格じゃんiostream.hって。
269デフォルトの名無しさん:2006/01/20(金) 04:34:48
そうなの?
270デフォルトの名無しさん:2006/01/20(金) 04:39:07
一行目を

#include <iostream>

にすればいいってことなのか?
違うな。
271デフォルトの名無しさん:2006/01/20(金) 04:48:50
#include <iostream>

using namespace std;

int main()
{
cout << "test\n";
std::cout << "test\n" ;

return 0;
}

こうすればいいのか、なるほど。
272デフォルトの名無しさん:2006/01/20(金) 04:49:37
>>270
こんな事にグダグダ書いてる暇があるんなら
http://wisdom.sakura.ne.jp/programming/cpp/index.html
でも読んどけ
273デフォルトの名無しさん:2006/01/20(金) 05:22:47
すみません。雑魚みたいな質問かもしれませんが
WTLとATLの関係がわかりません

WTLはウインドウアプリケーションを作成するための
テンプレートライブラリのようですが
ATLの位置づけがよくわかりません。これもWTLと同類のものでしょうか?
274デフォルトの名無しさん:2006/01/20(金) 10:07:56
ATLは基本的にはCOMクラスを作成することを目的に設計されたもの。
Window関係はちょろっと踏み込んだ程度。

別にWTL/ATLのスレがあるから、そちらにいくがよろし。
275デフォルトの名無しさん:2006/01/20(金) 11:12:42
ヘッダファイルの命名規則は、〜.hと〜.hppで何か違うのでしょうか?
276デフォルトの名無しさん:2006/01/20(金) 11:17:33
>>273 あ〜おれも。
>>274 おれもそのスレに行くよ。

みんなげんきでな。
277デフォルトの名無しさん:2006/01/20(金) 11:17:42
気持ちが違う

*.h Cがスキ
*.hpp C++がスキ
*.hxx C++以外認めない!!
278デフォルトの名無しさん:2006/01/20(金) 11:47:03
>>275
わかりやすく噛み砕いた説明どうもですw
レスありがとうございました
279デフォルトの名無しさん:2006/01/20(金) 11:48:00
おっと間違い
>>277さんありがとうございました
280デフォルトの名無しさん:2006/01/20(金) 12:35:35
おまいらはやっぱりVisual C++ 2005 Express Edition買うのか?
281デフォルトの名無しさん:2006/01/20(金) 12:40:17
なんでタダのもの買わなきゃなんねーだよ
282デフォルトの名無しさん:2006/01/20(金) 12:46:12
>>281
5000円ぐらいで販売されるんじゃないの?
283デフォルトの名無しさん:2006/01/20(金) 12:51:33
>>282
それ書籍付きのVisual Studio Express
5000円で好きな本買った方がまし
284デフォルトの名無しさん:2006/01/20(金) 12:55:39
>>281
ただなのはベータ版?
285デフォルトの名無しさん:2006/01/20(金) 13:28:05
VisualStudio2003を使ってVisualC++のフォームアプリケーションを作っています。
Form2 *NewMDIChild = new Form2();
NewMDIChild->MdiParent = this;
NewMDIChild->Show();
これで子ウィンドウを作ったのですが、変数を受け渡したり、
子ウィンドウの処理を親ウィンドウに反映させたりするには
どうしたら良いでしょうか。
286デフォルトの名無しさん:2006/01/20(金) 15:23:59
ActiveXの<PARAM>で入れた値はどうやれば取得できるのでしょうか。
287デフォルトの名無しさん:2006/01/20(金) 15:48:18
>>285
あらかじめForm2クラスの中に、変数を受け渡すためのアクセサを書いておいて、
親ウインドウからそれにアクセスする。逆はダメ。
288デフォルトの名無しさん:2006/01/20(金) 17:21:17
printfやCString::formatの書式指定の一覧ってどこかにありますか?
int → %d
float → %f
char → %c
__int64 → ?
wchar_t → ?

下の2つが分かりません
289デフォルトの名無しさん:2006/01/20(金) 17:45:49
>>288
つ[MSDN]

「printf 関数と wprintf 関数の書式指定フィールド」というページがある。
290モンモン:2006/01/20(金) 17:51:54
[1] 授業単元: プログラミング演習
[2] 問題文@x^2=5をとくことにより、小数点以下8桁までの正確な√5を求めなさい。
      またそのときの反復回数は?
     A次の2次方程式の解を7桁まで正確に求めなさい
     x^2-3x+2=0
B次の方程式の解を7桁まで正確に求めなさい
       πsin x-2x=0 (-π<x<π)
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: (C++)
[4] 期限: [2006年2月1日まで]
[5] その他の制限: なし(どこまで習っているか、標準ライブラリは使ってはいけない等々)
  
291デフォルトの名無しさん:2006/01/20(金) 17:53:19
>>288
%fはdouble用。
可変個引数なのでfloatもdoubleに変換されているからfloatもいけるだけ。
292デフォルトの名無しさん:2006/01/20(金) 18:03:23
何で完璧にテンプレに沿ったフォーマットなのに宿題スレでやらんかね?
293デフォルトの名無しさん:2006/01/20(金) 19:27:58
>>277
バロスw
294288:2006/01/20(金) 19:29:51
>>289
ありがとうございました

>>291
ラジャー
295デフォルトの名無しさん:2006/01/20(金) 22:20:50
VS C++ Express2005でPSDK入ってる環境で、

新しいプロジェクトからWindowsアプリケーションをつくるとコードが生成されますね。
このコードをコンパイルしようとすると

エラー1fatal error C1083: include ファイルを開けません。'windows.h': No such file or director

てなメッセージが出るんですけど、これはどーゆーことなんですか?
296デフォルトの名無しさん:2006/01/20(金) 22:27:10
ずばりそういうこと
そこに書いてあるとおり
297デフォルトの名無しさん:2006/01/20(金) 22:30:15
>>296

つまり、windows.hをどこかから引っ張ってこいと言うことですか?
具体的にどうするのか教えて欲しいです。
298デフォルトの名無しさん:2006/01/20(金) 22:31:37
>>297 そんなレベルでどうやって
プログラミングしようって言うんだ・・
windows.h が無いって言われてるんだから、
SDKのディレクトリ以下を検索するとか
しようとは思わないのか?????
299デフォルトの名無しさん:2006/01/20(金) 22:36:29
300デフォルトの名無しさん:2006/01/20(金) 22:43:24
これコ(ヘッダファイルの類)ピーして使ってもいいもんなんですか?
301デフォルトの名無しさん:2006/01/20(金) 22:55:24
パスを通しなさい。
あと、いくら初心者でも少しは自分で調べようとしなさい。
書いてあるものは、最低限読みなさい。
それができないなら、VCは難しいですよ。
302デフォルトの名無しさん:2006/01/20(金) 22:56:30
>>299

再確認しましたがやっています。
303286:2006/01/20(金) 22:58:56
自分で色々調べた結果、インターフェイスに<PARAM>のNAME属性に設定した
名前と同名のプロパティを追加すればよい(合ってますか?)という事が
わかりました。で、プロパティマップに追加すればHTMLから実行された時に
put_処理を通って<PARAM>でセットした値を利用する事ができるらしいのですが、
どうもput_処理を通っていないようです。
他にも何かしないといけない事があるのでしょうか。
304デフォルトの名無しさん:2006/01/20(金) 23:13:10
>>295
インクルードファイルのフォルダの設定が正しくなされていない。
305デフォルトの名無しさん:2006/01/21(土) 03:51:20
株価を表示するようなプログラムを作りたいのですが、
CListCtrlを使えばいいのでしょうか?
306デフォルトの名無しさん:2006/01/21(土) 04:05:41
株価を表すためのフォントから作られたらどうでしょうか?
307デフォルトの名無しさん:2006/01/21(土) 04:06:56
>>306
フォントは既存のものを使う予定です
308デフォルトの名無しさん:2006/01/21(土) 08:22:16
Windowsゲームプログラミングの中に、
TransparentBlt()を使うためにmsimg32を設定に追加する、とあるのですが
どうすればいいのですか?
309デフォルトの名無しさん:2006/01/21(土) 09:20:53
>>308
リンクするLIBとしてmsimg32.libを追加すればいいだけ
310308:2006/01/21(土) 13:42:43
リンカ→コマンドラインに追加で正解ですかね?
ソース自体に問題あるみたいなんで確認できてないんですけど、
Transが外部〜はでなくなりました
ありがとうございました
311デフォルトの名無しさん:2006/01/21(土) 14:03:26
リンカ→入力→追加の依存ファイル
312デフォルトの名無しさん:2006/01/21(土) 14:54:23
>>308
HPあるんだから直接聞けばいいのに・・・・
313デフォルトの名無しさん:2006/01/21(土) 22:57:11
これからプログラミングを始めようと思います。
目標はファイラー作成です。
Visual studioとその解説本・C言語の入門書を買いたいと思いますが、
オススメの本がありましたら教えてください。
314デフォルトの名無しさん:2006/01/21(土) 23:04:57
>>313 が現在どのレベルなのかにもよるなぁ。
って、C言語の入門書って書いてあるってことは、
C++じゃなくてCがまだってことかな?
315デフォルトの名無しさん:2006/01/21(土) 23:10:37
レベル・・・
本屋でC言語の本を立ち読みして
は〜 基本はBASIC(センター試験でもある高校数学のアレ)と一緒なんだな
って思ったのが昨日ってレベルです
316デフォルトの名無しさん:2006/01/21(土) 23:29:54
配列でfloatで4000*4000の二次元配列が5つ欲しいんだけど
malloc使ってもうまくいかない…('・ω・`)
317316:2006/01/21(土) 23:33:42
と、途中で送ってもうたスマン

これって仕様上無理なのか、それとも何か回避方法があるのか教えてください
318デフォルトの名無しさん:2006/01/21(土) 23:57:40
>>317
4K*4K=16M
sizeof(float) = 4 ?
5こ
64MB*5 >300MB

スキに確保しろ、仕様上は確保できる範囲
319デフォルトの名無しさん:2006/01/22(日) 00:18:51
>>318
サンクス。仕様上確保できるなら私のやり方がまちがってるっぽいね…
もうちょっと頑張って考えてみます

コンパイルでエラーが出ないってつらいなぁ
320デフォルトの名無しさん:2006/01/22(日) 00:52:20
>>319
heapの領域は足りている?mallocはheap領域にメモリを確保すると
思うけど、その領域が足りていないんじゃ?
確か、linkのオプションで指定できたと思うから、
コマンドプロンプトで、link /?とかMSDNで確認してみるといいかも。
321デフォルトの名無しさん:2006/01/22(日) 01:15:13
VirtualAllocとかつかうべき気もするけど、
322デフォルトの名無しさん:2006/01/22(日) 01:21:50
HeapAllocって自動的に足りなくなったらVirtualAlloc呼んでくれなかったっけ?
323デフォルトの名無しさん:2006/01/22(日) 01:43:53
試しにやってみたら
malloc( sizeof ( float [4096][4096]) );
で13個(832M)確保できた。
(RAM+ページングが1024M)
324デフォルトの名無しさん:2006/01/22(日) 06:06:35
Windows では、NEAR ポインタや
FAR ポインタの区別はないんですか?
Windows って、セグメントセレクタはもはや使われてなくて
セグメントセレクタ固定のフラットなメモリモデルなんでしょうか?
デバッガなんかでセグメントディスクリプタの内容見れますか?
325デフォルトの名無しさん:2006/01/22(日) 07:28:00
C++Builderではカスタムコントロールを簡単に作成して
フォームに貼り付けたりできましたが、VisualC++では
これに相当する機能はないのでしょうか?

ActiveXを使用するとレジストリへの登録など煩雑になるので
Exeに組み込むかあるいはDLL形式だとGOODなのですが・・・
326デフォルトの名無しさん:2006/01/22(日) 08:41:10
>>324
ありません。
いいえ。
はい。
327デフォルトの名無しさん:2006/01/22(日) 08:58:43
セグメントディスクリプタで実行の可否を指定できるのに
なんでNXビットが必要なのかなぁ、と思って。
328デフォルトの名無しさん:2006/01/22(日) 09:05:23
>>327
Win32アプリケーションははCSもDSもみんな同じセグメント。
329デフォルトの名無しさん:2006/01/22(日) 09:08:42
>>328 なんでそんな仕様に・・ってここで
そんな話しても意味ないですね。
330デフォルトの名無しさん:2006/01/22(日) 09:48:55
質問です。
環境 WinNT4.0 IE6 VC6
CHTMLViewクラスを使って、簡易ブラウザを作っているのですが、
表示されるWebページのレイアウトが、IEで見るときよりも
広がってレイアウトされる(画面外にはみでて描画される)
場合があります。ウィンドウのサイズをリサイズすると、
IEで見るのと同様の表示になるので、とりあえず、
URLで判断して、表示がおかしくなるページの場合のみ
画面サイズをリサイズして対応しているのですが、
根本的な解決方法はないのでしょうか?
331デフォルトの名無しさん:2006/01/22(日) 17:53:55
質問です。
CreateDIBSection()で 24ビットのDIBSectionを下のように作成した場合、
lpdwPixelにすでにピクセルデータが入っている配列ものを指定し
元々のビットマップデータの上に描画する、という事は可能でしょうか?
詳しい方宜しくお願いします。

hbmpBMP = CreateDIBSection(NULL, &biBMP, DIB_RGB_COLORS, (void **)(&lpdwPixel), NULL, 0);
332デフォルトの名無しさん:2006/01/22(日) 19:50:20
以前ここでお世話になった者です。皆様お答えいただき誠に有難う御座いました。
コンソールアプリにおいて、ファイルから読み込んだ24bitBitmapに
文字列を描画すして別のファイルで保存プログラムを作りたいのですが、
現画像のピクセルデータを格納している配列に文字列をうまく描画できません。
どのように変更すればlpBpに文字列を描画できるでしょうか?
詳しい方何卒宜しくお願いします。
///////////////

(lpBp:ファイルから読み込んだ24ビットビットマップのピクセルデータ)

HANDLE hBMP;
HDC hDC;
BITMAPINFO biinfo;

//BITMAPINFOの設定(24ビットビットマップ)
ZeroMemory(&biinfo, sizeof(BITMAPINFO));
biinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
biinfo.bmiHeader.biWidth = iWidth;
biinfo.bmiHeader.biHeight = iHeight;
biinfo.bmiHeader.biPlanes = 1;
biinfo.bmiHeader.biBitCount = 24;
biinfo.bmiHeader.biCompression = BI_RGB;
333デフォルトの名無しさん:2006/01/22(日) 19:51:10
//DC作成
hDC = CreateCompatibleDC(NULL);

//DIBSection作成
hBMP = CreateDIBSection(hDC,&biinfo,DIB_RGB_COLORS,(void**)lpBp,NULL,0);

//メモリDCに内部処理用BMPを選択
SelectObject(hDC,hBMP);

SetTextColor(hDC, RGB(255, 0, 0) );
TextOut(hDC, 10, 10, "テスト", 6);

//メモリ解放
DeleteDC(hDC);
DeleteObject(hBMP);
334デフォルトの名無しさん:2006/01/22(日) 20:11:05
はじめまして。僕はプログラムに興味がある進路に悩む学生です。
僕もみなさんのように知識を持ちたいのですがどのようなところでこういう事は勉強すればよいのでしょうか?みなさんは専門学校や工業学校に行ってるんですか?それとも本などで独学しているのですか?
板違いだったらすみません。でも真剣に進路を考えています。
335デフォルトの名無しさん:2006/01/22(日) 20:18:55
>>334
マ板へどうぞ
ttp://pc8.2ch.net/prog/
336デフォルトの名無しさん:2006/01/22(日) 20:19:25
いま時間があるんだったら、ためしに独学でやってみれば。
それでもし自分は向いてないと思ったら違う道に進めばいい。
337デフォルトの名無しさん:2006/01/22(日) 20:49:58
MFCで開発している自作アプリが保存するファイルに
Excelファイルのプロパティにある「カスタム」タブを付けたい。
どうやればわからないので誰か教えてください。
338デフォルトの名無しさん:2006/01/22(日) 21:51:43
多要素の配列をかんたんに0で初期化する方法はありますか?
VC++では配列の初期値が0であると保障されていませんよね?
339デフォルトの名無しさん:2006/01/22(日) 21:55:23
>>338
ZeroMemory(&array, capacity);
340デフォルトの名無しさん:2006/01/22(日) 22:14:59
>>338
memset
(ただし1次元配列のみ)
341デフォルトの名無しさん:2006/01/22(日) 22:24:16
>>338
グローバル変数・静的変数なら0初期化される。
ローカル変数ならされない。

別にVC++に限ったことではなくてANSI/ISO準拠ならどのコンパイラでも同じ。

ちなみに今のところZeroMemoryとmemsetが出てきたけどstd::fillもある。
342デフォルトの名無しさん:2006/01/22(日) 22:54:54
>>341
MSのZeroMemoryの中の人はmemmset
343デフォルトの名無しさん:2006/01/22(日) 23:06:53
初期化なら、
int hoge[256] = {0};
とかでもいいんじゃね?
344338:2006/01/22(日) 23:15:10
色々ありがとうございます。

>>343
結局、クラスのメンバ変数をどう初期化するかってことなんですよね。
宣言時にその書き方すれば、初期化できましたっけ?

ZeroMemoryもmemsetってことは、これらは二次元配列には使えないってことですかね?
二次元、三次元の配列を初期化したいです。
345デフォルトの名無しさん:2006/01/22(日) 23:24:37
class hoge
{
boost::value_initialized<int> values[100][200];
}
346デフォルトの名無しさん:2006/01/23(月) 00:02:28
答え出てるやん
347デフォルトの名無しさん:2006/01/23(月) 13:55:11
超初心者です。
教えてください。
左オペランドと右オペランドって何ですか?
348デフォルトの名無しさん:2006/01/23(月) 14:24:08
A + B
Aが左オペランド、Bが右オペランド
349デフォルトの名無しさん:2006/01/23(月) 16:13:17
>>348
>>347です。有難うございました!
数学で言うところの左辺、右辺みたいな
感じでしょうか・・・?
350デフォルトの名無しさん:2006/01/23(月) 16:27:01
>>348のどこが左辺・右辺?
351デフォルトの名無しさん:2006/01/23(月) 16:27:57
そういえばVisual C++には関係ないな。
352デフォルトの名無しさん:2006/01/23(月) 19:39:35
ポインタとか浮動小数点数をmemset()で0にして良いようになったの?
(とりあえずCの範疇では駄目なのは知ってる)。
353デフォルトの名無しさん:2006/01/23(月) 21:57:07
今までVC++6を使っていたのですが、VS2005を導入しました
VC++6でビルドして使っていたプロジェクトのdswファイルを実行して
プロジェクトを変換して2005でリビルドするときは問題ないのですが
2005でプロジェクトの新規作成をして
そこに今までのソースコードを追加してビルドした場合は、
コンパイラ エラー C2664 * 番目の引数を '***' から '***' に変換できません。(新しい機能 ; ヘルプを参照)
が頻発してビルドできません。
エラーが出た部分の引数をひとつずつキャストすれば解決できるのですが、数が多くて大変です・・・
どこを設定すればVC++6のプロジェクトを変換した場合のように
このエラーを無視してビルドできるのでしょうか?
354デフォルトの名無しさん:2006/01/23(月) 22:01:33
>>353
今までのつけが回ってきたと思って諦めろ。
355デフォルトの名無しさん:2006/01/23(月) 22:10:49
変換した時にできたファイルか変更されたファイルみりゃわかる
356デフォルトの名無しさん:2006/01/24(火) 05:25:07
VC++2005EEでコンソールアプリを作って遊んでいるのですが
以下のコードのようにデフォルト引数に"(Wクォーテーション)を含んだ物で
intellisenseの引数ヒントやメンバ一覧などが利かなくなります。

class hogehoge{
public:
hogehoge( const TCHAR* text = _T("\"") ){};
~hogehoge(){};
};
の場合は追加情報はありませんとでて一覧が表示されません。
もしくは
void hogehoge( const TCHAR* text = _T("\"") ){};
の場合は引数ヒントがでて来ません。

VCを入れ直したりncbを消したりしたのですが改善されません、うちだけの現象でしょうか?
コンパイルも通るし期待したとおりの結果でプログラムも動きます。
コードがおかしいとintellisenseが利かなくなるとどこかで見たのですが、\"と言う記述はおかしいのでしょうか?
357デフォルトの名無しさん:2006/01/24(火) 08:04:50
いいえ
358デフォルトの名無しさん:2006/01/24(火) 10:42:57
インテリセンスに過度の期待は禁物
359デフォルトの名無しさん:2006/01/24(火) 10:51:08
>>358 だとわかっていても、IntelliSense に頼ってしまう・・
むしろ IntelliSense で見えるようなコーディングしようと思ってしまったり。
360デフォルトの名無しさん:2006/01/24(火) 16:43:00
C++
361デフォルトの名無しさん:2006/01/24(火) 16:53:26
CString ss, filename = _T("Test.txt");
CStdioFile sf;
sf.Open(filename, CFile::modeWrite | CFile::modeCreate);
ss = _T("あいう");
sf.WriteString(ss);
sf.Close();

これを、Unicodeでビルドすると、Test.txtには何も書かれていません。
バイナリエディタで見ても、何も書かれていませんでした。
Test.txtに"あいう"の文字列を書き込むには、どうしたら良いでしょう?
362デフォルトの名無しさん:2006/01/24(火) 19:25:19
>>361
プログラムで、最初に一度これを実行させろ。
std::locale::global(std::locale("japanese"));
これには#include <locale>が必要。
363361:2006/01/24(火) 22:16:29
>>362
ありがとうございます
やってみます!
364デフォルトの名無しさん:2006/01/25(水) 21:14:57
現在VC++6.0Pro SP6を使っています。
いい加減PlatFormSDKを更新しようと思い、MSのサイト内を検索したのですが、『Windows 2003 Server SP1』用の奴が見つかりました。
私はサーバー用のソフトを作る事は無いんですが、これを入れればいいんでしょうか?

あと、VC2005 Expressは最適化がちゃんと掛かるという事が書いてあったんですが、VC++6.0Proに比べて優秀でしょうか。
あまり代わり映えしないなら、今のままの環境で開発したいと思っているからです。

ご回答宜しくお願いします。
365デフォルトの名無しさん:2006/01/25(水) 21:46:38
>364
VC6なら、いれてはいけません。

"This SDK does not support working with Microsoft Visual C/C++®, 6.0 as support
for VC 6.0 has ended. The last SDK that will work with VC 6.0 is the February 2003 Edition,
you can order a CD on the fulfillment site. Side by side installations are not supported."
366デフォルトの名無しさん:2006/01/25(水) 21:53:38
>>364
PlatformSDK February2003は公式サイトからのリンクは消えてるけど
まだページは残っててダウンロードも可能↓
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
VC6使うなら今のうちに
367364:2006/01/25(水) 22:00:26
>>365
そこ、見落としてました。スマソ

>>366
光速でダウンロードした!


ありがとうございました。
368デフォルトの名無しさん:2006/01/26(木) 01:55:36
CStringを使って継ぎ接ぎの様な操作の出来る文字列を作りたいのですが、
本を参考に以下のようなコードを書いたのですが
ポインタにポインタを加えようとしました。
というメッセージが出て上手くいきません。
オペランドもダメらしく、どのようにすれば宜しいのでしょうか?

CString cs;
cs = "";
cs = cs + "aiu" + "eo";//エラー
AfxMessageBox(cs);
369デフォルトの名無しさん:2006/01/26(木) 01:58:53
エラーでないが?
370デフォルトの名無しさん:2006/01/26(木) 02:03:50
実際のテストしたソースは

cs += "aiu" + "eo";//エラー

とかやってない?
371デフォルトの名無しさん:2006/01/26(木) 02:18:02
いや、やっていないです…
ちなみにVC++6.0です…
何か原因として考えられそうなもの有りましたらご教示下さい。
ちょっと実験してみます…
372デフォルトの名無しさん:2006/01/26(木) 03:14:18
質問です。
サンプルOnDraw()内で以下のようなコードを書いて
プロジェクトと同一のディレクトリにあるビットマップ
color_bar.bmp
を画面に貼り付けたいのですが、上手くいきません。
何故でしょうか?


CBitmap hBMP_IN;
CBitmap *oldBMP;

CDC memDC;
memDC.CreateCompatibleDC(pDC);//DCをコピー

bmpIN.LoadBitmap("./color_bar.bmp");//ビットマップをロード

oldBMP = memDC.SelectObject(&bmpIN);//ビットマップを選択

pDC->BitBlt(0,0,100,100, &memDC, 0,0, SRCCOPY);

memDC.SelectObject(oldBMP);
373デフォルトの名無しさん:2006/01/26(木) 05:51:08
すいません、↑の件は見なかった事にして下さい。

CDC memDC;//メモリDC
HANDLE hBMP_IN;//ビットマップのハンドル
LPBYTE lpIN;//入力画像のバッファ

memDC.CreateCompatibleDC(pDC);//DCをコピー

//自前の関数でビットマップのロード
//(ファイルを読み込んでhBMP_INにはハンドルが、
//lpINには画像のイメージが格納される)
BMPio->load_bitmap(&hBMP_IN, "./color_bar.bmp", &lpIN);

memDC.SelectObject(&hBMP_IN);
pDC->BitBlt(0,0,500,300,&memDC,0,0,SRCCOPY);
memDC.DeleteDC();


のようにしますと、画像が真っ白のまま変更されません。
何故でしょうか…?徹夜しても解決できませんでした…
hBMP_INの値も変更されていますし、
lpINには正常に情報が取得されています。

ちなみに以下のようにコーディングすると直線が正しく描画されます。
temp_p[0].x=200;temp_p[0].y=200;
pDC->LineTo(temp_p[0]);


詳しい方、ご教示の程を何卒宜しくお願いします。
374デフォルトの名無しさん:2006/01/26(木) 07:40:19
>>368
これはどう?
cs = (cs + "aiu") + "eo";
cs += static_cast<CString>("aiu") + "eo";
375デフォルトの名無しさん:2006/01/26(木) 09:22:24
CString cs(CString("aiu") + "eo");
376デフォルトの名無しさん:2006/01/26(木) 09:48:31
意味もなくコンストラクタ呼ばれて無駄
377デフォルトの名無しさん:2006/01/26(木) 09:51:47
cs.Format("%s%s"), "aiu", "eo");
378デフォルトの名無しさん:2006/01/26(木) 10:10:58
ユーザ定義関数内で計算をしたいのですが、
数学のように変数を使って公式に当てはめるだけじゃダメなんですか?

VisualC++6.0ですが、実行したら、
左のオペランドが左辺値になっていません。と1つだけエラーがでて
実行出来ません。考えられる事は何でしょう?
右のオペランドは通ってるみたいなんですが・・・
くだらない質問かもしれませんが、超初心者なので、
どなたか教えてください。
379デフォルトの名無しさん:2006/01/26(木) 10:13:18
Keywords Compared in Different Languages
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxorilanguageequivalentskeywords.asp
ここの C++ の欄を見ているんだけど、
_ で始まるキーワードはすべて Visual C++ 固有のものと思っていいの?
380378:2006/01/26(木) 10:57:59
>>378ですが、
解決しました。スレ汚しで申し訳ないです。
381デフォルトの名無しさん:2006/01/26(木) 11:57:58
int *x = new int [count];
で動的に確保した配列のサイズを調べる方法はありますか?

どうもsizeofは使えないようなので…
382デフォルトの名無しさん:2006/01/26(木) 12:12:56
>>381 別に記憶しておくしかないよ。
std::vector<T> 使うほうがすっきりすると思う。
まぁヒープマネージャは適切に delete[] できるわけだから、
operator delete[] の実装を見ればサイズも分かると思うけど、
そのサイズが count 分の int を格納するのに十分な
事が保証されているだけで、count の値を事後に知る事はできない。
383デフォルトの名無しさん:2006/01/26(木) 12:16:42
>>381
std::vectorを使わない理由は?
newを使うなら、単純にサイズを得られなかったり忘れずにdelete[]をしなければいけなかったりといったリスクを背負うのは当然なのだが。
384381:2006/01/26(木) 13:22:49
>>382-383
レスありがとうございました。
vectorの使用も検討してみます。
385デフォルトの名無しさん:2006/01/26(木) 13:25:16
printf();
scanf();

からgets関数を使ったプログラムに変えるには
どうしたら良いですか?
VC++でやってみたら実引数が多すぎます。って出たのですが、
何が悪いんでしょうか?
386デフォルトの名無しさん:2006/01/26(木) 14:12:18
>>373
>memDC.SelectObject(&hBMP_IN);
これ、失敗してない?
>ビットマップのフォーマットは、モノクロかデバイス コンテキストに
>互換性のあるものである必要があります。
パレットの情報とか必要だから、SetDIBits()とかSetDIBitsToDevice()を
使う必要がある場合がある。
387デフォルトの名無しさん:2006/01/26(木) 14:16:29
>>385
gets()はつかっちゃいかん関数の代表なんだが。
それに、scanf()の一部機能の代用にはなるがprintf()の代用にはならんぞ。
そもそも何がしたいか判らんから、もっと具体的に書いて味噌。
388デフォルトの名無しさん:2006/01/26(木) 14:28:11
>>373
> BMPio->load_bitmap(&hBMP_IN, "./color_bar.bmp", &lpIN);
> memDC.SelectObject(&hBMP_IN);
まずココからして変だ、 hBMP_IN はビットマップハンドルだろ?
CDCのSelectObject()を使うならCBitmapにする
CBitmap:::FromHandle()で一時的にCBitmapとして扱う。

またload_bitmap(.....)っていう自作関数はDIBを作ってるの?
であれば、単純にpDCに出したいなら StretchDibits()を使えば済む。
またビットマップハンドルが欲しいなら、DIBからBitmapオブジェクトをつくる。
CreateDIBitmap

もう一点、自作関数が信用ならない場合は
LoadImage();
上の例なら
HBITMAP hBMPIN =(HBITMAP) LoadImage(NULL,pstr,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
とでもして GetObject(hBMPIN,info,...) でinfoバッファに戻ってきた情報を使ったほうが便利

以上
389:デフォルトの名無しさん:2006/01/26(木) 16:09:15
関数名OnCmdHelloを選択する時 関数追加ができないんですけど
どうしたらいいでしょうか?
390385:2006/01/26(木) 16:40:56
>>387
反応有難うございます。

構造体の問題で苗字を入力させて、名前を入力させて
苗字と名前を連結させて表示させるプログラムを作る問題で、

plintf();と
scanf();を使って何とか表示出来たのですが、
その次の問題で、前の問題を入力関数をgetsで表示させるプログラムを
作りなさいって問題だったんです。

gets関数でググっても387サソの言う通り、
使ってはいけませんばかりで具体的な使用例とかを
見つけられなかったので悩んでいたんです。
でも、反応して頂いたのに申し訳ないですが、自己解決しました。
有難うございました。
391デフォルトの名無しさん:2006/01/26(木) 16:43:47
>>389
OnCmdHelloって何
392デフォルトの名無しさん:2006/01/26(木) 19:10:55
393デフォルトの名無しさん:2006/01/26(木) 19:34:23
プリプロセッサの #using って何?
394デフォルトの名無しさん:2006/01/26(木) 19:46:13
C#の#regionみたいにコードの折り畳みを設定することはできますか?
395デフォルトの名無しさん:2006/01/26(木) 20:02:37
>>393
マネージドC++でDLLを参照するためのもの。
396デフォルトの名無しさん:2006/01/26(木) 20:33:50
>>395 THX
俺には関係なさそう。
397デフォルトの名無しさん:2006/01/26(木) 20:39:47
ビルドした時に can't locate file for: -lcrt1.o ってエラー表示されたけど
これは何のエラーですか?
398sage:2006/01/26(木) 21:59:14
#include <stdio.h>
main()
{
int x;
printf("x = ");
scanf("%d",&x);
if(x >= 5)
printf("x は、5以上\n");
else
printf("x は、5未満\n");

というプログラムをコンパイラしたいのですが、やり方がわかりません。
学校では、tarapadを使用していて、visualC++は使ったことがありません。

どなたか、アドバイスお願いします。
399デフォルトの名無しさん:2006/01/26(木) 22:04:27
>>398
そのくらい先生に聞いたら? 教えてくれないわけが無い。
400デフォルトの名無しさん:2006/01/26(木) 22:12:18
>コンパイラしたいのですが
>コンパイラしたいのですが
>コンパイラしたいのですが
>コンパイラしたいのですが
>コンパイラしたいのですが
>コンパイラしたいのですが
401デフォルトの名無しさん:2006/01/26(木) 22:18:24
>>398
「コンパイラする」なんて技術、俺には無いからなあ。
402デフォルトの名無しさん:2006/01/26(木) 22:22:49
>>398
VC++がインストールされてんだな?
で環境変数もセットされているなら、コマンドプロンプト(DOS窓)でCLコマンド
例:test.cをコンパイルしたければ
CL test.c
403デフォルトの名無しさん:2006/01/26(木) 22:22:55
「こ、こんぱいら……>>398に、こんぱいらされてる……」

その言葉が俺の忍耐を断ち切る。

もっとコンパイラする!
404sage:2006/01/26(木) 22:23:26
コンパイルですねorz
出直してきます
405デフォルトの名無しさん:2006/01/26(木) 23:04:56
>>404
をいをい >>402はスルーかと
406デフォルトの名無しさん:2006/01/26(木) 23:08:32
超低レベル質問ですみません。
int型の変数をchar*型の文字列にキャストするのってどうすればいいのでしょうか?

sprintfというのを使ってみたのですが上手くいかず、
一体どうしていいものやら困ってます。
どうか御教授お願いいたします。
407デフォルトの名無しさん:2006/01/26(木) 23:10:44
>>406
int n = 123;
char s[32];
sprintf(s, "%d", n);
408デフォルトの名無しさん:2006/01/26(木) 23:16:13
>>407
出来ました!感動!
素早い御回答ありがとうございます!

char* s; ではダメで配列のサイズを指定しなきゃいけないんですね。
でもなんで?? まあいっか。

本当にありがとうございました。
409デフォルトの名無しさん:2006/01/26(木) 23:20:27
それをキャストというのかと小一時間問いつめたい。
410デフォルトの名無しさん:2006/01/26(木) 23:20:36
>>408
セイセイセイ
そこは理解しとけ・・・後々困るぞ
411デフォルトの名無しさん:2006/01/26(木) 23:23:38
>409
lexical_castについてはどうお考えか。
412デフォルトの名無しさん:2006/01/26(木) 23:26:21
>>411 それは別物だろ。
413デフォルトの名無しさん:2006/01/26(木) 23:29:44
>>410
char* sだと領域が確保されてないからsprintfでバッファに書き込めない…ってことでしょうか?
ああ、激しく的外れな悪寒……。

キャストとかも漠然とした意味しか分かってません(´・ω・`)
414デフォルトの名無しさん:2006/01/26(木) 23:32:00
>>413
そこは合格
キャストはもうすこし勉強しましょう
415デフォルトの名無しさん:2006/01/26(木) 23:35:55
>>414
合ってた(´∀`*) 頑張って修行してきます。
416デフォルトの名無しさん:2006/01/27(金) 00:03:14
int型の変数をchar*型の文字列にキャストするのってこう?

(char *)&n;
417デフォルトの名無しさん:2006/01/27(金) 00:17:21
文字列を格納するのに今まではcharの配列を使っていたのですが、
サイズを動的に確保する必要があり、よりC++的だと思われるvectorで格納する事にしました。
そこで疑問なのですが、char*を引数に取るような関数にこのvectorに格納された文字列を渡す時は
結局charの配列を用意して、vectorを走査して一文字ずつコピーしてから渡す、
というようなことをしなくてはいけないのでしょうか?
418デフォルトの名無しさん:2006/01/27(金) 00:19:33
vector<char> v;
という変数ならば、 &v[0] でOK。

だが文字列なら、なぜ std::string を使わないの?
419仕様書無しさん:2006/01/27(金) 00:38:08
MFCなら、CStringArrayクラスだろ。
420デフォルトの名無しさん:2006/01/27(金) 00:50:40
>>418
(char*)&v[0] じゃなくて、それでOKなんですねー。なるほど。

string使わないのはバッファとしてバイナリのデータ格納する事もあるからです(この設計は適切じゃないかも…
\0が入るとstringってそこを終端としちゃいますよね?
あれ、std:wstringなら\0入ってもOKなのかな
バッファとしてバイナリのデータ格納できますか?
ちょっとこの辺よく分かりません。ご指導希望
421デフォルトの名無しさん:2006/01/27(金) 00:55:12
422デフォルトの名無しさん:2006/01/27(金) 01:15:36
キャストって何なん。実は俺も良くわかってない
マルチスレッドとかも良くわからない
しかしゴリゴリコンパイルが通る時点で如何なるコードも良しとしてる
そんなおれは業務製造担当件最近Scm担当
423デフォルトの名無しさん:2006/01/27(金) 01:29:00
>>420
そういう用途ならstd::vector<char>でもいいと思うけど、std::stringにナル文字は入れられる。
空(v.empty()が真)のときはに& v[0]したらダメ。
424デフォルトの名無しさん:2006/01/28(土) 02:55:03
>>422
コンパイルは結局コンパイラをごまかせば通る事もあるからキケンじゃね?
正しいコードでも通らなかった時にごまかして通すやり方もあるけど、それはあくまで正しいコードやしな。
425デフォルトの名無しさん:2006/01/28(土) 03:08:57
>>420
std::stringもstd::wstringも、'\0'やL'\0'を格納できるよ。
c_str()でstrlen()とかwcslen()に渡した時に、'\0'までしか
文字列として扱ってもらえないってだけ。

string s = "Nullpo\nGats!\n";
s[6] = '\0';
cout << s.size() << endl;

これは13と表示されるはず。
426デフォルトの名無しさん:2006/01/28(土) 18:31:12
質問です。
ReadFile()でファイル名で指定されたファイルをバッファで読み込んだ後に
そのファイルをクローズするにはどうすれば宜しいでしょうか?
427417:2006/01/28(土) 18:35:14
皆さんありがとうございました
精進します
428デフォルトの名無しさん:2006/01/28(土) 18:44:26
なんで突然クローズなんだろ
429デフォルトの名無しさん:2006/01/28(土) 18:48:01
>>428
OnDraw()内でReadFileを実行後、バッファのあるパラメータを参照すると
原因不明の強制終了するのです。
おそらくはファイルの構造が正常にコピーされていないのではないかと思います。
一度しか呼び出さないコードを書けばそれまでですが、
毎回読み込んでも強制終了しないコードを書いてみたいのです。
430デフォルトの名無しさん:2006/01/28(土) 18:54:51
わけもわからずとりあえず書いてみた
フリーので・・・・どうやってコンパールすんだこれ?
431デフォルトの名無しさん:2006/01/28(土) 19:22:03
    _  ∩
  ( ゚∀゚)彡 コンパール!コンパール!
  (  ⊂彡
   |   | 
   し ⌒J
432デフォルトの名無しさん:2006/01/28(土) 20:24:06
>>429
OnDrawでファイルを読み込むんですか。
激しいアプリケーションですね。
433デフォルトの名無しさん:2006/01/28(土) 21:57:42
コンパール作戦
434デフォルトの名無しさん:2006/01/28(土) 22:41:45
>>432
Winアプリは始めたばかりでよく判らないのですが、SDIアプリにおいて
ドキュメントクラスとアプリケーションクラスはどのように使い分けするのですか?
ドキュメントはウィンドウやダイアログボックス描画に関するデータ類の整備とすれば
アプリケーションクラスは何に使うのでしょうか???
435デフォルトの名無しさん:2006/01/28(土) 22:45:43
アプリケーションクラス=メインスレッド
436デフォルトの名無しさん:2006/01/28(土) 22:52:29
すいません、もう一つ質問させてください。
Appクラスではコンストラクタと初期化関数しかないように見えますが、
普通のプログラムではAppクラスの関数を自分で定義して
その中で記述する物なのですか?

コンソールアプリに於けるメイン関数はどこに記述すれば宜しいのでしょうか?
437デフォルトの名無しさん:2006/01/28(土) 23:09:29
コンストラクタと初期化関数しかないわけじゃないくて親から継承してる
mainも書く必要はない
438デフォルトの名無しさん:2006/01/28(土) 23:20:08
>>437
成る程。機能については判りましたが構築方法については
これまでと全然違うのでよく判らないです。

例えば何らかの数値計算の処理をして、ウィンドウに処理する場合はどうすればよいのですか?

testApp::test1()を作って、
操作上のメッセージのときに記述すれば呼び出せると言うのは判るのですが
この数値計算をtest1()で行った場合その数値データは
どのようにしてtestViewで呼び出せばよいのですか?
439デフォルトの名無しさん:2006/01/28(土) 23:26:58
MFCなんてAppとWndしか使ったことねぇからよくわかんねぇけど
CTestAppで結果を入れる変数をpublicなりprivateなりで持たせておいて

CTestApp *pApp = (CTestApp*)AfxGetApp();
pApp->m_nResult ;
みたいな感じかな?
440デフォルトの名無しさん:2006/01/29(日) 00:40:51
>>439
丁寧にお答えいただき有難う御座います。
へタレで申し訳ありませんがまた質問させてください。

リソースエディタでダイアログボックスを作成しそのダイアログボックスに例えば
MyDlg と割り当て、それをアプリケーション初期化の際に表示したいのですが
資料やネットでの検索の結果、コード中で

MyDlg myDlg;
myDlg.DoModal();

のようにすれば取り合えず表示できるようなのですが、コンパイルしますと
’MyDlg’定義されていない識別子です。
のように表示されてしまいコンパイルできません。
myDlgの後ろにドットを打つとずらずらずらっとメンバが出てくるのですが、
なぜコンパイルできないのかよく判りません。
resource.h/ Resource.hをインクルードしてもダメでした。
どのようにすれば宜しいでしょうか…詳しい方宜しくお願いします。
441デフォルトの名無しさん:2006/01/29(日) 01:24:20
>>440
#include "MyDlg.h"
442デフォルトの名無しさん:2006/01/29(日) 02:06:07
ヘッダファイル tchar.h は、Microsoft 独自の物ですか?
それとも C 標準の物でしょうか?
もし tchar.h が C 標準でないとすれば、
C 標準の枠組みの中ではマルチバイト文字とワイド文字の
両方に対応するようなコードは書けないと言うことでしょうか。
443デフォルトの名無しさん:2006/01/29(日) 02:38:13
いまちょっと他のプラットフォームで調べてみたら、
tchar.h ってやっぱり Visual C++ 独自の物みたいですね。
444デフォルトの名無しさん:2006/01/29(日) 04:03:20
>>442
iconvでも使ってろ
445デフォルトの名無しさん:2006/01/29(日) 05:41:18
入力バッファをクリアするにはどうすればいいですか?
なにかが残ってるようで永久ループします。 お願いします。
446デフォルトの名無しさん:2006/01/29(日) 07:45:26
>>445 全部吸い出してもらえ。
フェラと一緒だ。
447デフォルトの名無しさん:2006/01/29(日) 15:27:04
こんにちは。
ただいまVC++2005エクスプレスで遊んでいるのですが、
作ってみたいプログラムがあるので質問させていただきます。

メモ帳みたいなテキストエディタで、表示されている
文字列の一部を選択して反転させて、右クリックしたら、
メニューの中にAとかBとか属性なしとか書いてあって、
属性つけたり取ったりできる。属性ごとに異なる色がつく。
で、色がついた文字列にマウスポインタを持っていくと、
着いている属性が表示される。って言うのを作りたいんですが、
どうしたらいいでしょうか?お願い致します。
448デフォルトの名無しさん:2006/01/29(日) 16:29:47
ダイアログクラス間でデータのやり取りをするにはどうすればいいのでしょうか?
親ダイアログから子ダイアログを開いて、入力された値を親ダイアログで処理したいのです。
宜しくお願いいたします。
449デフォルトの名無しさん:2006/01/29(日) 16:33:22
>>447
簡単に言うと、VS2005のエディタか?
450デフォルトの名無しさん:2006/01/29(日) 17:04:06
>>449
そうですね、文字列の一部を選択して属性を与えたり、
属性にアクセスしたりするところが同じですね。

テキストファイルを開いて、属性つけて、
属性付きで保存して、保存したファイルを
開くとまた作業を続けられるようにしたいです。
451デフォルトの名無しさん:2006/01/29(日) 17:28:05
>>450 ふむ、内部的には XML DOM で持っておくってのはどうよ?
キャレット位置と要素の対応をきちんと見ておかなきゃならんけど。
でもそれはどんな表現方法にしたって必要だし。
ファイルへのI/Oのところについて悩みたくないから。
452デフォルトの名無しさん:2006/01/29(日) 17:40:16
abcdefgと言う文字列があって、
abcdに属性A、cdefに属性Bを与えたいとすると、XMLでは
ちょい面倒な話になるな。
453デフォルトの名無しさん:2006/01/29(日) 18:06:06
>>452 う〜むそういう入れ子構造は考えてなかった。
それやるなら、内容は wchar_t のベクターと
なんか属性を表す short か何かのベクターの
二本立てでベタに持つしかないな。
入出力フォーマットは独自で。
454デフォルトの名無しさん:2006/01/29(日) 18:11:01
>>452
<A>ab</A><A><B>cd</B></A><B>ef</B>
ってなるのかな…
素直に <A>ab<B>de</A>ef</B> って書きたいところだが。。。
A + B を C として定義しとくと少し見通しがよくなるのか…?
455デフォルトの名無しさん:2006/01/29(日) 18:12:41
非効率極まりないけど、そんなにC標準にこだわりたけりゃ、

#ifdef UNICODE // Unicode用のソース
wchar_t c;

...
#else // MBCS用のソース
char c;

...
#endif

とでもしたら?
456デフォルトの名無しさん:2006/01/29(日) 18:14:49
>>454
で、その後「d」のみ属性を解除する編集操作をしたら?
457445:2006/01/29(日) 19:27:28
>>446
吸い出すにはどの関数使えばいいんですか?
Cでは、fflush(stdin)とかgets()を使ってましたがC++でもこれでOKですか?
458デフォルトの名無しさん:2006/01/29(日) 21:04:15
VC2005でインテリセンスが性能良すぎて逆にウザイんだけど、無効にすることは可能?
459デフォルトの名無しさん:2006/01/29(日) 23:00:01
>>458
ヘルプ見ろよ・・・・・
460デフォルトの名無しさん:2006/01/29(日) 23:14:44
>>457
C++にもfflushやらgetsはあるが、
fflush(stdin)もgets()も勧められないのはCでもC++でも変わらない。

C++らしい方法の1つはstd::cin.ignore();
ignoreは入力を読み捨てる関数。
引数を与えれば指定した文字数だけ捨てたり、
特定の文字(たとえば改行文字など)までを捨てたりという指定もできる。
461デフォルトの名無しさん:2006/01/29(日) 23:48:00
>>460
ありがとうございます!
462デフォルトの名無しさん:2006/01/29(日) 23:52:34
質問です。
Docクラスから関連するウィンドウの
CDC型のポインタが欲しいのですが、
どのようにして取得すれば宜しいのでしょうか?
463デフォルトの名無しさん:2006/01/29(日) 23:58:22
VisualC++6.0でラベルとリストピューのフォントを自由に変更することはできるのでしょうか?
464デフォルトの名無しさん:2006/01/30(月) 00:36:36
>>462
えーと、ドキュメントは複数のビューに関連付けられることもあるから無理だ。
MFCを使ったことのないので間違っていたらすまん。
465デフォルトの名無しさん:2006/01/30(月) 00:42:31
>>462
APIならGetDC()、MFCならCWnd::GetDC()とか?
ドキュメントが関連付けられているViewを知っているとは思えないので普通はView側で処理すると思うのだが。

>>463
リストビューは試したことないけど、ラベルなら(比較的)簡単にできる。
466デフォルトの名無しさん:2006/01/30(月) 00:48:25
>>464,463
462です。どうもありがとう御座いました…
諦めて効率の悪くエレガントでないプログラムを組もうと思います。
MFCのWinプログラミングは初めてなのですが、激ムズですね…
上手く出来るようになるのか非常に不安なのですが
皆様も始めはこんな千鳥足状態だったのでしょうかね?
467デフォルトの名無しさん:2006/01/30(月) 00:49:04
>>462
CView*ならDocから取得できるけど
CDC*を取得して保持しとくのは拙いんじゃない?
描画のときに使うものでしょ
468デフォルトの名無しさん:2006/01/30(月) 01:14:41
質問です。
質問は二つありまして、

一つ目はchar*型のファイル名を指定して読み込む関数

read_data(char* filename)

を作ったのですが、これを使う際に例えば

test(CString* input_filename)
{
read_data(*input_filename)
}

のようにするとコンパイラにCString型からchar*型への変換は
できませんとの旨の警告を受けてしまいます。どうすれば良いでしょうか?

もう一つは
char* str;
str = new char[50];
str = input_filename;

のようにしてもまたもやコンパイラに怒られます。何故でしょうか…?
469デフォルトの名無しさん:2006/01/30(月) 01:36:54
>>468
一つ目:read_dataを、charではなくCStringを引数にした関数にする。
それが嫌だったら、これ
ttp://www.microsoft.com/japan/developer/library/vcmfc/_mfc_cstring.3a3a.operator_lpctstr.htm
二つ目:当然。input_filenameがCStringクラスのオブジェクトだから。
型(容器)の違うものを無理にいれるようなもの。
C/C++では基本の話なので、勉強するように。Cでの文字列操作が
分かっていない証拠。Cの文字列に関することを復習するべし。
470デフォルトの名無しさん:2006/01/30(月) 01:44:45
>>468
そもそもポインタの書式を理解していないと思われる
最後の*は要らない
471デフォルトの名無しさん:2006/01/30(月) 02:00:32
Visual C++のコンパイラやライブラリは使用するとして、エディタや開発環境はEclipseを使う、
ということは可能でしょうか?
472デフォルトの名無しさん:2006/01/30(月) 02:41:53
>>471
ここに書いてあるらしい。
ttp://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/cdt-home/user/faq.html?cvsroot=Tools_Project#compilers_10
のCompilers and other 3rd party toolsの2
473デフォルトの名無しさん:2006/01/30(月) 07:28:56
>>468
charではなくTCHARを使えばよい。
char *からconst TCHAR *とかPCTSTRにでも直せばよい。

そしてソースコード全てをTCHARやTEXTを使うように直すと言う泥沼へ誘う。
474デフォルトの名無しさん:2006/01/30(月) 09:16:39
C++についてでわかる人いたら教えてください!
textoutで出てくるフォントの大きさ(高さ,幅)を変える関数って
ありますか??
475デフォルトの名無しさん:2006/01/30(月) 09:45:13
>>474
CreateFont()
SelectObject()
476デフォルトの名無しさん:2006/01/30(月) 10:05:17
UNIXでいうSystem関数みたいなものはありませんか?
特定の場所にあるexeファイルを起動するものです
477デフォルトの名無しさん:2006/01/30(月) 10:16:44
>>476
つ[system()]
つ[CreateProcess()]
つ[ShellExecute()]
478デフォルトの名無しさん:2006/01/30(月) 13:45:14
__FILE__マクロについてですが、
展開したときにパス名も付いてきてしまいます。(例:C:\hoge\hoge.c)
これをファイル名だけ(例:hoge.c)にしてくれる
コンパイラオプションなどの設定はないのでしょうか?
479478:2006/01/30(月) 14:18:04
http://donnk.com/Nmura/soft/help004.html
上記のようなサイトを見つけました。
わざわざファイル名取得のために関数を呼ぶのは抵抗がありましたが、
どうせデバッグ処理なのだから、と割り切ることにしました。
480デフォルトの名無しさん:2006/01/30(月) 15:49:26
>>479
これでとくに問題ないと思うけど、日本語ファイルの場合ダメ文字でないか?
まぁ、コーディングファイルに日本語を使う方が問題な気もするけど。

strcharって2バイト文字考慮してたっけ?
自分で試せばいいのだけど面倒くさい<ダメ人間な俺orz

UNICODEで作ると2バイト文字考慮しなくて良いから楽で良い^^
でも、ライブラリとの整合性が・・・・・
481デフォルトの名無しさん:2006/01/30(月) 15:50:45
strrchrだ。
死のうorz
482デフォルトの名無しさん:2006/01/30(月) 17:12:05
>>480
strchrは駄目文字問題がある。
_mbschrならその心配は要らない。

さらに_tcschrではstrchr/wcschrだけでなく_mbschrへ切り替えられる。
(_MBCSが定義されていた場合)
483デフォルトの名無しさん:2006/01/30(月) 19:12:34
先頭に _ (アンダーバー)が付いている関数がありますが、
これはどういう関数に付けられるのでしょうか?
484デフォルトの名無しさん:2006/01/30(月) 19:20:28
環境依存、独自拡張等
485デフォルトの名無しさん:2006/01/30(月) 19:20:36
>>483
下線で始まる名前は処理系予約となっている。
そのため処理系独自の関数は下線で始めている。
名前が被ることを防ぐためだね。
486デフォルトの名無しさん:2006/01/30(月) 19:36:07
つまり printf と _printf は微妙に何かが違うって事でしょうか?
487デフォルトの名無しさん:2006/01/30(月) 22:32:53
>>486
_printfなんてあるか?
あるとしたらリンク時の話だな。
488デフォルトの名無しさん:2006/01/31(火) 01:12:46
_summer
489デフォルトの名無しさん:2006/01/31(火) 12:25:21
VC6で実行したアプリケーションを起動時よりも小さくリサイズすると
勝手にスクロールバーが出てきますが、これを抑制するにはどうすれば良いのでしょうか?
490デフォルトの名無しさん:2006/01/31(火) 13:04:38
C言語始めたばかりの超初心者なのですが、
実行結果が見づらいので
10文字とか20文字毎に改行したいんですけど、
どうしたら良いんですか?

ググってみたけど、いまいちよく判りませんでした;;
491デフォルトの名無しさん:2006/01/31(火) 13:06:12
>>489
SetScrollSizes
492デフォルトの名無しさん:2006/01/31(火) 13:21:39
>>490
自分でなんとかするしかないかなあ。
こんな感じの1文を表示結果の後ろに置いてみるとか。

if(++cnt>=10){printf("\n");cnt=0;}
493492:2006/01/31(火) 13:28:10
すまん問題読み間違い。

実行結果をいちど文字列に落としてから
10文字づつ表示かな。
494デフォルトの名無しさん:2006/01/31(火) 13:35:51
一定文字数で改行するのは結構めんどくさい。
プリンタの改行、改ページ処理とかを作るつもりならともかく、
単にデバッグ用だったら適当なところに改行を入れるのが普通
495490:2006/01/31(火) 14:08:51
>>490です。

>>492->>494サソ
どうも有難うございます!
無事、解決しました!
496デフォルトの名無しさん:2006/01/31(火) 17:25:42
実行時エラーが発生した時に、OSがエラーの表示をする前に処理を行いたいのですが、
VBでいうOn Error Gotoみたいのありますか?
497496:2006/01/31(火) 17:28:14
CStdioFile sf;
CString filename = "test.txt";
sf.Open(filename, CFile::modeWrite | CFile::modeCreate);
sf.WriteString(filename);
sf.Close();

例えば、test.txtが読み取り専用で既に存在する時、WriteStringでエラーが発生するのですが、
その場合、処理を抜けたいのです
498デフォルトの名無しさん:2006/01/31(火) 17:34:00
>>497
普通にtry-catch
MFCに手を出す前にC++ちゃんとやっとけ。
499496:2006/01/31(火) 17:49:23
try-catchは試したのですが、飛んでくれないのです><

CStdioFile sf; 
CString filename = "test.txt"; 
sf.Open(filename, CFile::modeWrite | CFile::modeCreate); 
try{
   sf.Open(filename, CFile::modeWrite | CFile::modeCreate | CFile::typeBinary); 
   sf.WriteString(filename);
}
catch(...){
   AfxMessageBox("エラー", NULL);
}
500496:2006/01/31(火) 17:52:52
間違えました・・・

CStdioFile sf;  
CString filename = "test.txt";  
try{ 
   sf.Open(filename, CFile::modeWrite | CFile::modeCreate);  
   sf.WriteString(filename); 

catch(...){ 
   AfxMessageBox("エラー", NULL); 


ちなみにtry{}内で0除算すると、ちゃんとcatchに飛んでくれます
501デフォルトの名無しさん:2006/01/31(火) 17:58:13 BE:122283397-
>>500
try{
CFileException e;
sf.Open(filename, CFile::modeWrite | CFile::modeCreate, &e);
sf.WriteString(filename);
}
502デフォルトの名無しさん:2006/01/31(火) 18:04:09
>>491
出ないようにできました。ありがとうございます。
503496:2006/01/31(火) 18:09:15
>>501
先生ダメでした><;

WriteStringの場合、MFC内部でtry catchの処理をやってしまっているのでしょうか?
504デフォルトの名無しさん:2006/01/31(火) 18:11:29
>>503
デバッグビルドだと、そうかも
505デフォルトの名無しさん:2006/01/31(火) 18:13:31
VC++6.0で動いていたAPIアプリケーションを初めてVC++2005に移して今まで
char * だったところを100箇所以上 LPWSTR, LPCWSTR のキャストを入れ
たりして、やっとコンパイルが通ったと思ったら起動しても何も起こらない。
if (!InitApp(...)) などの return FALSE; の前に MessageBox() を入れたら
文字列は英字なのに漢字だわ。しかも意味がない。どうしたら英字になります
か。コンパイル時の環境設定やサンプル見たのですが、行き着けません。
(起動して何も起きないのも文字列の指定がまずいのかなと想像しています)
安直とは思いますが、教えて下さい。
506デフォルトの名無しさん:2006/01/31(火) 18:16:58
>>505
VC++2005はデフォルトでUNICODEビルドになってるみたいだから、
その辺りじゃね?
507デフォルトの名無しさん:2006/01/31(火) 21:38:24
>>505
506のとおり。
LPWSTRとLPCWSTRはchar *とconst char *とは全く違う。キャストできる型ではない。
508デフォルトの名無しさん:2006/01/31(火) 22:33:11
初心者すぎる質問ですみません。
[質問1]
・このプログラムはCですか?このプログラムを書くのはSDKのエディタですか?
・RADIOBUTTONとか書いてあるけど”ALL”というラジオボタンが画面に現れるのですか?
・また下の方に
STRINGTABLE DISCARDABLE
BEGIN
ID_COMBO_STYLE "Select Style for selected text region or equation\nStyle"
というメッセージがありますが、これはエラーメッセージか何かですか?(実際に画面に表示されるのですか?それともプログラムとしての命令文で別に表示されるものではないでしょうか?)

PRINT DIALOG DISCARDABLE 15, 15, 181, 181
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Print"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Printer:",1093,6,4,25,8
GROUPBOX "Range",1072,5,27,106,75,WS_GROUP
RADIOBUTTON "&All",1056,11,40,98,10,WS_GROUP | WS_TABSTOP
RADIOBUTTON "S&election",IDC_PRNTSTUP_SELECTION,11,51,98,10
RADIOBUTTON "C&urrent Page",1057,11,62,98,10
RADIOBUTTON "&Pages",1058,11,73,98,10
1136,50,118,62,41,CBS_DROPDOWNLIST | WS_BORDER |
END

STRINGTABLE DISCARDABLE
BEGIN
ID_COMBO_STYLE "Select Style for selected text region or equation\nStyle"
ID_COMBO_FACE "Select Font for the current selection\nFont"
END

509デフォルトの名無しさん:2006/01/31(火) 22:34:33
あともう一つ、htmlスレに人がいないのでここで質問します。
[質問2] これはhtmlですか?<GX>っていうタグは見たことが無いのですが。
このプログラムを書くのはテキストエディタで良いですか?
</GX>
<GX ID=Beetle>
<GX TYPE=tile ID=buyer>
Billing Address<BR>
Buyer: <GX TYPE=cell ID=buyer.name></GX><BR>
<GX TYPE=cell ID=buyer.isResPhone> Residence Phone: <GX TYPE=cell ID=buyer.rPhone></GX><BR></GX>
<GX TYPE=cell ID=buyer.isBizPhone> Business Phone: <GX TYPE=cell ID=buyer.bPhone></GX><BR></GX>
<GX TYPE=cell ID=buyer.isFaxPhone> Fax Phone: <GX TYPE=cell ID=buyer.fPhone></GX><BR></GX>
Address: <GX TYPE=cell ID=buyer.addrOne></GX><BR>
<!-- end of buyer tile --> </GX>

[回答期限]できるだけ早く できれば2/1中にお願いします。
510505:2006/01/31(火) 22:48:57
>>506, >>507 レスをありがとうございます。不審には思いましたが、先ずは
コンパイルを通して見ようとエラーメッセイジの指摘の通りに直してみました。
LPWSTR, LPCWSTR は今回挿入しただけですから、戻すには置換で取り消せると
気楽に考えていました。

UNICODE ビルドでなくするには、どうすればいいかが見つかりません。
API が ...W を参照しているので、.h ファイルを見て ...A に振るよう
#define を入れるんでしょうか。
511デフォルトの名無しさん:2006/01/31(火) 22:53:29
>>510
プロジェクトのプロパティ
512デフォルトの名無しさん:2006/01/31(火) 22:54:54
>>508
それはリソーススクリプト。
513デフォルトの名無しさん:2006/01/31(火) 22:55:25
>>509
xmlではないかと思う。
514デフォルトの名無しさん:2006/01/31(火) 22:56:40
>508,509
[回答1]
・いいえ。PlatformSDKにエディタは附属していません。
・しかるべく処理をすれば現れます
・しかるべく処理をすれば、ID_COMBO_STYLEから、その文字列が取得できます。
 エラーメッセージかどうかは表示されるコンテキストに依存しますがその様な内容には
 見えません。
[回答2]
・いいえ。HTMLではありません。
・ほかに処理すべきアプリケーションに心当たりが無ければ、テキストエディタで処理で良いです。
515デフォルトの名無しさん:2006/01/31(火) 22:57:14
>513
<BR>が<BR/>でない以上、XMLとするのは無理がある
516デフォルトの名無しさん:2006/01/31(火) 23:00:54
>>508-509
[1]リソーススクリプト
[2]XML,XHTMLっぽいが、<BR>タグが閉じられてないのでどうか。

ドイツやフランスやスペインの掲示板でもこれと同様の質問がされてるけど
何か流行ってんの?
517デフォルトの名無しさん:2006/01/31(火) 23:18:30
G-XML?
518デフォルトの名無しさん:2006/01/31(火) 23:19:17
>>510
Windowsプログラミングの鉄則

charではなくTCHARを使おう
char*ではなくLPTSTRを使おう
const char*ではなくLPCTSTRを使おう
strlen()ではなく_tcslen()を使おう

続く
519デフォルトの名無しさん:2006/01/31(火) 23:25:21
TCHARと_TCHARの違いは?
520デフォルトの名無しさん:2006/01/31(火) 23:26:02
>>518
>strlen()ではなく_tcslen()
lstrlen()じゃなかったっけ?
521デフォルトの名無しさん:2006/01/31(火) 23:26:25
>>518の続き
以下の3つの文字列があるとする。

char* cstr = "Nullpo";
wchar_t* wstr = L"Nullpo";
LPTSTR tstr = _T( "Nullpo" );

以下の相互変換が可能。

CA2T ca2t( cstr ); tstr = ca2t;
CA2W ca2w( cstr ); wstr = ca2w;

CT2A ct2a( tstr ); cstr = ct2a;
CT2W ct2w( tstr ); wstr = ct2w;

CW2A cw2a( wstr ); cstr = cw2a;
CW2T cw2t( wstr ); tstr = cw2t;
522デフォルトの名無しさん:2006/01/31(火) 23:31:48
Windowsに渡す文字列はもうUnicode固定でいいんでね?
523デフォルトの名無しさん:2006/01/31(火) 23:32:15
>>520
lstrlen()はPlatform API。
_tcslen()はCランタイム関数。

lstrlen()はlstrlenA()かlstrlenW()にマクロ置換される。
_tcslen()はstrlen()かwcslen()にマクロ置換される。
524デフォルトの名無しさん:2006/01/31(火) 23:39:49
CRTのwの付き方は異常
525デフォルトの名無しさん:2006/01/31(火) 23:45:18
>>522
UNIX由来のライブラリとかアプリとか、普通にcharベースばっかで
wchar_tすら使われるのは稀だからなぁ…

しかも、UNIXではUTF-8がスタンダードになってるから
結局ほとんどchar*しか使われない。
さらに、gccのwchar_tは32ビットだから、WindowsとWindows以外で
wchar_tのエンコーディングを統一的に扱うのは至難の業。

UTF-16で内部処理してるメジャーOSって、WindowsとMacくらいだな。
(Macは、UTF-16とUTF-8とSJISのAPIがOS自体の内部で混在するという狂気の沙汰だしw)
526デフォルトの名無しさん:2006/01/31(火) 23:46:40
文字列多すぎ
LPTSTR LPCTSTR TCHAR BSTR CString string OleChar wchar_t
527デフォルトの名無しさん:2006/01/31(火) 23:49:15
すみません、VB6とVB,net がインストールされているPCに、
Visual Studio 2005 Professional  も一緒にインストールできますか。
日経ソフトウェアに付いていたいたのでぜひ入れたいのだが…
528デフォルトの名無しさん:2006/01/31(火) 23:51:23
TCHARもwchar_tも、文字列じゃねー
529デフォルトの名無しさん:2006/01/31(火) 23:52:02
肉系はProfessional付けてくれるの?買いに行かなきゃ。
530デフォルトの名無しさん:2006/01/31(火) 23:56:58
>>526
LPTSTRとLPCTSTRとTCHARは基本的に同じものだが。
あとCComBSTRとか_bstr_tとかはいいの?w
531デフォルトの名無しさん:2006/02/01(水) 00:00:07
すいません
VC6でプログラミングしてるんですが、ファイルが保存できないと警告が
でるだけでなく、たまに消してもないのにソースが消えてしまうのは
いったい何なんでしょうか。。?
532デフォルトの名無しさん:2006/02/01(水) 00:01:50
533デフォルトの名無しさん:2006/02/01(水) 00:19:55
>>532
ありがとうございます。
ウィルスに感染してる様子もないしウィルスチェックしても何にもかからないんですけど
ウイルスなんでしょうか・・
とりあえず仕様ではないんですね。
534デフォルトの名無しさん:2006/02/01(水) 00:22:51
消してもいないのにソースが消えるのが仕様かも、と思える精神構造に学術的興味を感じる。
535デフォルトの名無しさん:2006/02/01(水) 00:28:13
>>533
それ俺も体験したことある。IDEでファイルを保存しようとすると、
「ファイルを保存できません。ファイルが他のアプリケーションで使用されている可能性があります。」
とかメッセージが出て、そのファイルがあるはずのフォルダを見ると消えている。
(すばやくフォルダに切り替えると、いきなりファイルが消える瞬間を目撃できる。}
原因は不明だが一旦OSを再インストールして
怪しいアプリをインストールしないようにしたら発生しなくなった。
536デフォルトの名無しさん:2006/02/01(水) 00:34:23
>>535
そう、そんなメッセージでてきてました。
原因不明で不快で不快で仕方ないんですが・・・
最善策は再インストールしかないという事でしょうか。
537510,505:2006/02/01(水) 00:44:19
UNICODE を使わない設定をプロパティに見つけて、LPWSTR, LPCWSTR を置換して
コンパイルしたら起動できるようになりました。
で、ここへ来たら、>>511 さんのレスがありました。
これからは >>518 さんの言われる通りでしょうが、まずは移植ということで。
ありがとうございました。

ダイアログで落ちるところが出たのでこれからその追求です。fopen(), sprintf()
などでも warning があるし。
538デフォルトの名無しさん:2006/02/01(水) 02:58:36
そのファイルを他のアプリで開いたりしていないの?
複数のアプリが絡んだ話だとインストールしなおしだけでは無理じゃ?
539537,510,505:2006/02/01(水) 08:32:53
>>538
ご指摘ありがとうございます。「輪郭抽出」でぐぐると出てくる実験プログラムを
これまで win98, VC++6.0 で作って使っていたもの。スタンドアロンです。
ま、あるとしても ShellExecute() から位。しかし unicode に変えないと
いけないでしょう。これから勉強です。
また質問したときは教えて下さい。
540デフォルトの名無しさん:2006/02/01(水) 08:39:24
別にほかのアプリで開くも何も
VCしか開いてないときでも保存しようとすると
警告文が出て保存できない場合があるんです
541デフォルトの名無しさん:2006/02/01(水) 10:03:47
Visual Studio って原則的に1プロジェクト1 main みたいなんですが、
1プロジェクトにたくさん main をおく。もしくはプロジェクト抜きでソースを
コンパイルするとかってできますか?
あと、プロジェクト毎にプロパティからコンパイル時にリンクする
ライブラリを追加することになっているっぽいのですが、
せっかくソリューションというまとまりがあるわけだし、全体に追加できないのですかね?
Visual Studio 2005 です。

小さい1ファイル程度の実行プログラムを大量に(具体的には画像フィルタ)
作ろうなんてしているのですが、今のところ一つのためにプロジェクト作って
いちいちリンクさせるライブラリをコピペして、なんてやってます。

UNIX 環境でばかり開発してきたからよくわからんですばい。
どなたかよろしくおね
542541:2006/02/01(水) 10:06:29
あ、ついでにもうひとつ。
プロジェクトの名前を変えても、実際のローカルにあるファイル、フォルダ名が変わってないのですが、
プロジェクトの名前変更をそれらにも反映させるにはどうすればよろしいでしょう?
543デフォルトの名無しさん:2006/02/01(水) 10:16:41
>>542
Solutionに複数のProjectを作れ。
544デフォルトの名無しさん:2006/02/01(水) 10:27:16
UNIX慣れてるならmakefile作ってnmakeで良いんじゃない
545デフォルトの名無しさん:2006/02/01(水) 11:05:45
>>543
その状態です。ソリューションを選んでプロパティを開くとリンカの項目がありません。

>.544
あえて Windows での開発にも慣れておきたいです。
546デフォルトの名無しさん:2006/02/01(水) 11:27:45
(VCインスコフォルダ)\VCProjectDefaults\CoreWin.vcstyle
ここに自分がよく使うlibを追加しとけばWin32を選ぶと自動的にlibが追加されるようになる。
547デフォルトの名無しさん:2006/02/01(水) 11:58:03
>>544 漏れ、不完全ながらもポータビリティのチェックのために
cygwin つかって GNU make & g++ でビルドするプロジェクトも作ってる。
ただ残念なことに、g++ のエラーメッセージやワーニングの
フォーマットが cl のそれと違うので、エラー箇所に即ジャンプ、
というわけにはいかないのが悲しい。
548デフォルトの名無しさん:2006/02/01(水) 12:15:36
>>546
トン。GUIからできるようにはなってないわけですか。ふむふむ。

ちょっと状況と質問追加。例えばマスクフィルタの mask.cpp と mask.h を作っておくと、
それを利用して、平均フィルタ、ラプラシアンフィルタ、ソベルフィルタ、
をちょちょちょいと作れるんですが、
やっぱり、3つプロジェクト作らざるを得ないですよね?
その際に mask.cpp, mask.h をその3つにコピーせざるをえない?
549539,537,510,505:2006/02/01(水) 12:19:23
>>540
まだ全体がよく分からないのですが、VC++2005からのデバッグ、ShellExecute()
からの起動、単体での起動で、.txt, .jpg, .bmp の保存、読み込みは異常が出て
いません。名前をつけて保存は試していません。ご指摘は何か起きたとき助かり
ます。ありがとうございました。

ところで、link map を取るにはどこで指定するんでしょうか。それともない?
550デフォルトの名無しさん:2006/02/01(水) 12:35:25
>>548
いったい何を作ってるの?
ライブラリ?それとも一つ一つが実行ファイルなの?

ぶっちゃけ開発手法そのものをミスってる悪寒。
551デフォルトの名無しさん:2006/02/01(水) 14:15:40
>>550
画像フィルタです。それぞれが実行ファイルです。(>>541 参照)
共通で再利用できる部分がある複数個のフィルタも 存在します。(>>548 参照)

どう開発すればいいでしょう?
UNIX環境下でコマンドラインでやっている時は楽にできたのですが、
Visual Studio を試してみようと思ったらこういう状況になりました。
Visual Studio 自体がこういう使い方ではなく、
本当に「プロジェクト」と呼べる規模のものを考えて作られている感は確かに感じます。
今後のために慣れておきたいのでできればこのGUIを使いたいのです。
552デフォルトの名無しさん:2006/02/01(水) 14:25:53
俺なんて、テストプロジェクトとかいっぱい作りまくってる。
「プロジェクト」って語感からはかなりまとまった
大きなソース群って言う感じを受けるけど、
メイクファイルのターゲットごとに一つって感じだ。

実際、Visual Studio から GNU make 呼び出して
使ってるけど、ターゲットごとにプロジェクトを設定してるよ。
もちろんプロジェクトごとに Makefile をコピーするんじゃなく、
Makefile は一つだけでビルドコマンドを make -F ../Project2/Makefile
みたいな感じにしてる。 VPATH 必須。
553デフォルトの名無しさん:2006/02/01(水) 14:42:47
>>537
fopenとかで出ているwarningってもしかして、C4996じゃない?
古い云々言われるやつ。

ヘルプとかを見た感じMS独自拡張な気がするから無視(無効)してるんだけど問題なし?
554デフォルトの名無しさん:2006/02/01(水) 14:56:54
>今後のために慣れておきたいのでできればこのGUIを使いたいのです。

いちいちプロジェクト作るのめんどくさいと思うのは
お前が慣れてないからだ
555デフォルトの名無しさん:2006/02/01(水) 15:13:38
VCだけってわけじゃないけど、
アプリケーションの外見を変える
スキンの実装ってどうやる?

ただ画像はっつけるだけかなー?
556549,537:2006/02/01(水) 17:31:20
>>553
そうそれ。うるさいから変えてやろうとしたけどサンプル見てもよくわからないん
でそのまま。この(実験)プログラムは SDI で複数のファイルの内容を同時に
表示できないんで、読み込み記録を取って起動時その記録を見てメニューに積んで
クリックで指定のファイルを読むように急場しのぎでくっつけたものなんで、
煩いから、API に変えようと思います。

余談ながら、ユーザ登録しろと煩いんで、パスワードもあるんで登録したけど
まだ吹き出しが出てくる。
557556,549,537:2006/02/01(水) 19:11:44
>>553
なんで fopen_s(), sprintf_s() なのか見たら、fopen_s() は file pointer を
引数に入れて err no. を返すようになった。sprintf_s() は第2引数に書き込み
領域の長さを入れるようになった。_s は security の意。
ま、安全には違いない。書き換えて試した。

link map を取る方法が分かって取ってみたら、"CIL" ってのがある。
.obj name が取れないと困るアプリが他にある。なんとか汁だ。
558557,556,549:2006/02/01(水) 23:19:39
引き続きすみません。教えて下さい。
char, char * で書いてあるアプリを UNICODE 対応にしようと思いますが、
1.char -> _TCHAR に換える。
2.暗黙の内に1バイトで文字列の長さを扱っているところを sizeof(_TCHAR)
  倍にする。
3.テキストファイルの読み込み、書き出しで UNICODE への変換、UNICODE から
  の変換を行う。
4.リソース・ファイルを含め、定数文字列を _T() で囲む。
5.でコンパイルする。
ってところでしょうか。
559デフォルトの名無しさん:2006/02/02(木) 00:38:25
>>558
基本的にそれでいいけど、
「文字コードの変換は必要最小限にする」努力も忘れずに。
560デフォルトの名無しさん:2006/02/02(木) 02:08:38
ライブラリをリンクする時、1でも2でもできるみたいだけど
どう使いわければいいんでしょうか?

1.libファイルをプロジェクトに追加
2.プロジェクトの設定(〔リンク〕タブ)でリンクするlibファイルを指定
561デフォルトの名無しさん:2006/02/02(木) 04:54:27
WinXP + VC++.NET でプログラムを作っているのですが、

LINK2022 メタデータの操作に失敗しました

というエラーが出てリンクできませんでした。

typedef struct _MAP
{
char MAPEXT[3];
(以下略)

とう構造体を変更した場合にエラーが出るようなのですが、
配列を2以下にした場合はエラーが出ず、3以上にすると出るようです。
原因はなんなのでしょうか?
どなたか教えてください。
562558,557,556:2006/02/02(木) 05:59:12
>>559
お教え頂きありがとうございます。そのように致します。
またよろしくお願い致します。
563デフォルトの名無しさん:2006/02/02(木) 15:53:44
DelphiでいうTListっぽく使えるのってvectorでおk?
思ったよりC++って具合良いのね
564デフォルトの名無しさん:2006/02/03(金) 18:32:50
このスレでDelphiだされても、よくわからないと思うんだが・・・
565デフォルトの名無しさん:2006/02/04(土) 07:54:05
ものすごく基本的なことなんですけど、
C言語とかの関数ってwindow.hとかd3dx9.hとかを読み込んで
どの関数を使うか決めるんですよね?
で、そのヘッダーファイル?を読み込んだときに使える関数のリファレンスって
日本語でどこかにまとめて書いてないでしょうか?
どのヘッダーファイルを読み込んだらこの関数が使える
というふうに載ってるとありがたいんですが。

PHPとかActionscriptとかはリファレンス本があるんですが
CとかC++のリファレンス本は無いようなので。
566デフォルトの名無しさん:2006/02/04(土) 08:43:18
>>565
MSDN Library
ただし関数名などからそれに必要なヘッダが書いてあるという具合。

ちなみにCやC++の標準関数なら本もいろいろとある。
567デフォルトの名無しさん:2006/02/04(土) 08:46:05
どうしようもなく迷子になったときには
grep 最強、という噂もある。

Google Desktop Search とかって
ソースファイルも食ってくれる?
568デフォルトの名無しさん:2006/02/04(土) 09:07:25
>>567
もちろんソースファイルやヘッダーも検索の対象だけど、
大抵のものは自分で書いたソースやサンプルばかりひっかかって、
肝心のPratform SDKのヘッダーが出てこないと言う罠。

それにWinAPIの関数ならwin***.hで宣言されているけど、
windows.hをインクルードしてねと言うものが殆どだから
WinAPIに関してはどのヘッダーが必要なのかを知る必要性をあまり感じない。
569565:2006/02/04(土) 09:41:39
ありがとうございます。
MSDN Library 情報がいっぱいあってどこに何が書いてあるか解らない orz
さすがC言語一筋縄ではいかない。
近場の本屋にはなかったのでアキバ(ザコン)でも行ってこようかと思います。
はやくエディタとかさくっと作れるぐらいになりたい。
570デフォルトの名無しさん:2006/02/04(土) 19:24:18
初心者ならVistaが出るまでVC++は控えたほうがいいと思う。
今のVC++は仕様が不安定すぎるから。
本格的な本職プログラマを目指しているのならば、JavaとC言語がある。
まずはそっちをやってみて状況を見据えた上でC++を始めたらいいでしょう。
571デフォルトの名無しさん:2006/02/04(土) 20:56:37
>>570
今さら「C++じゃなくてC」とか言われたってなぁ。
C++が難しいってんなら、Javaがあるし。

C++じゃないCなんて覚えても、もう役に立たん。
572デフォルトの名無しさん:2006/02/04(土) 21:05:08
いや、C++はやる価値あってもVC++がだめぽ
573デフォルトの名無しさん:2006/02/04(土) 21:06:26
>>572
VC++のどこが「仕様が不安定」なんだ
ひょっとしてC++/CLIの事を言ってるのか
574デフォルトの名無しさん:2006/02/04(土) 21:49:18
俺VCしか使ったことないから分かんないんだけど、
何に比べて不安定なの?
575デフォルトの名無しさん:2006/02/04(土) 21:59:03
>>574
COBOL
576デフォルトの名無しさん:2006/02/04(土) 22:15:42
>>573
C#じゃないの?
577デフォルトの名無しさん:2006/02/04(土) 22:18:48
マネージドC++捨てたじゃん
不安定だわ
578デフォルトの名無しさん:2006/02/04(土) 22:21:01
>>578
それと「Visual C++の仕様の安定性」とどう関係あるの?
/clrを使わなきゃいいだけじゃん。

C++/CLIとC++を混同してる人ですか?
579デフォルトの名無しさん:2006/02/04(土) 22:32:05
あなたは自分と他人を混同してますね
580デフォルトの名無しさん:2006/02/04(土) 22:34:56

  ぼくに与えられた
  ぼくの一日を
  ぼくが生きるのを
  ぼくは拒む


・・・・・違うな。反省。
581デフォルトの名無しさん:2006/02/05(日) 00:29:50
Visual C++で関数ごとに「実行回数」「実行時間」「平均実行時間」を計測する
機能は提供されていますか?
提供されているとすれば、どのバージョン、グレード(スタンダードやExpressではないなど)
を教えてもらえると助かります。
582デフォルトの名無しさん:2006/02/05(日) 01:40:37
プロファイラってどのグレードだっけ。
2005だとProでも付いてなかったキガス
583デフォルトの名無しさん:2006/02/05(日) 01:59:26
584デフォルトの名無しさん:2006/02/05(日) 02:06:57
Enterprize級(Team Suite Team System, ..)のみの機能。
2005には未対応だがまだICC買ったほうがマシかな。

自分の書いたコードのプロファイリングならRDTSCとかグローバル変数で永続性のあるカウンタを表現するとか
いろいろ手はあるよな。
突き詰めた最適化やるならICCのほうがいい。I

最終的な生成物はAMDのCPUでも十分高速に動く。
585582:2006/02/05(日) 02:14:25
>>583-584
ありがとう。

>>581
という事らしい。
ttp://www.amazon.co.jp/exec/obidos/ASIN/B000CSRIXW/qid=1139073093/sr=1-20/ref=sr_1_0_20/250-6395105-0533044
これを買うんだ。

…現実的じゃないな。
586デフォルトの名無しさん:2006/02/05(日) 02:23:49
>>585
俺は去年のキャンペーンで16万で入手したw
587581:2006/02/05(日) 02:26:09
>>582-585
ありがとうございます。
本当に現実的じゃない……orz
588デフォルトの名無しさん:2006/02/05(日) 02:38:46
589562:2006/02/05(日) 18:57:02
お世話になっています。
UNICODE 対応を試しています。
winXP, VC++2005 で通っているのでいいといえばいいのですが、マシンの使い勝手から
win98機, VC++6.0 でも通しておけば、いいなと試しましたら下記のルーチンで失敗します。
UNICODE 適用でなければ、通って起動できます。
メイン関数名は、_tWinMain() で、リンク・マップを見ると _wWinMain() になっています。
設定のリンクのアウトプットは、"wWinMainCRTStartup" を入れています。
関連定義では、_TCHAR szClassName[]=_T("template");
です。ダメな理由がお分かりでしたらお教え下さい。

ATOM InitApp(HINSTANCE hInst)
{
WNDCLASSEX wc;
memset(&wc, 0, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
// 下記の2つに40バイト以上を指定すると失敗する
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
// ここでカーソルを指定すると任意のカーソルに変えても反映されない。
wc.hCursor = NULL;//LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
// 05.11.25 menu resource 追加
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENUMAIN);//NULL;
wc.lpszClassName = szClassName;
wc.hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
return RegisterClassEx(&wc);
}
590デフォルトの名無しさん:2006/02/05(日) 19:29:19
Win9xにはW系APIが殆ど実装されてないから。
UNICODEでコンパイルするのを諦めるか、MSLUでも使っとけ。
591デフォルトの名無しさん:2006/02/05(日) 23:26:21
ダイアログ作ってその中でリストコントロール貼り付けてるんですが、
そのリスト内だけ別のフォント(固定ピッチ?)にしたいんですが
この場合CreateFontで論理フォントつくってSETFONTで送ってやるんでしょうか?
普通はどうしてるのかな…
592589,562:2006/02/05(日) 23:43:15
>>590 レスをありがとうございます。win98 でコンパイルしたものを winXP に
持っていって起動したら動きました。

LastError = 131 が返って来て、FormatMessage() もダンマリで、MSDN に
bug report がないかと探したのですが、何もない。
win95 での UNICODE サンプルがあるので、win98 ではできるかと期待しま
した。
593デフォルトの名無しさん:2006/02/06(月) 10:55:39
>>591
で、実際に自分で手を動かして何かやってみたのかい?
594デフォルトの名無しさん:2006/02/06(月) 18:31:44
vc++で指定したURLのクッキー情報を読み出すにはどうすればよいでしょうか?
595デフォルトの名無しさん:2006/02/06(月) 19:04:13
WinInetでよければ
596デフォルトの名無しさん:2006/02/06(月) 21:16:12
質問です。
POINT構造体の、原点からの距離の絶対値を簡単に求める関数って無いでしょうか…?
√(A.x^2 + A.y^2) としても良いのですが、プログラムコードが長くなってしまいますので…
597デフォルトの名無しさん:2006/02/06(月) 21:18:21
>>596
√(A.x^2 + A.y^2)を行うインライン関数を自分で作ればいいだけだろ。
598デフォルトの名無しさん:2006/02/06(月) 21:48:21
CRTってのはMS製のCの標準ライブラリってことで良いんでしょうか?
あと、MSDNC++の標準ライブラリのリファレンスが英語しかないんですけど
日本語のリファレンスってないですか?
599デフォルトの名無しさん:2006/02/06(月) 21:53:48
CRTはC RunTimeの略であってMS製という意味は特に込められていない。
600デフォルトの名無しさん:2006/02/06(月) 22:03:26
確かにC++のリファレンスはほとんど使わないしな
よく使うAPI方面を充実させて欲しいね
601デフォルトの名無しさん:2006/02/06(月) 22:06:20
VC8なんですがctrl+hにbackspaceを割り当てるにはどうすればいいでしょうか?
キーバインディング設定見てみたけどそれらしいものがありません。
てかコマンドのリストが大きくできなくて見づらい・・
602デフォルトの名無しさん:2006/02/06(月) 22:09:52
C++のほうは名前の正しい綴りや引数の順番を知りたいことが多いから、
俺は英語でも気にしない。そこにあるプロトタイプ宣言は結局C++言語なんだから。
603デフォルトの名無しさん:2006/02/06(月) 22:15:13
>>601
いま探したら簡単に見つかったから教えてやんない
604デフォルトの名無しさん:2006/02/06(月) 22:43:00
>>596
つ[hypot()]
605デフォルトの名無しさん:2006/02/06(月) 22:48:18
プログラム以前の質問で申し訳ありませんが、
Visual C++ 2005 Express Editionの設定情報は
どこにあるのでしょうか?

インストール時にマイドキュメント内に
自動的にできるフォルダを削除して
アンインストール→再インストールしましたが
間違えて設定した状態で起動してしまいます。

具体的には下部ウィンドウにデフォルトであったものを間違えて消してしまったり
「出力」ウィンドウをソースプログラムのある箇所に移動させたまま
下部ウィンドウに戻すことができなくなっており、
メニューからの戻し方が不明な状態です。

厨な質問であることは重々承知しております。
どなたかご教授いただけたら幸いです。
606デフォルトの名無しさん:2006/02/06(月) 22:48:41
__declspec(align(16))はクラスのメンバ変数に使えますか?
グローバル変数に使うと正常に動作しますが、メンバ変数に
使うとどうもエラーになってしまいます。
607デフォルトの名無しさん:2006/02/06(月) 23:05:24
>>606
MSDNにはメンバ変数に__declspec(alignを使っている例もあるのだから使えるはずだ。
http://msdn.microsoft.com/library/ja/vclang/html/vcrefAlign.asp?frame=true
608デフォルトの名無しさん:2006/02/06(月) 23:11:13
>>606
どんなエラーが出るのかを書くことをオススメする。
俺も昔エラーが出て困ったことがあったが君と同じ状況かわからないから書けん。
609デフォルトの名無しさん:2006/02/06(月) 23:18:58
>>607-608
ありがとうございます。
SSEを使おうとしているんですが、グローバル変数に
__descspec(align(16)) char buffer[256];と書くとOKで、
メンバ変数に同じ書き方をすると、不正なメモリアクセスエラーに
なってしまいます。
610デフォルトの名無しさん:2006/02/06(月) 23:31:35
>>609
普通に出来るなぁ。
再現する最小コードキボン。
611デフォルトの名無しさん:2006/02/06(月) 23:35:04
それならこちらのコードが悪いんでしょうから、もう一度色々いじってみます。
どうもありがとうございました。
612デフォルトの名無しさん:2006/02/07(火) 00:31:45
初めて質問させていただきます。よろしくお願いします。
MFCで書かれたサンプルプログラムがいまいちよく理解できないのでAPIに書き直すという作業をしています。
そこで、関数を置きなおすときに、MFCにおけるダイアログボックスを初期化するUpdateData()関数をAPIで書き換えたいのですがAPIにおいてどのような関数を使ったらよいのでしょうか?
どなたか分かる方がいらっしゃいましたら教えてください。
よろしくお願いします。
613・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/07(火) 00:42:58
>>609
俺も普通にできるけど
__m128iをクラスメンバに設定できる?そこ重要。

余談だけどclassだとデータの並びが解りにくいんで、おいらは構造体と操作関数で実装してあとでC++でラップしてる。
614・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/07(火) 00:46:03
>>612
ダイアログの初期化でしょ?
WM_INITDIALOGで処理かな。
615デフォルトの名無しさん:2006/02/07(火) 00:54:46
>classだとデータの並びが解りにくいんで、おいらは構造体

いつからクラスと構造体は違うものになったんだ?
616・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/07(火) 00:57:30
extern "C" struct {} ;ってこと
617デフォルトの名無しさん:2006/02/07(火) 02:07:28
hoge *p = new hoge[100]; とかやって獲得した領域を delete するときには delete[] p; とかやるようですが、
delete p; とやるとどんなことになってしまうのでしょうか?
hoge が int みたいな単純なやつの場合と、コンストラクタやデストラクタを持ったクラスとかの場合とで何か違ったりしますか?
618デフォルトの名無しさん:2006/02/07(火) 02:15:01
VisualC++.NETには.NETなしでも動くほうの昔のVC++も付いてくるんですよね?
619デフォルトの名無しさん:2006/02/07(火) 02:27:45
いいえ
620デフォルトの名無しさん:2006/02/07(火) 02:45:28
>>619 え〜そうだったか?
Visual Studio .NET 2003 でも
Visual Studio 2005 でも
普通にネイティブアプリが作れるけど。
そういうこと言ってるんじゃないの?
621デフォルトの名無しさん:2006/02/07(火) 02:56:14
新参者ですがよろしくおねがいします
いま高校生なんですがC言語を本気で勉強したいと思っています
みなさんは最初C言語をどのようにして勉強したんですか?
やはり専門学校や独学でしょうか?
自分は身近にC言語が分かる人もいないし
高校生の身なので専門学校にも行けないし(お金も無い)
なので本を買い独学で勉強をしようと思って本屋に行ったのですが
どれも分厚い本ばかりでどれを買ってよいのか分かりませんでした
どなたか入門にはお勧めの本など教えていただけないでしょうか?
どうかよろしくお願いいたします
622デフォルトの名無しさん:2006/02/07(火) 02:57:55
>617
delete p;では、hoge[0]のデストラクタしか呼ばれない。
623617:2006/02/07(火) 09:09:05
>>622
おーなるほど。
ありがとうございます。

でも、なんでそんな作りになってるんだろう?
624デフォルトの名無しさん:2006/02/07(火) 09:11:11
そんなことC++スレで聞けばいいのに
625デフォルトの名無しさん:2006/02/07(火) 10:55:48
>>624
ヒント:ここはくだすれ
626デフォルトの名無しさん:2006/02/07(火) 17:31:16
>>623
現在のdelete[]はnew[]を行ったときに内部で要素数をどこかに記憶しておいて、
delete[]を行うときにそれを参照してデストラクタを呼ぶ回数を決めている。

delete1つで単一のオブジェクトも配列のオブジェクトも削除できるようにすると、
現状のdelete[]に必要な要素数の記憶を単独のオブジェクトのときも行わなければならず、
それは非効率だと言うことでdeleteとdelete[]は分かれることとなった。
627デフォルトの名無しさん:2006/02/08(水) 04:00:49
VC++2005.net をつかってます
以前のVC++6.0で動いていたものを、ビルドすると、
ファイル 'libcp.lib' を開くことができません
とでます。
libcp.libとはなんでしょうか?
自分で調べてもバージョンが違うとどうのこうのしかわからなくて、
結局のところの対策がわかりません。
お願いします。
628デフォルトの名無しさん:2006/02/08(水) 06:12:29
VC6のプロジェクトを2005で開けば2005用に作り直されるはずだけど
どういうふうにビルドしたんだ?
629デフォルトの名無しさん:2006/02/08(水) 07:14:37
>>621
入門書なら何でも良いと思うが、本屋で最初のほうを立ち読みして
理解できると思ったものを選ぶと良いんじゃないかと。
630デフォルトの名無しさん:2006/02/08(水) 08:05:05
>>626
なるほどそんな経緯があるのですか。
他にもいろいろあるけど、>>624 の言うとおり Visual C++ な話でもないので、C++スレ行ってきます。
ありがとう。
631デフォルトの名無しさん:2006/02/08(水) 10:54:11
>>621
>>629 のやり方がいいと思うが、自分の場合「用語」で苦労した。
コンピュータ用語辞典、C言語辞典、アルゴリズム事典とかは手許にあると
いいと思う。
632デフォルトの名無しさん:2006/02/08(水) 19:10:46
VC8のエディタのタブについて質問です。
[tab]キーの設定は「タブを挿入」にしてるんですが以下のような場合にタブが挿入されません
int(ここで[tab]を打つ) num;
こういう時に[tab]を打っただけタブを挿入させるにはどうすればいいでしょうか?
633デフォルトの名無しさん:2006/02/08(水) 20:08:01
>>629
>>631
ありがとうございます
今週末にでも大型書店へ行って探してきます
634デフォルトの名無しさん:2006/02/09(木) 00:35:45
Visual C++ .NETのソースプログラムって
Visual Studio 2005 C++ではコンパイル出来ないんですか?
教えてください(人∀・)タノンマス
635デフォルトの名無しさん:2006/02/09(木) 00:43:44
Visual C++ 2005 Express Edition で Windows アプリケーションは作れる?
636デフォルトの名無しさん:2006/02/09(木) 01:31:53
当然作れる
637デフォルトの名無しさん:2006/02/09(木) 01:58:41
>>627
本当に調べた?ググッて一番最初に出てくる、Microsoftの
FAQにlibcp.libがなんだか書いてあるけど。
638592:2006/02/09(木) 08:25:19
>>635
当然だが、API ベースで移植?できた。リソースの IDC_STATIC など自分で
定義しないといけないものがある。afxres.h がないため。
fopen(), strcpy() などで、fopen_s(), strcpy_s() など動作を安全にする
ための API が追加されており、warning が一杯出る。
__w64 int など、64 bits 化の準備がされており、一部の変数で warning が
出て煩い。例えば、DialogBox() の返し値が INT_PTR とか。
自分は環境変数 _UNICODE, _VC2005(私設)を設定して書き分けた。
639仕様書無しさん:2006/02/09(木) 11:08:16
>>638
最新のPlatform SDKを入れたVC6環境やVC7で既に、MFCのクラスの一部や、
CArrayのインデックス値等テンプレート内で、INT_PTR は使われているよ。
640デフォルトの名無しさん:2006/02/09(木) 12:27:30
おまえらの言ってることはちっともわからん。
641638:2006/02/09(木) 15:33:10
>>639
そうなの。
新しい?コンパイラを触るのは8年ぶりだわ。もう買う気はなかったが、
タダだったもんで落として置こう、落としたら試して見ようとなった。
いろいろ教えてくれた人に感謝。
642デフォルトの名無しさん:2006/02/09(木) 18:06:10
DoModal でモーダルダイアログを表示して、時間のかかる計算をおこない、
経過をそのダイアログに表示しようとしています。
しかし、

BOOL CTestDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 KeisanFunc(this); // 計算関数を呼ぶ

 return TRUE;
}

void KeisanFunc( CTestDlg *pDlg )
{
 pDlg->テキスト表示("処理1開始");
 計算処理1();

 pDlg->テキスト表示("処理2開始");
 計算処理2();

 pDlg->テキスト表示("終了");
}

のようにしても、OnInitDialogではまだダイアログが開く前に計算が開始してしまい、
最後の"終了"の部分が終わってからやっとダイアログが開きます。。。
どうしたら良いんでしょうか。
643デフォルトの名無しさん:2006/02/09(木) 18:09:38
>>642
モードレスでやれば?
644デフォルトの名無しさん:2006/02/09(木) 18:25:13
OnTimerとかOnIdleでちまちま計算するとか、
マルチスレッドにして同期に苦しめられるか。
645デフォルトの名無しさん:2006/02/09(木) 18:31:58
>>643 >>644
やっている計算や、ダイアログ自体は、本当にものすごくシンプルなので、
できるだけ単純に書きたかったんですが…

やはりモーダレスあるいはマルチスレッドにしないと無理なんでしょうか?
なんか馬鹿馬鹿しくて。。。
646デフォルトの名無しさん:2006/02/09(木) 18:41:56
モードレスにして、KeisanFuncでときどきメッセージループを廻してやったり、
関数を抜けるときにDestroyしてやるのが一番楽だとは思う。
647初心者:2006/02/09(木) 18:47:13
すみません。どうしようもなく困ってるので、誰か助けてください。
以前、VisualC++6.0 と DirectX9.0SDKでゲームを作っていたのですが、
このたびPCを買い換え、各ソフトをインストールし直して、コンパイル
しようとしたところ、以下のメッセージがでて、コンパイルできません。
どうすればいいのでしょか?

--------------------構成: DR - Win32 Debug--------------------
コンパイル中...
Global.cpp
リンク中...
Global.obj : error LNK2001: 外部シンボル "_DirectDrawCreateEx@16" は未解決です
Debug/DR.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
ブラウザ データベースを作成中...

DR.exe - エラー 2、警告 0
648デフォルトの名無しさん:2006/02/09(木) 21:09:05
>>647
ライブラリのパスを通していないなど単純な手違いだと予想。
649デフォルトの名無しさん:2006/02/09(木) 21:11:28
すみません、VC++6.0使用している方、VC++6.0をインストールした直後のコンパイルオプションを
教えて頂けませんでしょうか。
会社でVC6使用していて、この度VS2005EEを自宅のPCにインストールしたのですが、
設定がわからずデバッグ等がうまくいかずに困ってます。
よろしくお願い致します。
650デフォルトの名無しさん:2006/02/09(木) 21:14:59
>>649
VC++6とVC++8(VS2005)の一番の違いはUnicodeを使用する設定になっているかどうか。
いろいろとコンパイルエラーになるのだったらまずはそこを見直してみろ。
651デフォルトの名無しさん:2006/02/09(木) 22:38:04
【Whidbey】Visual Studio 2005スレ Part2
http://pc8.2ch.net/test/read.cgi/tech/1113305966/150
によると、2005では以下のような変更があるらしいので、
この辺の設定を重点的に見直してみては。

・wchar_tが組み込み型に→過去のライブラリがリンク不可
・for int i のスコープの変更→過去のソースが一部コンパイル不可
・time_tの64ビット化→過去にファイルセーブしたものと不整合(β1で確認)

上記はβ2ではスイッチとdefineで過去の仕様に戻せました。
652641,638:2006/02/09(木) 23:53:11
>>649
一度もコンパイルできていない?

VC++6.0では殆どそのまま使ってきた。ときに追加の .lib をプロジェクトに
含めたことと、表示フォントを変えた程度。
VC++2005EE 設定では、
ttp://lets-go.hp.infoseek.co.jp/c_setting09.html
を参考にした。
default では UNICODE ベースでコンパイルするようになっているが、
プロジェクト→プロパティの中の「構成プロパティ」→「全般」に
「文字セット」の指定が可能になっている。
653デフォルトの名無しさん:2006/02/10(金) 04:54:17
質問です。

CStringなりchar*なりを用いて、変化する文字列を作りたいのですが
どのようにすればよいでしょうか?
具体的には、カウンタの番号を文字列化して予め定めた特定の文字列
の後ろにつけた物を生成したいのです。

例えば、count = 0〜300として、

output000.txt
output001.txt

...
output299.txt
output300.txt

としたいのです。
どのようにすれば宜しいでしょうか?困り果てております...
654質問はよく読んでないよ:2006/02/10(金) 05:11:33
CString str ;
str.Format("output%03d.txt", count) ;
655デフォルトの名無しさん:2006/02/10(金) 05:39:28
>>654
有難う御座いました!!!
656デフォルトの名無しさん:2006/02/10(金) 07:46:03
ここはC相談室じゃねえでよ
657デフォルトの名無しさん:2006/02/10(金) 08:21:09
>>656
だからこそ、CStringなんじゃないの?
658デフォルトの名無しさん:2006/02/10(金) 11:07:01
>>642です。
マルチスレッドにすることにしました。
一応処理自体は動いてはいるのですが、UpdateData(FALSE)を行うと、
CDataExchange::CDataExchange→CWnd::AssertValid で止まってしまうのです。
プログラムとしては、>>642 を変更して以下のような感じです。アドバイスお願いします。

BOOL CTestDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 AfxBeginThread(KeisanFunc, this);

 return TRUE;
}

UINT KeisanFunc( LPVOID pParam )
{
 CTestDlg *pDlg = (CTestDlg*)pParam;

 pDlg->テキスト表示("処理1開始");
 pDlg->UpdateData(FALSE);
 計算処理1();

 pDlg->テキスト表示("処理2開始");
 pDlg->UpdateData(FALSE);
 計算処理2();

 pDlg->テキスト表示("終了");
 pDlg->UpdateData(FALSE);
}
659デフォルトの名無しさん:2006/02/10(金) 12:30:24
ワーカスレッドからはCWndに触れなかった気がする。
生のhWndでトライ。あと、SendMessageはデッドロックの危険もあるので、
せめて、SendMessageTimeoutなど使うように。
660デフォルトの名無しさん:2006/02/10(金) 13:34:17
VisualC++6.0なのですが、プロジェクトを作る時、MFC(exe)にしてそのあとは「次へ」だけのデフォルトのワークスペースを作りました。
そこでCのみのプログラムを書いてコンパイルしたら実行結果が出る黒いウィンドウと描画結果の白いウィンドウが出ますよね。
そこで質問なのですが、そうやって描画された図形を切り取ってファイルに保存することはできますか?
教えてください!
661デフォルトの名無しさん:2006/02/10(金) 13:41:48
できる
662デフォルトの名無しさん:2006/02/10(金) 13:41:50
またお前か
663デフォルトの名無しさん:2006/02/10(金) 13:41:53
Cの質問じゃないなと思いつつ。

[Alt]+[PrintScreen]で、そのアクティブなウインドウが
[Ctrl]+[Alt]+[PrintScreen]で全画面がクリップボードにコピーされる。
あとはペイントでも好きなように。

ダメ?
664デフォルトの名無しさん:2006/02/10(金) 13:46:14
665デフォルトの名無しさん:2006/02/10(金) 13:59:57
VCってRADなのですか?
666デフォルトの名無しさん:2006/02/10(金) 14:18:20
コーディング主体と存じております
667デフォルトの名無しさん:2006/02/10(金) 14:38:18
>>659
色々調べてみたのですが、生のhWndでトライというのが分かりません。

DDXを使用してメンバ変数をダイアログに反映させているのですが
それではダメなんでしょうか。
668デフォルトの名無しさん:2006/02/10(金) 14:58:18
多分CTestDlgのオブジェクトを生成したスレッドしかUpdateData()は呼べないんだろ。
自分で WM_APP + n のメッセージ投げるようにするのがいいんじゃないの?

#define WM_PROC1_START (WM_APP+1)

void CTestDlg::OnWmProc1Start(略){
 テキスト表示("処理1開始");
 UpdateData(FALSE);
}

UINT KeisanFunc( LPVOID pParam )
{
 CTestDlg *pDlg = (CTestDlg*)pParam;

 pDlg->PostMessage(WM_PROC1_START, 略) ;


BEGIN_MESSAGE_MAPとかも自分で書いて

てきとーだけどこんな感じ
669デフォルトの名無しさん:2006/02/10(金) 15:17:57
>>668
ありがとうございました!!無事に思い通りの結果になりました!
初めてスレッドというものを使ってみて、色々躓いていたのですが、ようやく先へ進めます。
このスレに来て良かったです。本当にありがとうございました。
670デフォルトの名無しさん:2006/02/10(金) 16:13:13
TRACE使ってるんですが、マルチバイト文字を出力するにはどうすれば良いでしょうか?
TRACE(_T"012あいう");
とやると、出力ウインドウには、「012」とだけ表示されます・・・
671デフォルトの名無しさん:2006/02/10(金) 16:19:52
2003のMSDN見るとLPCSTRになってるから
TRACE("012あいう");
でいいんじゃないの?
2005は知らない、変数がunicodeの場合の出力も知らない。
672デフォルトの名無しさん:2006/02/10(金) 17:35:47
Visual Studio 2005のC++で
ファイルの入出力がしたくて、NETで見つけたソースをコンパイルしたら
error C2679: 二項演算子 '+' : 型 'char [80]' の右オペランドを扱う演算子が見つかりません (または変換できません)。
どこが悪いのか教えてください
エロイヒト

void CDataDlg::OnBnClickedButton1()
{
// ファイルダイアログを作る
  ifstream fin;
  CFileDialog f(TRUE);
  if(f.DoModal()==IDOK){
// ファイルを開く
  fin.open(f.GetFileName());
  if(fin.fail()){
    AfxMessageBox("初めてのメッセージ?");
  fin.close();
  }
// ファイルを読んでエディットコントロールへ出力
  char buf[80];
  m_sEdit = "";
  while(fin.getline(buf,80)){
    m_sEdit = m_sEdit + buf + "\r\n";
  }
  fin.close();
  UpdateData(FALSE);
  }
}
673デフォルトの名無しさん:2006/02/10(金) 17:49:39

ですが、ちなみにincludeしたファイルは
#include "stdafx.h"
#include "Data.h"
#include "DataDlg.h"
#include <fstream>
#include <sstream>
#include <afxdlgs.h>
using namespace std;
です
674デフォルトの名無しさん:2006/02/10(金) 17:50:30
m_sEditは何? CString ?

  while(fin.getline(buf,80)){
    CString str = buf ;
    m_sEdit = m_sEdit + str + "\r\n";
  }
675デフォルトの名無しさん:2006/02/10(金) 17:50:49
m_sEdit + buf + "\r\n";
char型であるbufは、こんな事出来ない
676672:2006/02/10(金) 18:04:24
どうもです
>>m_sEditは何? CString ?
はいCStringです
>>char型であるbufは、こんな事出来ない
そうなんですかとしか、言えないのですが
どうしたらいいのでしょうか?

677デフォルトの名無しさん:2006/02/10(金) 18:14:28
>>676
>>674 に書いてる
解説するとCStringはcharから代入できる。
CString(CStringT)のヘルプをみると
コンストラクタで
CStringT(
LPCSTR pszSrc
);
とかあるし、operator =で
CThisString& operator=(
char ch
);
とかある。
678672:2006/02/10(金) 18:25:07
どうも、おそれいります
おぼろげながら、理由がわかって来た気がします
要するに、
m_sEditとstrの変数の型が違うということなんでしょうか^^);
因みにソースは
横田壽というエロイお方の書いた
VISUAL C++入門という、ファイルをコピッて試したのですが

http://next1.cc.it-hiroshima.ac.jp/vc++/introvcdia.pdf
ここのP43のプログラムです
679デフォルトの名無しさん:2006/02/10(金) 18:30:45
Unicodeがもんだいじゃねーだろーね。
680672:2006/02/10(金) 18:33:50
失礼しました
第6章ファイル処理とデータ表示のP50でした
681デフォルトの名無しさん:2006/02/10(金) 22:35:22
>>678
まず、C言語を勉強した方がいい
682デフォルトの名無しさん:2006/02/10(金) 22:45:00
いや、一応C++。
683デフォルトの名無しさん:2006/02/10(金) 22:53:19
>>679が言うようにUnicodeじゃね?
と思ったんだが、
AfxMessageBox("初めてのメッセージ?");
はエラーにならないのか?
684デフォルトの名無しさん:2006/02/10(金) 23:03:52
UNICODEの問題だったらstd::ifstreamの代わりにstd::basic_ifstream<TCHAR>にすればいいよ。
openメンバはそれでも仕方が無いけど。
685672:2006/02/10(金) 23:27:09
みなさんどうもです
>>UNICODEの問題だったら
UNICODEの問題の意味が分かりませんスマソ
>>AfxMessageBox("初めてのメッセージ?");
AfxMessageBoxは自力でafx_msgを発見して置き換えたら成功しました
686デフォルトの名無しさん:2006/02/11(土) 00:09:42
VC++ Express Editions+Platform SDKでsocketを使いたいのですが
関連関数で
main.obj : error LNK2019: 未解決の外部シンボル _socket@12 が関数 _main で参照されました。
といったエラーが出てしまいます(socket関数でソケットを作成するだけのソースです)
ソケットを使うには何を設定すればいいんでしょうか

Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
この設定だけしてます
687デフォルトの名無しさん:2006/02/11(土) 02:28:45
>>686
wsock32.libとか、ws2_32.libとかそんなライブラリを。
688デフォルトの名無しさん:2006/02/11(土) 03:34:31
質問です。
double 型をTextOutする時に
2.5222e-002とかになって困ってしまいます。
0.0***のように表記させるにはどうすれば宜しいでしょうか?
689デフォルトの名無しさん:2006/02/11(土) 05:47:17
>>672
こう書けば?
( m_sEdit += buf ) += "\r\n";
690デフォルトの名無しさん:2006/02/11(土) 06:12:35
>>677
CStringがUnicodeの場合、char*やconst char*からのコンストラクタは
explicit宣言されてる。

これとか
m_sEdit = m_sEdit + CString(buf);

これとか
CString str(buf);
m_sEdit = m_sEdit + str;

はコンパイル通るけど、

m_sEdit = m_sEdit + buf;
これとか

CString str = buf;
m_sEdit = m_sEdit + str;
これは、少なくともVC2005ではコンパイルが通らない。
691デフォルトの名無しさん:2006/02/11(土) 06:15:54
ちなみに、CString::operator=とかCString::operator+=は
const char*とかを引数にとるオーバーライドがあるので、

CString str;
str = buf;
m_sEdit = m_sEdit + str;
これとか

m_sEdit += buf;
これとかは普通にコンパイル通る。
692672:2006/02/11(土) 08:17:12
>>689-691さん
どうもです、コンパイル通らなくて小20時間
遂に、コンパイル成功、Unicode問題も理解できました
ありがとうございました
ε-(´∀`*)ホッ
693672:2006/02/11(土) 10:56:37
もう一度、最後に別のプログラムですが、もう1箇所だけ教えて下さい
2箇所でエラーが出ていましたが、教えて頂いた様に
str = str + "\r\n" + str1;↓
str = (str += "\r\n") += str1;
こんな感じで直したら成功しましたが
str1.Format("%s", &Statement[i][0]);error C2664
CString(Statement);
を追加したりするのですが巧くいきません、どうかもう一回だけ教えて下さいませ。
オナガイシマス

void CfileDlg::Display(void)
{
  CString str, str1;
  int i;
  str="";
  i = 0;
  while(Statement[i][0]!=0){
  str1.Format("%s", &Statement[i][0]); //←ここでError
  if(i==0){
      str = str1;
    } else {
      str = str + "\r\n" + str1;  //←ここもEroor(ここは修正済み)
    i++;
  }
  m_sEdit = str;
  UpdateData(FALSE);
}
694デフォルトの名無しさん:2006/02/11(土) 11:12:43
>str = str + "\r\n" + str1;↓
>str = (str += "\r\n") += str1;

工エエェェ(´д`)、そこは、
str += "\r\n"
str += str1;
と処理すべきだろー。つか、副作用完了点が……
695デフォルトの名無しさん:2006/02/11(土) 11:32:18
>>694
演算子多重定義されているから副作用完了点は今回関係ない。
696デフォルトの名無しさん:2006/02/11(土) 11:33:25
>>693
Statementの型は?
697672:2006/02/11(土) 11:45:47
>>696さん
>>Statementの型は?
char Statement[100][80];です
今調べまくっていて、皆さんから教えて頂いた知識と感で
"%s"をexplicit宣言といいますか、明白にしてやらないのではと思い
"%s"→_T("%s")
としてやった所、コンパイルは成功したのですが、私間違っていますか?
と愚かな質問させて下さい

× str1.Format("%s", &Statement[i][0]);
○ str1.Format(_T("%s"), &Statement[i][0]);
698デフォルトの名無しさん:2006/02/11(土) 11:56:42
やっぱりUnicodeが原因か。
699デフォルトの名無しさん:2006/02/11(土) 12:16:06
名前の欄に672入れるとなんか、コテっぽくって他に質問したい方々や
回答待ちの方に申し訳ないので入れませんが672です(_ _)(礼)
Visualu Studio 2005 C++ではとにかく変数を明確に扱かわないと、コンパイルが
通らないものと考えた方が好いという事がよく分かりました
私のような中途半端なC言語の知識だと痛い目を見ますね
会社で簡単なWIN32APIの実装を頼まれてC++に挑んでいるのですが
簡単な様で、結構難しいものです、これから本屋に行って、良書を探してきます
皆さん本当に<(_ _)>ございました
700デフォルトの名無しさん:2006/02/11(土) 12:18:17
>>672 のNETで見つけたソースが糞すぎるから捨てた方がいいよ
ウンコいじりはやめよう
701デフォルトの名無しさん:2006/02/11(土) 12:25:38
わざわざ行にわける必要がなかったら1回で全部読めばいいのに
702デフォルトの名無しさん:2006/02/11(土) 12:48:54
以前 VC++2005EE & UNICODE 対応でお助け頂いたものです。
また教えて下さい。
EM_STREAMIN で SF_TEXT で読み込んでいる部分を UNICODE 対応にしようと
しています。edit control には、SF_UNICODE も指定すれば内部的に大丈夫
のようですが、さて S-JIS テキストを読んで、どこで変換するかでです。
cookie を使った readProc() だろうと思っていますが、他にいい手がある
のでしょうか。
つたない経験から考えている方法は、
1.readProc() の中で変換してバイト数をなんとか調整する。
  getc() みたいなことも出るかもしれない。
2.別途全部読み込み変換して readProc() ではちぎって渡す。
3.edit control はウインドウ毎に扱いを変えて、WINDOW LONG に識別を
  持たせて、中の text を参照するときに必要な変換する。
尚、API ベースのアプリケーションです。
703デフォルトの名無しさん:2006/02/11(土) 13:10:46
>会社で簡単なWIN32APIの実装を頼まれて

マイクロソフトの方ですか???
704デフォルトの名無しさん:2006/02/11(土) 13:36:41
質問です。
new で確保したクラスを delete して解放しているのですが、
タスクマネージャーを見る限り、解放されていないようなのです。
デストラクタにMessageBoxを仕掛けて、
デストラクタが呼び出されているのは、確認したのですが、
どうしてでしょうか・・・?
705デフォルトの名無しさん:2006/02/11(土) 13:40:59
焦るな
706デフォルトの名無しさん:2006/02/11(土) 14:14:55
正直かなり悩んでます。。
せっかくゲームが動いたのに…途中で落ちちゃって…。
707デフォルトの名無しさん:2006/02/11(土) 14:25:33
deleteしたらデストラクタが呼ばれるのは当然だが、
メモリは次のnewなどに備えて
内部で確保された状態のままになっていることが多い。
708デフォルトの名無しさん:2006/02/11(土) 14:38:42
>>707
回答ありがとうございますm(_ _)m
その場合だとやはり、たくさんnewしてたらいつかは落ちますよね?
どうすれば内部で確保されたままのメモリを解放できますか?
709デフォルトの名無しさん:2006/02/11(土) 14:40:43
>>708 気にするな。
必要になったらOSが回収してくれる。
710704:2006/02/11(土) 15:57:34
自己解決しました。

if(Object){
   delete Object;
   Object = NULL;
}
としていたのですが、ifを取り除くことで改善できました。
711デフォルトの名無しさん:2006/02/11(土) 16:00:30
それはおかしい
712デフォルトの名無しさん:2006/02/11(土) 16:16:07
delete内でNULLチェックしてくれるからifなくてもいいのは正しい。

newのメモリ確保はVC環境内で高速化のためプールしているので
OSからみるとdeleteのタイミングでは解放されない。

自前のnew/deleteを定義し、その内部で直接APIを呼べば改善される。
…が、激遅になる。
713デフォルトの名無しさん:2006/02/11(土) 16:34:31
711はifを無くしたところ改善するのが変だ言っているのであって
NULLをdeleteすること自体がおかしいと指摘している訳ではないと思う。
714デフォルトの名無しさん:2006/02/11(土) 16:37:39
>>713
             ,.,.,.,.,.,.,.,.,__
           ,,;f::::::::::::::::::::::ヽ
           i::::::::/'" ̄ ̄ヾi
           |:::::::| ,,,,,_  ,,,,,,|
           |r-==( 。);( 。)
           ( ヽ  :::__)..:: }
        ,____/ヽ  ー== ;  ほほう それでそれで?
     r'"ヽ   t、   \___ !
    / 、、i    ヽ__,,/
    / ヽノ  j ,   j |ヽ 
    |⌒`'、__ / /   /r  |
    {     ̄''ー-、,,_,ヘ^ |
    ゝ-,,,_____)--、j
    /  \__       /
    |      "'ー‐‐---''
715デフォルトの名無しさん:2006/02/11(土) 16:56:16
>>714 ワロス イタすぎ
716660:2006/02/11(土) 19:04:07
>>663

回答ありがとうございます(^^)
でもダメでした。

VC++の本を読むとプログラムを実行した時左上にMFCのマークがついたウィンドウが出ているのですが、私の場合はコマンドプロンプトが出るんです。それがおかしいのでしょうか?
717デフォルトの名無しさん:2006/02/11(土) 20:01:06
>>716
コンソールアプリのプロジェクトでMFCサポートを有効にしてるんじゃないだろうな?
718デフォルトの名無しさん:2006/02/11(土) 20:22:34
>>716
>でもダメでした。
画面に表示されるものはスクリーンショットで必ず取れるはずだが。
(マウスカーソルとDicectX以外)
719デフォルトの名無しさん:2006/02/11(土) 22:07:40
課題:文字列の挿入
文字列str1[]のn文字目以降に文字列str2[]を挿入する関数instr(str1,str2,n)を作成せよ

#include <stdio.h>
void instr(int n,char str1[], char str2[]);

int main(void)
{

int n;
char str1[100];
char str2[100];

scanf("%d",&n);
scanf("%s",str1);
scanf("%s",str2);

instr(n,str1,str2);
return 0;
}

void instr(int n,char str1[100],char str2[100])
{
int i,k,z;
char str3[200];

for(i=0;i<n-1;i++)
{
str3[i]=str1[i];
}

k=i;
720デフォルトの名無しさん:2006/02/11(土) 22:08:41

while(str2[z]!= '\0')
{
str3[i]=str2[z];
i++;
z++;
}

while(str1[k]!='\0')
{
str3[i]=str1[k];
i++;
k++;
}

printf("%s",str3);
}

作って見たのですが、コンパイル時、実行時にはエラーが出ませんでした。
ですがDOS窓に文字を打ち込みプログラムそのものを実行させ、出力を確かめようとしたところ
『問題が発生したため、〜〜〜.exe を終了します。 ご不便をおかけして申し訳ありません。』
となり落ちてしまいます。どなたかご教授お願いします。2レスに渡っての質問すいません
OS:xp
soft:Visual C++
721デフォルトの名無しさん:2006/02/11(土) 22:12:59
zを初期化しろ
722デフォルトの名無しさん:2006/02/11(土) 22:22:32
>>721
実行出来ました。ありがとうございます
723647です:2006/02/11(土) 22:42:07

すみません。どうしようもなく困ってるので、誰か助けてください。
以前、VisualC++6.0 と DirectX9.0SDKでゲームを作っていたのですが、
このたびPCを買い換え、各ソフトをインストールし直して、コンパイル
しようとしたところ、以下のメッセージがでて、コンパイルできません。
どうすればいいのでしょか?

--------------------構成: DR - Win32 Debug--------------------
コンパイル中...
Global.cpp
リンク中...
Global.obj : error LNK2001: 外部シンボル "_DirectDrawCreateEx@16" は未解決です
Debug/DR.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
ブラウザ データベースを作成中...

DR.exe - エラー 2、警告 0


648 :デフォルトの名無しさん :2006/02/09(木) 21:09:05
>>647
ライブラリのパスを通していないなど単純な手違いだと予想。

>ライブラリのパスは通してます。
724デフォルトの名無しさん:2006/02/11(土) 23:02:55
環境変数PATHに設定してるとか言うオチだな。
725647です:2006/02/11(土) 23:34:30
>>724詳しく
726647です:2006/02/11(土) 23:51:42
あはw解決しました。すんませn
727デフォルトの名無しさん:2006/02/11(土) 23:53:31
2005C++です
コマンドラインから/clrオプション付けてコンパイルしたいのですが
多分DOS窓でやるのだと思うのですが、どうやったらいいのデツカ
具体的に教えてもらえたらうれしいのですが
728デフォルトの名無しさん:2006/02/12(日) 00:54:27
下記のようにあらかじめいくつかのロケールに合わせて用意した文字列を
コンパイル時に切替えるにはどうすればいいんでしょうか
日本語 -> "こんにちは"
英語 -> "Hello"
729デフォルトの名無しさん:2006/02/12(日) 01:01:45
>>728
コンパイル時にロケールもなにもなかろうに。
自分でプリプロセッサシンボル決めて#ifdefで切り替えるしかなくね?
実行時ならやりようがあるが。
730デフォルトの名無しさん:2006/02/12(日) 01:05:25
#define JAPANESE 1
#define ENGLISH 2
#define ・・・
#define LANGUAGE JAPANESE

#if LANGUAGE==JAPANESE
LPTSTR hello="こんにちは";
#elif LANGUAGE==ENGLISH
LPTSTR hello="Hello";
#elif ・・・
#endif
731デフォルトの名無しさん:2006/02/12(日) 01:09:03
>>729, 730
ありがとうございます。マクロで解決することにしました。
732デフォルトの名無しさん:2006/02/12(日) 02:14:30
>>719
・文字列のコピーを自前のループで書くのはナンセンス。
・whileよりもforを使おう。
・sprintf()をもっと知ろう。
void instr(int n, char * str1, const char * str2)
{
#if 1
char * tmp = malloc(strlen(str1) - n + 1);
strcpy(tmp, str1 + n);
sprintf(str1 + n, "%s%s", str2, tmp);
free(tmp);
#elif 0
char * tmp = malloc(strlen(str1) + 1);
strcpy(tmp, str1);
sprintf(str1, "%.*s%s%s", n, tmp, str2, tmp + n);
free(tmp);
#else
char * tmp = malloc(strlen(str1) + strlen(str2) + 1);
sprintf(tmp, "%*s%s%s", n, str1, str2, str1 + n);
strcpy(str1, tmp);
free(tmp);
#endif
}
733デフォルトの名無しさん:2006/02/12(日) 06:11:34
へんなやつ
734デフォルトの名無しさん:2006/02/12(日) 06:18:27
>>732
おまえ素質ないよ
735デフォルトの名無しさん:2006/02/12(日) 08:51:59
いつから宿題スレになったんだ?

C/C++の宿題を片付ケます 60代目
http://pc8.2ch.net/test/read.cgi/tech/1139053955/
736デフォルトの名無しさん:2006/02/12(日) 10:13:20
VC++6.0を使用しています
DirectX SDKを使用してプログラムを作ろうとしましたが、ライブラリファイルを読み込む所でエラーを
起こしています。

------------------
main.obj : error LNK2001: 外部シンボル "_Direct3DCreate9@4" は未解決です
Debug/D3DX.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
------------------

それで、現象としては>>647と同じであろうと考え、プロジェクトの設定でd3d9.libと、d3d9x.libを読み込む
ように設定すると発生しなくなりました。
しかし、この方法だと毎回プロジェクトを作成する度に設定しなければなりません。
解説書を見るとIncludeとlibの設定は一度で大丈夫だと書いてあったので、何か設定を間違えてるのだと思います。
こちらとしては>>724の仰っている事が気になるのですが、こうすればよいと言う方法がありましたら
よろしくお願いいたします。
737デフォルトの名無しさん:2006/02/12(日) 10:39:55
>>736
ハァ?
そんなレベルの話だったの?
そんでもってマルチ?舐めるなよ。
738デフォルトの名無しさん:2006/02/12(日) 10:41:10
会社(VisualStudio2003.net使用)でやってた仕事を家でやろうと
思ったけれど、家のVisualC 6.0ではソリューションファイルってのが
開けない・・・
ってか、毎回この手んおファイル形式が変わりますな・・・

このソリューションファイルをワークスペースファイルに変換って
出来ないんでしょうか?
構成がでか過ぎるので自分で作るのも面倒だし、
ちなみにVisualC++.netでもソリューションファイルに変更されたんですか?
素直にVisualC++.net買うか・・・
739デフォルトの名無しさん:2006/02/12(日) 10:54:40
ソリューションープロジェクトの構成は慣れればそれなりに便利。
ソリューションエクスプローラの中で
プロジェクト名変更したら、
ファイルシステム嬢でのプロジェクトフォルダの名前も
変更してくれれば便利なのにな。
740デフォルトの名無しさん:2006/02/12(日) 13:58:04
741デフォルトの名無しさん:2006/02/12(日) 14:31:36
OSはWinXP、開発ソフトはVisual C++2005 Express Editionです。

二つの自作関数Draw()とRead()を用意し、Read()でビットマップを読み込み、
Draw()でDIBで描画するというプログラムを作っているのですが、詰まってしまいました……

ファイル名・バッファ・BITMAPINFOHEADER・BITMAPFILEHEADERのポインタをRead()側に渡し、
Read側でGlobalAllocしてメモリ確保、ReadFileでバッファにデータを読み込みます。

Draw側ではそのバッファをSetDIBitsToDeviceで描画するという形を取っているのですが、
バッファにデータが読み込まれてないのか、空のデータが描画されてしまいます。

ただ、試しにRead側で描画してみるとちゃんと描画されました。
引数をポインタ型で渡せば、そのアドレスに戻り値が入るものだと思ってたのですが、
どうもここら辺でなにか勘違いをしてるような気がします。

解決策などございましたら、ご教示下されば幸いです。
742デフォルトの名無しさん:2006/02/12(日) 14:32:21
そのまま載せると非常に長いのですが、大まかにはこんな感じになってます。

Draw()
{
 Char *fn;
 LYBYTE lpBuf;
 LPBITMAPINFOHEADER lpInfo;
 LPBITMAPFILEHEADER lpFile;

 fn = "hoge.bmp";
 ZeroMemory (&lpPixel, sizeof(lpBuf));
 Read(fn, lpBuf, lpInfo, lpFile);
 SetDIBitsToDevice (mhDC, 0, 0, 640, 480, 0, 0, 0, 480, lpBuf, (LPBITMAPINFO)lpInfo, DIB_RGB_COLORS);
 GlobalFree (lpBuf);
}

Read(char *FileName, LPBYTE lpBuf, LPBITMAPINFOHEADER lpInfo, LPBITMAPFILEHEADER lpFile)
{
 HANDLE fh;
 DWORD result;

 fh = CreateFile (FileName, GENERIC_READ, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 lpBuf = (LPBYTE)GlobalAlloc (GPTR, GetFileSize(fh, NULL));
 //ここでReadFileやエラーチェックなど
 CloseHandle (fh);

 //ここで描画すると正しく描画される
 //SetDIBitsToDevice (mhDC, 0, 0, 640, 480, 0, 0, 0, 480, lpBuf, (LPBITMAPINFO)lpBmpInfoHeader, DIB_RGB_COLORS);
}
743デフォルトの名無しさん:2006/02/12(日) 15:04:26
>>742
Read() に渡す値が参照渡しでなく値渡しになってないか?

Draw()
{
 Char *fn;
 LYBYTE lpBuf;
 LPBITMAPINFOHEADER lpInfo;
 LPBITMAPFILEHEADER lpFile;

 fn = "hoge.bmp";
 ZeroMemory (&lpPixel, sizeof(lpBuf));
 Read(fn, lpBuf, &lpInfo, &lpFile);
 //SetDIBitsToDevice (mhDC, 0, 0, 640, 480, 0, 0, 0, 480, lpBuf, (LPBITMAPINFO)lpInfo, DIB_RGB_COLORS);
 GlobalFree (lpBuf);
}

Read(char *FileName, LPBYTE lpBuf, LPBITMAPINFOHEADER *lpInfo, LPBITMAPFILEHEADER *lpFile)
{
 HANDLE fh;
 DWORD result;

 fh = CreateFile (FileName, GENERIC_READ, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 lpBuf = (LPBYTE)GlobalAlloc (GPTR, GetFileSize(fh, NULL));
 //ここでReadFileやエラーチェックなど
 CloseHandle (fh);

 //ここで描画すると正しく描画される
 //SetDIBitsToDevice (mhDC, 0, 0, 640, 480, 0, 0, 0, 480, lpBuf, (LPBITMAPINFO)lpBmpInfoHeader, DIB_RGB_COLORS);
}
744デフォルトの名無しさん:2006/02/12(日) 15:08:03
Draw()のlpInfo,lpFileの実体がない。おそらく
BITMAPINFOHEADER lpInfo;
とすべき。あるいは
LPBITMAPINFOHEADER * ppInfo;
としてRead()でアロケートする。もっともRead()なんかやめて
LoadImage(,,,LR_CREATEDIBSECTION);
するのが最適とおもうが。
745デフォルトの名無しさん:2006/02/12(日) 15:13:06
VC++とMFCは別物と分かるのに
小三日、いつかはMFCとVC++のコラボレーションで
スーパープロジェクト、コードネームUkraineが完成するものと
信じていたのに。
゚(*゚´∀`゚)゚ノ彡☆ギャハハ八八ノヽノヽノヽノ \ / \/ \
DIALOGにEdit ContorolやBottunを貼り付けて、ちょこちょこっとC++で
コードを書いて、ぽちっとコンパイルすればプログラムが完成すると思った香具師は
漏れだけデツカーッ(゚Д゚≡゚д゚)
Ukraineが完成するのはいつに日やら┐(´д`)┌ヤレヤレ
746デフォルトの名無しさん:2006/02/12(日) 16:12:12
>>745
WTL使え
747デフォルトの名無しさん:2006/02/12(日) 17:50:28
質問です。
コンボボックスの文字列を、エディットで変更できないようにできないでしょうか。
つまり、▼で選択は可能、エディット上で変更は不可能、という状態にしたいです。
748デフォルトの名無しさん:2006/02/12(日) 17:51:18
>>747
出来ます。
749747:2006/02/12(日) 18:00:34
>>748
ありがとうございます。できればやり方をご教授お願いします。
750デフォルトの名無しさん:2006/02/12(日) 18:19:05
>>749
Typeプロパティをドロップダウンリストにします。
751デフォルトの名無しさん:2006/02/12(日) 18:19:11
>>740
サンクス。

早速試して無事プロジェクトファイルは出来たんだけど、
他の問題でエラーでまくり・・・
あまりに多いんで、潰していく前に力尽きました。

ExpressEditionってのも試したけど、
windows.hすらないんですけど・・・
752デフォルトの名無しさん:2006/02/12(日) 18:20:29
>>751
Expressは別途PlatformSDKを入手する必要があります
753sage:2006/02/12(日) 18:36:35
質問です。
C++で関数テーブルジャンプってどうすればいいのでしょう?
Cの場合は
void (* func[])(void) = {
aaa,
bbb,
};
func[ 0 ]();

で問題ないのですが、
C++のクラス関数ジャンプの場合
void (* func[])(void) = {
zzz.aaa,
zzz.bbb,
};
func[ 0 ]();
こう書くとテーブルの定義でエラーになってしまいます。
754デフォルトの名無しさん:2006/02/12(日) 18:45:29
>>753
static
755デフォルトの名無しさん:2006/02/12(日) 19:08:53
static?
うーーん。よくわかりません。
詳しく教えていただきたいのですが・・・・
756デフォルトの名無しさん:2006/02/12(日) 19:21:34
すみません。
実際やりたい事は
void (* func[])(void) = {
xxx.aaa,
yyy.ccc,
zzz.bbb,
};
のように別のクラスの関数にジャンプさせたいんです。
757デフォルトの名無しさん:2006/02/12(日) 19:32:36
>Expressは別途PlatformSDKを入手する必要があります

動いた。 ありがとん。
いやーなんで最初から入れないんすかね。
なんにせよincludeやlibの設定と偉く面倒かった。
758デフォルトの名無しさん:2006/02/12(日) 19:43:34
初心者に必要ない機能は抜いてあります。
759デフォルトの名無しさん:2006/02/12(日) 19:47:00
確か、規定でもPlatformSDKというパスそのものは設定されていたはずなので、
そこにPSDKをインストールすれば、includeやlibの設定は要らなかったはず。
760デフォルトの名無しさん:2006/02/12(日) 20:05:01
>>753
MSDNか何かで静的メンバ関数をしらべよう。
そもそもなにか無理なことをしようとしてる希ガス。
MFCのメッセージハンドラのようなことをするなら別の方法に考よう。
761デフォルトの名無しさん:2006/02/12(日) 20:05:48
>>756
class xxx {
 static void aaa() ;
} ;

void (* func[])(void) = {
xxx::aaa,
・・・
} ;

じゃないか?
staticのメンバー関数は機能が制限されるけど。

C++的にはこのような関数テーブル使わずに仮想関数で
どうにかしろ、という意見が多いと思うが。
762747:2006/02/12(日) 20:35:40
>>750
返事が遅れましたが、ありがとうございます。
763デフォルトの名無しさん:2006/02/12(日) 21:47:11
>>756
staticでない関数以外は、複数のクラスの関数を
1つの関数ポインタ配列に格納するのは無理。

void*の配列でも使わない限りね。
764デフォルトの名無しさん:2006/02/12(日) 21:51:02
関数ポインタのサイズがsizeof(void*)より大きかったらどうすんのさ
765デフォルトの名無しさん:2006/02/12(日) 22:07:29
正直スマンカッタ
766デフォルトの名無しさん:2006/02/12(日) 22:30:05
つboost::function
767デフォルトの名無しさん:2006/02/13(月) 01:34:34
質問です
自前で画像付きボタンのコントロールを作ろうと思い、(MFCの)CWndクラスを継承して作ることにしました。
このボタンは100〜1000個程並べる予定です。
エクスプローラの「縮小」時のようなサムネイル表示ビューを作りたいのです。(CListViewは使わないつもりです。)
CWndを継承するのはマウスのヒットテストやボタンの移動等が楽になる事を主に期待してのことです。
しかし、コントロールがある数を超えると急に重たくなってくるという記事を、どこかで読んで気になりました。
このように子ウィンドウを沢山使うやり方は何か問題があるでしょうか?
768741:2006/02/13(月) 04:17:03
>>743-744
遅れましたがレスありがとうございました。しかも素早いレスで非常に感謝してます。

ただ、Draw()側でlpInfoの中身(biBitCountなど)を表示して確認してみたところ、
lpInfoの中にはちゃんとデータが入っているようでした。

となるとlpBufが戻り値として帰ってきていない(Allocしたアドレスを
参照できていない?)ようで、色々と試してみたのですが、
結局上手く取得することが出来ませんでした。
(あげくに不正なアドレスを参照したり、メモリーリークが多発と…orz)

教わったLoadImageを利用して、DIBセクションを利用する方法も考えてみようと思います。
769デフォルトの名無しさん:2006/02/13(月) 06:21:39
>>767
要するに子ウインドウたくさん作ってそれぞれ別の画像を貼り付けるんだよね
ブラクラみたいなもんだな
最近のOSはOSごと落ちることはないと思うけど
770デフォルトの名無しさん:2006/02/13(月) 20:25:44
全角数字を半角に直すには如何すればいいんでしょうか?
str.Replace(”0”,"0");
str.Replace(”1”,"1");
str.Replace(”2”,"2");
って一個ずつ置換していくのはなんだかスマートじゃないな〜と
思いつつ、ドウスレバいいのか判らん超初心者です。
771デフォルトの名無しさん:2006/02/13(月) 21:00:19
VC++6.0でCRichEditViewで文字を選択した時の背景色は変えられないのでしょうか?
772デフォルトの名無しさん:2006/02/13(月) 21:18:47
>>770
テーブルを使えば少しはまし。
static struct {
const char * c2;
const char * c1;
} st[] = {
{"0", "0"},
{"1", "1"},
// ...
};
for (unsigned ic = 0; ic < sizeof(st) / sizeof(*st); ++ic) {
str.Replace(st[ic].c2, st[ic].c1);
}
って、実際にはReplace()ではなくC流にやるほうが効率いいけど。
773デフォルトの名無しさん:2006/02/13(月) 22:52:47
>>770
WinAPIならFoldStringがある。
774デフォルトの名無しさん:2006/02/14(火) 07:38:32
すいません、質問です。
VS2005で、とりあえずwin32アプリケーションでWinMain関数にreturn(0)だけつけてビルドしたんですが、
意味不明のエラーがでます。

プログラム

#include <windows.h>

INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nShowCmd)
{
    return (0);
}

エラー

c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h(222) : error C2059: 構文エラー : ';'

エラー場所

typedef void *PVOID;
typedef void *POINTER_64;
typedef void *PVOID64;

上記の真中ですが、何処が構文エラーなのかわかりません。
修正方法もわからず適当にスペース削ったりしても駄目でした。
申し訳ありませんが修正方法を教えてください……
775デフォルトの名無しさん:2006/02/14(火) 08:35:40
それ以前に何で return に () が必要なのかと。
別に間違いじゃないけど気持ち悪いね。
776デフォルトの名無しさん:2006/02/14(火) 08:38:13
>>774
俺の環境ではそんなエラーでないよ。
それより、どのプロジェクトで生成したのさ、そのスケルトン。
777デフォルトの名無しさん:2006/02/14(火) 08:46:26
1:依頼393@駒猫φ ★ 2006/02/10 01:00:38
ソニー、3LCDリアプロ「Eシリーズ」に不具合
視聴時間の累積が一定時間(約1,200時間)を経過すると、「テレビ視聴中に
電源オフできない、または電源スタンバイ状態から電源オンできない」、「入
力切り換えができない」という不具合が確認されている。
(p)http://www.watch.impress.co.jp/av/docs/20060209/sony.htm


123: 2006/02/10 09:50:35
159 名前:名無しさん必死だな[sage] 投稿日:2006/02/10(金) 08:27:54

ここで問題です
0xFFFFFFFFミリ秒は何時間でしょう
・・・本気で何か仕込んでやがったな

171 名前:名無しさん必死だな[sage] 投稿日:2006/02/10(金) 09:34:53

>>159
1193時間か…。
どうみても最初からそのつもりで仕込んでいます
ほんとうにありがとうございました

16: 2006/02/10 01:06:25 i+RIL/DN0
>一日あたりのテレビ視聴時間は視聴者全体平均で2時間54分。
(p)http://www.ipse-m.com/company/release/release_07.htm
 
1日3時間×365日=1095時間
365日以上経過で保障期間外。
こいつはくっせーー
ゲロ以下の臭いがプンプンするぜーーっ!
778デフォルトの名無しさん:2006/02/14(火) 11:54:23
vc++の実習があったのですが、課題が解けないので教えてください
SDIでOnDrow(CDC *pDC)にmyDL.DoModal();でダイアログを呼び出して
そのダイアログのokボタンを押すとSDIのウインドウに「okが押されました」と表示させたいのですが
ボタンを押したと認識するためにはどこの関数に書き込めばいいですか?
一応ダイアログは表示します。
書き込むソースは
int ret;
if(ret==IDOK){ //retはダイアログからの戻り値
mydc.TextOut(0,0,"okがクリックされました");
}

こんなかんじです
779デフォルトの名無しさん:2006/02/14(火) 12:28:34
ボタンってダイアログのOKボタン?
780デフォルトの名無しさん:2006/02/14(火) 13:04:51
>>774
お前古いDirectXSDK入れてVS2003から乗換えてるんじゃないか?
もしくはそれに似た状況だと予想されるんだが。
includeフォルダの検索順でDXSDKの順番をPlatformSDKより下げてみ?
781デフォルトの名無しさん:2006/02/14(火) 14:44:07
BITMAPをディスクから読み込んで描画したいのですが、
RGBQUADから下の画像データの構造体が見つかりません・・・。
こっから先、どうやって描画すればいいのでしょうか?
どなたかご教授をお願い致します。
■vc++6.0 XP

public:
RGBQUAD BMP_P;
BITMAPINFOHEADER BMP_I;
BITMAPFILEHEADER BMP_F;

void CBmpView::OnFileOpen(){
CFile file;
CString path;
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,"BITMAP(*.BMP)|*.BMP||");

if(dlg.DoModal()!=IDOK)
return;

path=dlg.GetPathName();
if(!file.Open(path,CFile::modeRead | CFile::typeBinary))
return;

file.Read(&BMP_F,sizeof(BITMAPFILEHEADER));
file.Read(&BMP_I,sizeof(BITMAPINFOHEADER));
file.Read(&BMP_P,sizeof(RGBQUAD));
file.Close();
}
782781:2006/02/14(火) 14:45:08
ごめんなさい。ちなみにMFCはSDIです。
783デフォルトの名無しさん:2006/02/14(火) 14:53:53
C言語はほぼ分かるのですが、
Windowsプログラミングは初めてで、かなり戸惑いつつも、
なんとか頑張って.NETでツールを作りました。
main()がないのはかなり驚きでした。

が、ここで困ったことがあります。
ビルドしてできた hogehoge.exe の戻り値を、他のツールで使用したいのですが、
どうやって渡せば良いのでしょうか?

int main()
{
...
if (success()) {
 return 0;
} else {
 return 1;
}
}

みたいな感じで、0か1かを返したいのです。
main()もないし、WinMain()もないのですが、どうすれば良いんでしょうか。
784デフォルトの名無しさん:2006/02/14(火) 15:12:06
>>781
ビットマップ(DIB)ファイルの読み込みはそんなに簡単じゃないよ。
file.Read(&BMP_F,sizeof(BITMAPFILEHEADER));
の後、BMP_F.bfSizeの値から残りのデータを読み込むようにして、
BITMAPFILEHEADERやBITMAPINFOHEADERの情報から
パレットのアドレスやビット情報のアドレスを求める必要がある。
BITMAPINFOHEADERのbiBitCountとかでパレットのサイズが変わったりするから。
この辺の情報はぐぐれば見つかるはず。
785デフォルトの名無しさん:2006/02/14(火) 15:14:50
>>783
開発環境がよくわからない。
言語は? C++, C# ?
プロジェクトの作成のときにWindowsアプリケーションにしたの?
786デフォルトの名無しさん:2006/02/14(火) 15:20:01 BE:23292634-
>>783
CWinApp::ExitInstanceをオーバーライドして値を返す
787デフォルトの名無しさん:2006/02/14(火) 15:22:40
>>786 さては、エスパーだな!!!
788デフォルトの名無しさん:2006/02/14(火) 15:32:19
>>784
わかりやすいご返答、ありがとうございました。
789778:2006/02/14(火) 16:13:45
>>779
ダイアログのOKぼたんです
790デフォルトの名無しさん:2006/02/14(火) 16:23:43
>>789
ダイアログのOKボタン、ダブルクリックするとイベントハンドラ(関数)が作成されるから、
そこにゴニョゴニョ書け

多分、やりたいのは、こっち↓だろうけど
int ret = myDL.DoModal();
if(ret==IDOK){ //retはダイアログからの戻り値
mydc.TextOut(0,0,"okがクリックされました");
}
791デフォルトの名無しさん:2006/02/14(火) 18:17:07
>>783
他のツールとは?
WinAPIが使えるのならGetExitCodeProcess。
792781:2006/02/14(火) 19:13:37
ごめんなさい。再び質問させて下さい。

例えば
0000005A〜00000102のデータを
ある場所に配列として代入したい時、
どのようにしてこのバイナリのアドレスを指定及び操作できますか?

それとも出来ないのでしょうか・・・夢見すぎかも。
793デフォルトの名無しさん:2006/02/14(火) 19:52:01
>>792
先ずは、「0000005A〜00000102のデータ」とは何のことか聞こうか。
794デフォルトの名無しさん:2006/02/14(火) 19:54:25
それより、「ある場所に」ってのが何なのか知りたい。
795789:2006/02/14(火) 19:59:19
>>790
ありがとうございます、再び質問しつれいですが
追加の課題でそのダイアログから式を選択して「OK」を押すと計算した数値をわたして
グラフを描けというふうなのが出てしまったんですがOKをいじるだけでもできますか?
796デフォルトの名無しさん:2006/02/14(火) 20:31:33
>>792
C級エスパーの私では、ESPが足りない。
>>795
エスパーして答えるに、できない。
797デフォルトの名無しさん:2006/02/14(火) 21:07:37
ESP能力を最大限に発揮して、念写してみた。

メインのウィンドウからダイアログを開く。
開いたダイアログは、計算式の選択などを行う操作ダイアログ。
ダイアログのOKを押すことでメインウィンドウに結果を反映させる。

これをやりたいのだろう。
798デフォルトの名無しさん:2006/02/14(火) 21:45:56
VC++でgcc -E -dM hoge.cみたいなことはできませんか?
799デフォルトの名無しさん:2006/02/14(火) 23:06:18
>>797
そうです、文法へたですみませんでしたw。
800デフォルトの名無しさん:2006/02/14(火) 23:49:46
>>799
OKをいじるだけではできないんじゃないか?
グラフを描画する必要があるなら、それも書かないとね。
(どこに描画ルーチンを入れるかによるかもしれないけど)
801デフォルトの名無しさん:2006/02/15(水) 00:38:44
>>800
うーん、まぁなんとかがんばってみます。
無理と悟ったらまたききにきますので、よろしくお願いします<(_ _)>
802デフォルトの名無しさん:2006/02/15(水) 00:41:52
>>801
お腹が空いたら、開けるのですよ
http://techtips.belution.com/ja/vc/0055/
803デフォルトの名無しさん:2006/02/15(水) 01:25:50
>>802
ワラタ
あんた、いい人やなぁ
804デフォルトの名無しさん:2006/02/15(水) 04:46:08
>>792
>file.Read(&BMP_F,sizeof(BITMAPFILEHEADER));
>の後、BMP_F.bfSizeの値から残りのデータを読み込むようにして、
残りのデータのバイト数 = BMP_F.bfSize - sizeof(BITMAPFILEHEADER) ;
BYTE *p = new BYTE[残りのデータのバイト数] ;
p に残りのデータ読み込み
BITMAPINFO *pbi = (BITMAPINFO*)p ;
相対位置 = BMP_F.bfOffBits - sizeof(BITMAPFILEHEADER) ; // ここではBMP_F分ずれている
BYTE *pbit = &p[相対位置] ; // ビットマップのビットイメージ
こんな感じかな、細かいとこまであってるかはみてないよ。

>バイナリのアドレスを指定
BYTE *pbit ;
pbit = &p[相対位置] ;
とか、
pbit = p + 相対位置 ;
のことか? C言語スレあたりでポインタとかで質問するよろし。
805デフォルトの名無しさん:2006/02/15(水) 08:58:23
>>802
おなかすいたので空けてみました、これでなんとかできそうですよw
いやーありがとうござあいます。
806デフォルトの名無しさん:2006/02/15(水) 14:17:40
VC 2005 EE でゲーム作っています。

シーン引継ぎの際、PopScene()にて

delete m_pSceneStack[m_iCurrentScene]

としているのですが、シーンのデストラクタが呼ばれず、
メモリリークしてしまいます。deleteなのにどうして呼ばれてないのでしょうか?
807デフォルトの名無しさん:2006/02/15(水) 14:28:44
m_pSceneStack の宣言のところと new してるところはどう書いてるの?
808デフォルトの名無しさん:2006/02/15(水) 14:30:17 BE:69876094-
ソース1行からクラス定義を透視するエスパーの降臨きぼん。
809806:2006/02/15(水) 14:33:21
>>807-808
迅速な返答ありがとうございました。
自己解決しました。基底クラスのデストラクタ virtual してませんでした。吊ってきます。
810デフォルトの名無しさん:2006/02/15(水) 18:27:33
VC++.net2003でニューラルネットワーク書いてます。
こんなエラーが出てて困ってます。
たしか参照設定で何かやらなきゃいけなかった気がするのですが、
いろいろ試してみてもどうもうまくいきません。。
---------------------
WaveletNetwork error LNK2019: 未解決の外部シンボル
"public: void __thiscall CWaveletNeuron::Fire(enum ActivationType)"
(?Fire@CWaveletNeuron@@QAEXW4ActivationType@@@Z) が
関数 "public: void __thiscall CWaveletNetwork::FeedForward(void)"
(?FeedForward@CWaveletNetwork@@QAEXXZ) で参照されました。
---------------------

書いているプログラムは、
WaveletNetwork\WaveletNetwor.h
WaveletNetwork\WaveletNetwor.cpp
WaveletNetwork\WaveletNeuron\WaveletNeuron.h
WaveletNetwork\WaveletNeuron\WaveletNeuron.cpp
の4つで、
WaveletNetwork.h内で#include "WaveletNeuron\WaveletNeuron.h"を宣言しています。
参照設定は空です。

WaveletNeuron::Fire()以外の関数はinlineでヘッダファイル内に書いていて、
Fire()と他のいくつかがcppファイルに書いてます。

WaveletNetwork内に必要なファイル全てを入れてしまえばできるのは分かっているんですが、
参照設定を使って解決する方法があった気がします。
どなたか知っていたら教えてください。
811デフォルトの名無しさん:2006/02/15(水) 18:36:22
参照設定とか関係ない。プロジェクトに
WaveletNetwork\WaveletNeuron\WaveletNeuron.cpp
はちゃんと追加してるの?
812デフォルトの名無しさん:2006/02/15(水) 20:24:07
エスパーと似非パーの会話が飛び交ってて
一般人の漏れには訳が分からんスレだ……
813デフォルトの名無しさん:2006/02/15(水) 20:31:12
つ[ヒント]

で解決したのは自己解決というのか?
814デフォルトの名無しさん:2006/02/15(水) 23:27:55
static_cast<T> などの新しいキャストの記述ではなく
旧来のキャストの記述を使用しているときに
警告を出すようにするオプションはありませんか?
815デフォルトの名無しさん:2006/02/15(水) 23:52:16
スレ違いの際は誘導お願いします。

通信相手のMACアドレスを指定して、Ether接続させたいのですができるのでしょうか。
もしあるのなら、どのような方法でしょうか。

WinSocket(?)とかだと、IPアドレスとポートが必要ですよね。
RARPとかは全然違うっぽいし…。

参考になるサイトとかでもいいので、知っていたら教えてください。
816デフォルトの名無しさん:2006/02/16(木) 00:05:30
WinSock2でも、Layer2レベルの通信は直接ハンドリング不可。
ドライバかかなきゃ、イー差フレームのハンドリングはできんぞなっと。
817デフォルトの名無しさん:2006/02/16(木) 00:17:49
WinPcap ライブラリを使う
818デフォルトの名無しさん:2006/02/16(木) 00:19:51
>>815
NDISでググれ
819815:2006/02/16(木) 00:29:28
早速の回答ありがとうございます。

ちょっと言葉が足りなかったのですが、Ether接続用のドライバに機能追加することになったんです。
>>817さん、>>818さんのレスの内容を明日調べてみます。
820デフォルトの名無しさん:2006/02/16(木) 00:34:19
ちょっと質問です。

アドレスを整数値として読み込むとき、今まで DWORD にキャストしていました。
が、2005 のデフォルトのオプションでは 64bit 対策を考慮し、警告を出すようになっています。
64bit 対策としては、どんな型で受け取るべきでしょうか。
BYTE-WORD-DWORD のさらに上のようなものが標準で定義されているのでしょうか?

821・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/16(木) 00:41:56
UINT_PTRとかLRESULTとかWPALAMとかLPARAMとか
822デフォルトの名無しさん:2006/02/16(木) 01:10:55
size_t
ssize_t
ptrdiff_t
823デフォルトの名無しさん:2006/02/16(木) 01:35:19
#include <stddef.h>

intptr_t
uintptr_t
ptrdiff_t
size_t
824デフォルトの名無しさん:2006/02/16(木) 02:29:34
825デフォルトの名無しさん:2006/02/16(木) 04:48:30
ダイアログベースでアプリを作成し
AfxBeginThread()で
スレッドA,Bを作成しました。

今までは3スレッド共に単独で動作させていたのですが
スレッドAがデータを受信した際に
スレッドBに連絡したいケースが出てきました。

この場合のスレッドAからBへの連絡手段を教えていただきたいです。
自分にはグローバル変数をBがずっと監視するくらいしか思いつきません。。
826デフォルトの名無しさん:2006/02/16(木) 04:55:32
スレッドBは待っているだけならWaitForSingleObject
827デフォルトの名無しさん:2006/02/16(木) 09:46:37
フォームのどこをクリックしても移動できるようにするにはどうすればいいんですか?
828デフォルトの名無しさん:2006/02/16(木) 10:27:24 BE:11646432-
>>827
WM_LBUTTONDOWN/WM_LBUTTONUPをひっかけて、それぞれWM_NCLBUTTONDOWN/WM_NCLBUTTONUPを発行。
829デフォルトの名無しさん:2006/02/16(木) 11:49:24
private: System::Void Form1_MouseDown(System::Object * sender, System::Windows::Forms::MouseEventArgs * e)
{
ReleaseCapture();
SendMessage(Form1->hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}

};
830デフォルトの名無しさん:2006/02/16(木) 18:27:21
以下のような状況になり困っています。
何かヒントをお持ちの方がいらっしゃいましたらご教示願います。また、スレ違いの場合は誘導願えませんでしょうか。
EditBoxを自前でつくり、それをJavaScriptで使用する為に以下のようなHTMLに埋め込みました。ocxではなく、普通のdllです。
<HTML>
<HEAD>
<TITLE>テスト ページ</TITLE>
<SCRIPT LANGUAGE="JAVASCRIPT1.2">
<!--
FUNCTION INIT() {
VAR TEST = DOCUMENT.ALL.TEST;
DOCUMENT.ONKEYDOWN = ONKEYDOWN;
}
FUNCTION ONKEYDOWN() {
ALERT("ONKEYDOWN KEYCODE=[" + EVENT.KEYCODE + "]");
}
//-->
</SCRIPT>
</HEAD>
<BODY ONLOAD="INIT()">
<FORM>
自作のEditBox:<OBJECT ID="TEST" CLASSID="CLSID:99999999-9999-9999-9999-999999999999" WIDTH="200" HEIGHT="25"></OBJECT><BR/>
通常のEditBox:<INPUT TYPE="TEXT" SIZE="50" VALUE="TEXT"/>
</FORM>
</BODY>
</HTML>
通常のEditBoxでキー入力を行うとそのコートがALERTで表示されます。
しかし自前のEditBoxでキー入力をしてもコードが表示されません。
Spy++で調べたところ、どちらの場合も同じようにWM_KEYDOWNが飛んできました。
何故、自前のほうではALERTが上がらないのでしょうか?
環境はWindows2000で開発環境はVC6++です。
831デフォルトの名無しさん:2006/02/16(木) 18:32:27
取り敢えず全部大文字はうざいぞ、と。
832デフォルトの名無しさん:2006/02/16(木) 18:42:36
それよりもCLSIDが99999999-9999-9999-9999-999999999999というのが事実ならそっちのほうがずっと醜い。
833デフォルトの名無しさん:2006/02/16(木) 18:49:54
EditBoxなくたってWM_KEYDOWNは発生するだろ
834830:2006/02/16(木) 19:04:47
>>831
タグに大文字と小文字が混じっていたので一括で大文字に変更してしまいました。
>>832
CLSIDは実際の値を記さないように9並びにしてしまいました。
>>833
何故このような事をしたいかと言いますと、現時点での自前のEditBox上で例えばF7キーを押しても親に伝わりません。
それをどうにかしようと、押されたキーをそのまま親に返すようなソースを書いたのですが、思い通りに親にメッセージが飛ばなかったのが始まりです。
835830:2006/02/16(木) 21:46:48
解決しました。IEのバージョンが原因でした。
 IE5 -> NG
 IE6 -> OK
でした。
お騒がせしました。
836デフォルトの名無しさん:2006/02/17(金) 15:42:21
OpenMPは使えますか?
837デフォルトの名無しさん:2006/02/17(金) 15:42:58
VC++2005なら使えます。
838デフォルトの名無しさん:2006/02/17(金) 19:25:39
IMMを無効にする為にImmDisableIMEを使いたいのですが
imm32.libをリンクしてimm.hをインクルードしているにも関わらず
定義されていない識別子ですとエラーが出ます

関数名を入力した後に bool ImmDisableIME(DWORD) のように
補助表示が出るのにエラーになるのは何故なのでしょうか?
839デフォルトの名無しさん:2006/02/17(金) 19:32:14
ライブラリは関係なさそうなあれだけど
あれだな
840デフォルトの名無しさん:2006/02/17(金) 20:56:16
補完はdb見てるからエラーと関係ない
841838:2006/02/17(金) 22:55:30
HWND hImeWnd = ImmGetDefaultIMEWnd(hWnd);
DestroyWindow(hImeWnd);

の荒業で非表示にできたのですが、今度は入力文字列が取得できなくなりましたorz
デフォルトの文字入力を消しつつ日本語入力の文字列を取得するにはどうすれば良いのでしょうか?
842デフォルトの名無しさん:2006/02/17(金) 22:59:59
ImmDisableIME
843838:2006/02/17(金) 23:07:38
他のImm系の関数は使えるし
imm.hの中覗いてもちゃんとあるし

なぜだーーーOTL
844デフォルトの名無しさん:2006/02/18(土) 00:16:01
まさか・・・
#if (WINVER >= 0x040A)
BOOL WINAPI ImmDisableIME(IN DWORD);
845デフォルトの名無しさん:2006/02/18(土) 00:18:56
>>838
MSDNによればImmDisableIMEはWin98/2k以上となっている。
http://msdn.microsoft.com/library/ja/jpintl/html/_win32_ImmDisableIME.asp
<windows.h>のインクルードより前に#define WINVER 0x410なんかを指定したらどうだ。
846デフォルトの名無しさん:2006/02/18(土) 12:44:29
VB2005 C++だす
× String str = "Hello";
○ String ^str = "Hello";
いちち^付けないといけないみたいですね、
^ってどういう意味よ?
847デフォルトの名無しさん:2006/02/18(土) 12:51:58
ミリ秒取得する関数って何だっけ。至急頼む。
848デフォルトの名無しさん:2006/02/18(土) 12:57:38
そんなの急に言われても、ミリ
849847:2006/02/18(土) 13:00:30
事故解決
DWORD timeGetTime()
だった。
>>848
ちょっと心が和んだw
850846:2006/02/18(土) 13:16:37
× VB2005 C++
○ VS2005 C++ (Visual Studio 2005 C++)
851デフォルトの名無しさん:2006/02/18(土) 14:10:42
>>846
それ、(純粋な)C++じゃないから。C++/CLIかManagedC++か知らんけど、該当スレで聞いてみたら?
852デフォルトの名無しさん:2006/02/18(土) 18:34:36
2003のMFCを2005expressで使えるか試した人いますか?
853デフォルトの名無しさん:2006/02/18(土) 20:07:28
>>852
'`ィ (゚д゚)/
散々な目に会いました
854デフォルトの名無しさん:2006/02/18(土) 20:52:07
VC++6.0で最近使ったファイルが1個も無いと
2番目、3番目以降の「最近使ったファイル」が表示されてしまうのですが
どうしたら良いでしょうか?
855デフォルトの名無しさん:2006/02/18(土) 21:28:25
>>853
えっ、散々な目にあうとは、どうなってしまうのですか?
856854:2006/02/18(土) 22:12:39
自己解決
最近使ったファイルはメニューに1個だけ追加すれば良いんですね
くだらない質問失礼いたしました。
857デフォルトの名無しさん:2006/02/18(土) 22:37:04
素人考え&個人的に興味があるんだが、
>815のやつ、相手のMACアドレスからIPアドレスを取得すればいいんでないの?
自分でフレーム作らなくてもよさそうだけど。
最初の1回だけ相手のMACアドレスから相手のIPアドレスを取得する方法があれば解決だよね。
そんな方法があるのかどうか知らんが。
あったっけ?
858デフォルトの名無しさん:2006/02/18(土) 22:50:50
コペルニクス級の馬鹿
859838:2006/02/18(土) 23:09:31
>>844
>>845
使えるようになりました。ありがとうございます。
使えるようにはなったのですが、文字列の取得もできなくなりましたorz
ウーン

ImmDisableIME(-1);//引数( 0 )も試しました
hImc = ImmCreateContext( );
ImmSetOpenStatus(hImc, true);
860838:2006/02/18(土) 23:48:58
ちなみに ImmCreateContextの戻り値を調べたらNULLでした…
861デフォルトの名無しさん:2006/02/18(土) 23:56:40
rarpがどうかしたって?
どっちにしろルータは超えられない。
862デフォルトの名無しさん:2006/02/19(日) 00:07:03
>>859
そりゃそうだ。IMEを無効(Disable)にしたんだから使えるわけが無い。
863デフォルトの名無しさん:2006/02/19(日) 00:10:12
>デフォルトの文字入力を消しつつ日本語入力の文字列を取得する
ってのがいまいち不明。
864デフォルトの名無しさん:2006/02/19(日) 00:33:28
>>863
ウィンドウの左上に勝手に変換中の文字が表示されるやつです
865デフォルトの名無しさん:2006/02/19(日) 00:35:58
もしかして、フル画面アプリで文字入力の際にIMEのツールバーを
表示させたくないだけだったりして。

ゲームでたまにある名前入力とか。
866デフォルトの名無しさん:2006/02/19(日) 00:36:44
すまん的外した。
867デフォルトの名無しさん:2006/02/19(日) 00:38:19
WM_PAINが呼ばれるごとにIMEウィンドウを非アクティブにする荒業で
なんとかなりました
868デフォルトの名無しさん:2006/02/19(日) 12:22:31
お世話になっています。
質問自体は既出(>>178)なのですが、自分も同じ疑問があるので再出させていただきます。

フックの勉強の一環として、コードをインジェクトする方法を色々学んでいます。
すでにDLLインジェクトはやりました。

現在、単一ファイル(exe)で同様のことに挑戦できないかな、と思っています。
(勉強が目的なので必要性などは度外視です)

自exe内の小さな関数(C++)をターゲットプロセスに書き込んでCreateRemoteThread() あるいは
SetThreadContext() による EIP 変更で走らせようとしています。

IATを読んでAPIを即値呼び出しに変える、EVAを読んでオフセットを修正する、
.data/.rdataの情報は全て別個にコピーする、など、そのへんは行っているつもりです。

問題はやはり、>>178さんの質問された、関数そのもののサイズの取得です
VirtualAllocEx() でどれだけ確保すればよいのか。

現在は自分の関数をシーケンシャルサーチしてretをマッチすることで把握していますが、
美しくないなーと思うのと、条件分岐次第でコンパイラの最適化とかでretが複数入ることは
ないのかしら、というあたりで不安です。

先生方、クールな解決法教えてくださいませ(;´Д`)人
869868:2006/02/19(日) 12:23:34
ごめんなさい書き忘れました。
もちろん、「動的に」知りたい、という意味です。
870デフォルトの名無しさん:2006/02/19(日) 12:55:41
コードが動的にできるならともかく(それなら、自分がコードを生成したわけだから
当然サイズはわかるわな)、コンパイルしたコードはそこで決定されるわけだから、
やっぱりmapファイルとか、pdbファイルとかを食わせた方が早いとおもう。
871デフォルトの名無しさん:2006/02/19(日) 18:12:19
>>870
「ビルド後のイベント」でmapファイルを(perlとかで適当に)処理して関数のサイズを
即値で記述したヘッダファイルを生成させて、もういっかいビルド、とかそんな感じでしょうか
やっぱりそうしたほうが手っ取り早いですよね(´・ω・`)
872デフォルトの名無しさん:2006/02/22(水) 13:25:45
vc++2005で作ったdllをエクセルとかで使う場合も、COMが必要なんでしょうか?
873デフォルトの名無しさん:2006/02/22(水) 16:26:29
>>872
ただのDLLでも平気。
VBAからはDeclareで宣言すればよい。

ワークシート上でも読み込む方法があった気がしなくも無い。
874デフォルトの名無しさん:2006/02/22(水) 18:33:19
>>873
そうなんですか。ありがとう。
c#で作ったやつはcomする必要があったので
c++もそうなのかと思いますた。
875デフォルトの名無しさん:2006/02/22(水) 18:40:28
もちろんただの関数を公開ときだけだよ。
クラスの形で使わせたければ、やっぱりCOMしかないからな。
876デフォルトの名無しさん:2006/02/22(水) 19:53:44
>>875
わかりました。
早速VC2005EEをdlして朝鮮してみます。
877デフォルトの名無しさん:2006/02/22(水) 22:00:17
VC上でデバッグしてる時にOutputDebugString関数の出力をVCが受け取らないようにさせることは可能?
878デフォルトの名無しさん:2006/02/23(木) 15:24:00
Q. コンストラクタ引数の省略について

[環境]
OS: Windows XP SP2
言語: MS eMbedded Visual C++ 4.0

クラス Hoge のコンストラクタを以下のように記述しました。

class Hoge {
  explicit Hoge( const string p1, const bool p2 = true, const int p3 = 0 );

  ・・・(省略)
};

第2,第3引数を省略可能にしたつもりです。
このクラスのインスタンスを生成するとき、以下のように記述しています。

  pHoge = new Hoge( "fuga" );

すると、この行で、コンパイルエラー C2664 が発生してしまいます。
通常のメンバ関数であれば、問題なく引数の省略はできていました。
何か、コンストラクタ特有の制約があるのでしょうか?
879878:2006/02/23(木) 15:32:53
すみません。訂正します。
Hogeクラス宣言のコードは以下の通りです。

(Hoge.h 内)
class Hoge {
  explicit Hoge( const string p1, const bool p2, const int p3 );

  ・・・(省略)・・・

};

(Hoge.cpp 内)
Hoge::Hoge( const string p1, const bool p2 = true, const int p3 = 0 )
{

  ・・・(省略)・・・

}

宜しくお願いします。
880デフォルトの名無しさん:2006/02/23(木) 15:47:04
>>879
そのHogeを使うソースがHoge.cpp内でなければそのデフォルト引き数を知り得ない。
881878:2006/02/23(木) 15:58:51
>>880
早速の御回答ありがとうございます。
そうでした、デフォルト値はプロトタイプの方に書くんでしたね。

class Hoge {
  explicit Hoge( const string p1, const bool p2 = true, const int p3 = 0 );

  ・・・(省略)・・・

};

(Hoge.cpp 内)
Hoge::Hoge( const string p1, const bool p2 /* = true */, const int p3 /* = 0 */ )
{

  ・・・(省略)・・・

}

とすれば、よさそうです。
882デフォルトの名無しさん:2006/02/23(木) 16:48:59
const string p1はconst string & p1にでもしておいた方が無難なきもす。
883デフォルトの名無しさん:2006/02/24(金) 23:28:47
いままでVB6.0使ってたんですけど

a=b*2

って書くと

a = b * 2

ってスペースが自動で挿入されてましたが、
C++.netでは、こういうのは自動でできませんか?
もしくは、自動じゃないほうが便利な場合があるのでしょうか?

ホントに超初心者な質問ですみません。
884デフォルトの名無しさん:2006/02/24(金) 23:46:26
自動じゃない方が便利。
スペース入れる入れないもコーディング規約に含む企業もあるくらいだし。
885デフォルトの名無しさん:2006/02/25(土) 04:33:16
VC++ 2005 Express EditionでC++を勉強し始めたのですが、ちょっと困った事に。
とりあえずウインドウを作らないと始まらないなぁと思って、ぐぐったら見つかった
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_SDKApp.html
のその2をそのままコピペしてみてダメだったから、文字セットをUnicodeからマルチバイト文字に変えるまでは調べたら分かった。

だがそれでデバッグを開始すると
LNK2019: 未解決の外部シンボル __imp__DispatchMessageA@4 が関数 _WinMain@16 で参照されました。
等のエラーがWinmain.objで大量に発生して詰まりました。
これを解決するにはどうすればいいんでしょうか?
886デフォルトの名無しさん:2006/02/25(土) 06:26:55
>>885
少なくとも Visual Studio 2005 Professional では
そんなエラーでなかった。つーか、DispatchMessage
がリンクできないって言うなら、SDKじゃねぇの?
887デフォルトの名無しさん:2006/02/25(土) 08:50:13
>>885
user32.libなどはリンクしたか?
888デフォルトの名無しさん:2006/02/25(土) 11:48:13
MFC って今後どうなるんでしょう?
サポートされなくなっていくんでしょうか?
実験データの可視化ツールを作れといわれて、
さて、今から作るなら

0) Win32 API 直打ち
1) C++/CLI & .NET Framework
2) C++ & MFC
3) C# & .NET Framework

どれで行くか迷ってます。出来るだけ持続的に
メンテナンス可能なものがよいのですが・・・

ちなみに今までは 0 と 3 を少しやった程度です。
ほとんどが UNIX/大型 で計算→ UNIX の可視化ツール
だったもので。
889デフォルトの名無しさん:2006/02/25(土) 12:28:35
>>885
Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
890885:2006/02/25(土) 14:00:15
どうやらcorewin_express.vspropsの書き換えが出来ていなかったようです。
それをしたらコンパイルできるようになりました。
解答ありがとうございました。
891デフォルトの名無しさん:2006/02/25(土) 14:42:26
>>888
その中から選ばないといけないならAPI直打ち。
.NETが流行ることがあっても、APIは使えるだろう。

wxWidgetやGTKを使うってのも一つの方法。
ラッパークラスを作って、APIの変更はそこで吸収ってのもあり。

っていうか、VSで作らないといけないの?UNIXベースなら
colinuxやCygwinがあるからそっちの方がいいように思うが。
892891:2006/02/25(土) 14:53:57
アカデミック関係なら、GPLのQtを使うっていう手もあるね。
893デフォルトの名無しさん:2006/02/25(土) 14:54:07
>>891 漏れはUNIXベースで無問題。
でも偉い先生とかはそうはいかない。
ワンクリック、自動インストール、じゃないと
お前プログラム作るの下手だね、の一言で終わりさ。
894デフォルトの名無しさん:2006/02/25(土) 14:57:52
どうやらWindowsで作れっていう命令は、
MSのAA(っていうのか?アカデミックな契約)、
あれのおかげでこんなにもすごいことが出来てますよ、
ってのをどっかにアピールするのが目的らしい。

まぁ漏れとしてもWindowsで組むのはいいんですが、
Windows業界(?)の最近のトレンドを知らないもので、
これからならどれ?と思った。
895891:2006/02/25(土) 15:16:43
>>893、894
おまいさんも大変だね〜
でもそれだったら、windowsだけで完結してないとまずいよな。
腐れ仕事っぽいから、.NETで楽した方がいいかもね。
.NETがポシャったら、MSのせいだから契約のPRになるしw
MSは.NET普及に力いれてるみたいだから、ちょうどいいよ。
.NETはC#との相性が一番いいんじゃないかな。
896デフォルトの名無しさん:2006/02/25(土) 15:31:06
>>895 ふむ、C#だとアピールになるか。
若干クロスプラットフォームっぽくもあるしな。
VS でビルドした CLR で動く exe を
Linux に持って行ったことあるけど、そのまま mono で動いた。
といってもコンソールアプリ + libcurses だけど。
897デフォルトの名無しさん:2006/02/25(土) 18:02:08
初心者ですが、

private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
{
int g;
g=H(h,1);
label1->Text=g.ToString();

}

int H(int h[], int index)
{
h[index]=h[index]-9;
return h[index];
}
これを実行すると__gcを明示的に宣言しなければいけないというエラーが
出るんですが、どうすれば明示的に宣言できるのでしょうか?

898デフォルトの名無しさん:2006/02/25(土) 18:03:41
VS.NET 2003 を使っているのか VS 2005 を使っているのか
それが問題だ。って、そういうメッセージが出るのは前者か。
899デフォルトの名無しさん:2006/02/25(土) 18:13:00
>>898
.net2003を使っています。
今までc/c++のコンソールアプリを勉強してきましたが、
最近奮起してGUIの勉強を始めたばかりです。
900デフォルトの名無しさん:2006/02/25(土) 18:23:30
Managed (Extended) C++ をいまさら使うのはどうかと思う。
901897:2006/02/25(土) 18:29:54
他に何かよいものはありますか?
902デフォルトの名無しさん:2006/02/25(土) 18:38:12
903デフォルトの名無しさん:2006/02/25(土) 18:39:49
なんで GUI 作りたい→そうだ Managed C++ だ!
になるのか分からん。MFC とかでいいじゃん。
904897:2006/02/25(土) 18:49:07
C++/CLIを使うためには.net2005を新たに購入する必要があるのでしょうか?
最近.net2003を買ったばかりなのですが...
905デフォルトの名無しさん:2006/02/25(土) 18:51:22
マネージドC++は事実上廃止されました。

Visual C++ 2005では前項のマネージドC++が整理され、C++/CLIという名が与えられた。
マネージドC++は従来のC++に独自拡張としてCLR用のキーワードと構文を導入していたが、
C++/CLIではその枠を超えC++ではなくC++/CLI言語という位置付けなのである。

ただしVisual C++ 2005では互換性のため
従来のマネージドC++のソースコードもコンパイルできる。
906デフォルトの名無しさん:2006/02/25(土) 18:53:28
C++/CLIなら無料のVisual C++ 2005 Express Editon
907デフォルトの名無しさん:2006/02/25(土) 18:54:46
>>906 デザイナとかはついてたっけ? Express Edition
もしついてたら、それでおkだな。
908デフォルトの名無しさん:2006/02/25(土) 18:56:26
>>901
とりあえずダウンロードに時間かかるし、タダだから、
VC++ 2005 Express Edition ダウンロードしとけ。
で、インスコするかどうか決めるまでの間、
http://members.at.infoseek.co.jp/elku/memo/vc2005.html
ここでも読んどけ。
909デフォルトの名無しさん:2006/02/25(土) 19:06:49
でも C# でもいいような気がしないでもない。
って、そりゃ C++ で GUI っていう >>901 の目的と外れてるか。
そもそも C++/CLI ですら C++ ではないわけだしなぁ。

910デフォルトの名無しさん:2006/02/25(土) 19:34:20
★初心者にVisual C++を教えるスレ★からここに、誘導されマスタ
VC8です、新しいプロジェクトで
CLRからWindowsフォームアプリケーションを選択してプログラムの
学習をしています
外観はFormに、buttonとtextboxを一個ずつ貼り付けた形です
やりたいことは、テキストボックスに文字を入力して、ボタンを押したら
input.txtというファイルに入力した文字を書き込みたいのですが
どの様に書いたらいいでしょうか、よろしくお願いします
メッセージボックスなら出来るのですが・・・・
#pragma endregion
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
   {
     Windows::Forms::Button ^ b
       =dynamic_cast<Windows::Forms::Button^>(sender);
     MessageBox::Show(b->Text);
   }
911デフォルトの名無しさん:2006/02/25(土) 19:41:50
またか・・・また C++/CLI なのか・・・・
どうすれば、って、std::ofstream を使うのか
fopen() をつかうのか System::File を使うのかで違うだろ・・・
912910:2006/02/25(土) 19:48:48
std::ofstreamでオナガイシマス
( `・ω・´)ノヨロシクー
913デフォルトの名無しさん:2006/02/25(土) 20:50:50
>>910
ようするにb->Textを書き出せればよいのだな。

こんな感じでどうか。
#include <vcclr.h>
#include <fstream>

pin_ptr<const wchar_t> text = PtrToStringChars(b->Text);

std::wofstream ofs("hoge.txt");
ofs << text << std::endl;

日本語を扱いたければstd::locale::global(std::locale("japanese"));して、
<locale>のインクルードが必要と言うのは当然C++そのまま。
Loadあたりで呼べばいいと思う。
914デフォルトの名無しさん:2006/02/25(土) 20:55:28
private: System::Void button1_Click
(System::Object^ sender, System::EventArgs^ e) {
std::wofstream wofs("hoge.txt");
if(!wofs.is_open() || wofs.fail())
throw std::ios_base::failure("Can't open output file.");
array<wchar_t>^ wchar_array = textBox1->Text->ToCharArray();
pin_ptr<wchar_t> wchar_array_ptr = &wchar_array[0];
std::wstring ws(wchar_array_ptr);
wofs << ws.c_str() << std::endl;
}

う〜ん、 マネージドなオブジェクトからアンマネージドな
オブジェクトへの値のコピーって面倒だね。
マネージドな配列として参照しておいて、
ガベージコレクタがいじらないようにピンニング。
そこからアンマネージドなオブジェクト (std::wstring)
をコンストラクト。

あらかじめ用意されているマーシャリングを使う方法もありそうだけど・・・
むしろオレの方が教えて欲しいさ。
System::Runtime::InteropServices::Marshal
以下にある奴らってなんなんだい?
奴らについて教えてくれよ。誰か。

あ〜んで、とりあえず hoge.txt に std::ofstream で
書き込むコードは上の通りで動くよ。
915914:2006/02/25(土) 20:56:22
なんでおれわざわざ std::wstring にしてるんだろ。
916914:2006/02/25(土) 20:57:17
が〜ん、>>913 がシンプルに書いてるじゃないか。
オレのコードは忘れてくれ、見んな。
917910:2006/02/25(土) 21:38:05
先生方大変(TдT)アリガトウございます
>>913先生の
コードですが
pin_ptr<const wchar_t> text = PtrToStringChars(b->Text);
の所で、
d:\visual studio 2005\projects\ukraine\ukraine\Form1.h(99) : error C2872: 'Text' : あいまいなシンボルです。
'System::Drawing::Text' である可能性があります。
または 'System::Text'
d:\visual studio 2005\projects\ukraine\ukraine\Form1.h(99) : error C2882: 'Text' : 式の中で名前空間の識別子が正しく使用されていません。
となったので、エディータのお導きに従い

pin_ptr<const wchar_t> text = PtrToStringChars(b->ToString());
こうしたら、ビルドできたのですが、
123と入力してボタンを押すと00A85F34がhoge.txtに書き込まれていました( ゚д゚)ポカーン
>>914先生のコードは完璧でした。
918914:2006/02/25(土) 22:01:17
オレの VS2005 、 PtrToStringChars ってのがないみたいなんだよね。
上で書いたのはちょっとゴチャゴチャしてたので、再度書き込みチャレンジ。
>>913 とは違うやり方を2つ。まずは >>914 で書いたやつの書き直し。

private: System::Void button1_Click
(System::Object^  sender, System::EventArgs^  e) {
    std::wofstream wofs("hoge.txt");
    if(!wofs.is_open() || wofs.fail())
        throw std::ios_base::failure("Can't open output file.");

    // 配列として参照
    array<wchar_t>^ wchar_array = textBox1->Text->ToCharArray();
    // ピンニング
    pin_ptr<wchar_t> wchar_array_ptr = &wchar_array[0];
    // 出力
    wofs << wchar_array_ptr << std::endl;
}
919914:2006/02/25(土) 22:03:12
次にマーシャリングを使う方法。
これって、 .NET Framework 2.0 から?

private: System::Void button2_Click
(System::Object^  sender, System::EventArgs^  e) {
    std::wofstream wofs("hoge.txt");
    if(!wofs.is_open() || wofs.fail())
        throw std::ios_base::failure("Can't open output file.");

    // アンマネージドなヒープにコピーし、ポインタを返す
    IntPtr int_ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text->ToString());
    // 出力
    wofs << static_cast<wchar_t*>(int_ptr.ToPointer()) << std::endl;
    // アンマネージドなヒープにコピーしたブツを解放
    System::Runtime::InteropServices::Marshal::FreeCoTaskMem(int_ptr);
}

こっちはアンマネージドなヒープに一度コピーを作る方法なので、
ピンニングは必要なし。
920910:2006/02/25(土) 22:10:33
(´ε`;)ウーン…
>>914先生ノ
テキストボックスに123と入れてボタン押すと00AA07F8となったり00AA0384
になったり、hoge.txtの内容がランダムになります( ゚д゚)ポカーン
921デフォルトの名無しさん:2006/02/25(土) 22:12:54
>>919
Ansiだからwofstreamを使う必要はないと思う。
922910:2006/02/25(土) 22:15:10
>>914先生ノ
(´ε`;)ウーン…
919のコードはコンパイルできますが、hoge.txtが空デツ
923914:2006/02/25(土) 22:25:49
>>921 あ〜そうか。StringToHGlobalUni と勘違いしてた。
>>922 >>919 実験するときに、オレ、ボタンもう一個追加して
そっちでやってたんだよ。なので button2 になっちゃってる。
button2 を button1 にするか、も一個ボタン作るかしてみて。

private: System::Void button2_Click
(System::Object^  sender, System::EventArgs^  e) {
    std::ofstream ofs("hoge.txt");
    if(!ofs.is_open() || ofs.fail())
        throw std::ios_base::failure("Can't open output file.");
    // アンマネージドなヒープにコピーし、ポインタを返す
    IntPtr int_ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text->ToString());
    // 出力
    ofs << static_cast<char*>(int_ptr.ToPointer()) << std::endl;
    // アンマネージドなヒープにコピーしたブツを解放
    System::Runtime::InteropServices::Marshal::FreeCoTaskMem(int_ptr);
}
924910:2006/02/25(土) 22:39:33
>>914先生>>913先生
<ノ丶`Д´>ノ マンセー
ヽ(´ー`)ノマンセー
923のコード成功シマスタ
925910:2006/02/25(土) 22:47:15
先生質問なのですが
IntPtr int_ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text->ToString());
この部分ですが、textBox1から受け取った変数の型を
int型からString型に変換していると理解していいですか?
926914:2006/02/25(土) 22:56:58
>>925 ちがう
textBox1->Text->ToString() が返すのは
String 型のオブジェクトへの参照

それを受け取って StringToGHlobalAnsi が返すのは
アンマネージドヒープにコピーしたブツへの「ポインタ」。
この「ポインタ」はアンマネージドヒープ内を指すための
特別な「ポインタ」で、IntPtr 型。

IntPtr 型のオブジェクト int_ptr から void* を
取り出すのが int_ptr.ToPointer()

これ、実際には void* じゃなくて char* だから、
static_cast でキャストしてる。
927914:2006/02/25(土) 22:57:57
すまん、参照ってのは言葉のあや。
C++ でいうところのいわゆる参照じゃなくて、
なんつーか、リファレンス?
訳すとやっぱり参照か。ややこしいな。
928910:2006/02/25(土) 23:02:55
先生本当に
あ(・∀・)り(・∀・)が(・∀・)と(・∀・)う!ございました
このスレッドPCに保存しました^^
929デフォルトの名無しさん:2006/02/25(土) 23:57:10
vcc++6.0を使用してプログラミングしていますがわからないことがあるので質問させてください。
mainで、hogehoge関数を呼び出して使っているのですが上手くいかず困っています。
配列を返したいのですが、returnでは配列を返せないらしいのでポインタに代入して,
それを返すという手段をとろうと思っています。
しかし、配列の中身をポインタに覚えさせる所「 a[g] = b[g] ; 」でプログラムが止まってしまいます。
どなたか、解決策をお願いします。



〜〜〜〜main.cpp〜〜〜〜〜

a = (int*)malloc(sizeof(int) * 5);
*a = hogehoge(hogee);

〜〜〜〜hogehoge.cpp〜〜〜〜〜〜〜〜

int hogehoge(double *hogee){

int *a , b[5], g ;
a = (int*)malloc(sizeof(int) * 5);

ややこしい計算=b[g];

for(g=0; g<5; g++){
a[g] = b[g] ;
}
return *a;
930デフォルトの名無しさん:2006/02/26(日) 00:06:20
>>929
エラー出てんの?
for文だけ見ると、問題ないんだけど
VCは確か初期化されてない変数から代入すると止まる(デバッグ版)から
b[0]〜b[4]のどれかが、初期化されてないままなんじゃね?
b[5] = {0};でどうよ?
931デフォルトの名無しさん:2006/02/26(日) 00:06:26
>>929
ぶっちゃけ動く動かない以前にむちゃくちゃ。
mainでaに動的確保してんのにhogehogeの中でも動的確保してどーすんの。

void hogehoge(double g, int *a);

int main(void)
{
    int a[5];
    double hogee;
    hogehoge(hogee, a);
    return 0;
}

void hogehoge(double hogee, int *a)
{
    /* ここでそのままa[i]を使ってやればおk */
}
932929:2006/02/26(日) 00:17:41
>>930
bに全部0入れてもエラーでるんですよね

>>931
ありがとうございます。やってみます。

あと、さっきので、、変数名かえ間違えてました。
すみませんでした。
mainと関数でほんとは変数名違うのでやってました。

〜〜〜〜訂正main.cpp〜〜〜〜〜
c= (int*)malloc(sizeof(int) * 5);
*c = hogehoge(hogee);
933デフォルトの名無しさん:2006/02/26(日) 01:09:26
>>929
誰も突っ込まないので突っ込んでおくが、
return *a;
これじゃポインタaの内容が返るから、 ポインタは返らないよ。a にしなきゃ。
んで、
int *c = (int *)malloc(sizeof(int) * 5);// cをint型のポインタで宣言。ついでに先頭アドレスで初期化。
c = hogehoge(hogee);// *を取る
ってやって、c[3]とかやれば使えるんじゃない?
934デフォルトの名無しさん:2006/02/26(日) 01:37:39
ややこしい計算=b[g];

ここ逆でしょ。
935929:2006/02/26(日) 03:33:39
>>931
ん〜、仕様上別の.cppに関数用意しないといけないんですが、上手くいかないです。

>>933
return *a;をreturn a;にするとコンパイルエラーが出るんですよね。

>>934
そうでした、すみませんでした。

>>all
c[0]にしか値が代入されていません。自分の知識不足で解決できないので、
ひきつつぎご教授お願いします

main.cpp

int *c = (int *)malloc(sizeof(int) * 5);
*c = hogehoge(hogee);


hogehoge.cpp

int *a = (int *)malloc(sizeof(int) * 5);//
int *b[5], g ;
a = (int*)malloc(sizeof(int) * 5);

ややこしい計算=b[g];
int hogehoge(double *hogee){
for(g=0; g<5; g++){
a[g] = b[g] ;
}
return *a;
}
936デフォルトの名無しさん:2006/02/26(日) 03:45:27
>>935
典型的なメモリリークパターンです。0から勉強しなおしては如何でしょう。
937デフォルトの名無しさん:2006/02/26(日) 03:49:55
もしかして >>929 は仕事でコードを書いているんだろうか。
だとすると恐ろしい世の中だ。
938935:2006/02/26(日) 03:53:01
>>937
いあいあ、仕事じゃないです
学校の課題です
939デフォルトの名無しさん:2006/02/26(日) 03:56:15
>return *a;をreturn a;にするとコンパイルエラーが出るんですよね。
君、面白いなぁ。
940935:2006/02/26(日) 03:58:47
>>939
すみません、解説していただけないでしょうか?
941914:2006/02/26(日) 04:02:35
main() でも malloc している。
hogehoge() でも malloc している。
何をしたいんでしょうか?

main() で malloc したメモリ領域に
結果を書き込みたいんじゃないんですか?
942デフォルトの名無しさん:2006/02/26(日) 04:02:38
int *hogehoge(double *hogee){
にすればいいけど、>>931 の方がいいだろう。
943935:2006/02/26(日) 06:53:13
とにかく、リターンで複数の値を返したいだけなのです。
配列で返せればいいけど、ダメなので、わからないなりにポインタとか使ったんですが、本当にわかりません。
もうちょっと勉強してみます。
944デフォルトの名無しさん:2006/02/26(日) 07:43:29
class A{
public:

void hoge1():
void hoge2():
void hoge3():

};

上のようなクラスを継承するときに
hoge1以外を隠す方法は無いでしょうか?
945デフォルトの名無しさん:2006/02/26(日) 07:54:30
>>943
関数への値渡し、アドレス渡し辺りを勉強すればすぐわかると思う
946943:2006/02/26(日) 08:08:07
>>945
ありがとうございます
947デフォルトの名無しさん:2006/02/26(日) 09:14:28
>>944
逆にhoge1だけを見せるということなら、できる。
class Bar : private A
{
public:
    using A::hoge1;
};
948910:2006/02/26(日) 09:31:52
夕べ神降臨のおかげで、目的のコードを教えてもらったのだが
応用しようと一晩中もがいたが、答えが見つけられなく朝を迎えてしまった
>>914先生の書いてくれた>>923のソースに手を加えて
入力チェックを加えたいのだが、ポインターの理解力の無さで止まってしまっています
やりたいことは、入力された文字が16桁且つ16進数あり、もしそれ以外の文字が
入力だれたら、MessageBoxでエラーを知らせるというものです、
IntPtr int_ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text->ToString());
に着目して、取りあえず文字数のチェックだけでもしようと、してみましたが
巧くいきません、どうかオナガイシマス
private: System::Void button1_Click
(System::Object^ sender, System::EventArgs^ e) {
std::ofstream ofs("hoge.txt");
if(!ofs.is_open() || ofs.fail())
throw std::ios_base::failure("Can't open output file.");
// アンマネージドなヒープにコピーし、ポインタを返す
IntPtr int_ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text->ToString());
  //文字数チェック
  for(int i=0; i<Text->Length; i++)
    if(i<16)
      MessageBox::Show("文字数が少ない");
    else if(i>16)
      MessageBox::Show("文字数が多い");
// 出力
ofs << static_cast<char*>(int_ptr.ToPointer()) << std::endl;
// アンマネージドなヒープにコピーしたブツを解放
System::Runtime::InteropServices::Marshal::FreeCoTaskMem(int_ptr);
}
949946:2006/02/26(日) 09:33:33
自分なりに>>931さんのを、決められた自分の仕様で動くように変換してみたつもりです。
「error C2660: 'hogehoge' : 関数が不正な 2 個の実引数をともなって呼び出されました。」
というエラーをはいてしまいました。
また、main() で malloc したメモリ領域に結果を書き込むというのはこんな感じでしょうか。


//メイン
int *a = ( int * ) malloc ( sizeof ( int ) * 5 );
hogehoge ( hoge , a );              //ここでエラーが出てしまう
a[ i ]を使う;

//関数
int hogehoge ( double *hoge , int *a ){
*a = &hairetsu[ 0 ]
return 0;
}

950デフォルトの名無しさん:2006/02/26(日) 09:41:45
int hogehoge ( double *hoge , int *a ); じゃなくて
int hogehoge ( double hoge , int *a ); だろ。
951デフォルトの名無しさん:2006/02/26(日) 09:44:08
>>944
インターフェイスが変わるなら継承では無いんじゃない?

class B
{
public:
 void hoge1(){
  a.hoge1();
 }
private:
 A a;
}
952910:2006/02/26(日) 09:44:39
すんません括弧忘れてました、
それから
× 入力だれたら
○ 入力されたらです
for(int i=0; i<Text->Length; i++){
  //MessageBox::Show(e->ToString());
    if(i<3)
      MessageBox::Show("文字数が少ない");
    else if(i>5)
      MessageBox::Show("文字数が多い");
  }
953デフォルトの名無しさん:2006/02/26(日) 09:45:26
>>949
  for(int i=0; i<Text->Length; i++)
    if(i<16)
      MessageBox::Show("文字数が少ない");
    else if(i>16)
      MessageBox::Show("文字数が多い");

じゃなくて、

    if(Text->Length < 16)
      MessageBox::Show("文字数が少ない");
    else if(i>16)
      MessageBox::Show("文字数が多い");

じゃないの?

あと、>>923 ベースでもわるくはないと思うけど、
>>918 ベースの方が安全かもしれない。というのは
例外で抜けたときに FreeCoTaskMem が呼ばれないかもしれないから。
954949:2006/02/26(日) 09:47:46
>>950
現在過去のプログラムを改変する作業なのですが、過去のプログラムはメインで
double hoge[5]; こんな感じでして、*hogeじゃないと動作しませんでした。
説明不足ですみませんでした
955910:2006/02/26(日) 09:59:11
>>953さんありがとうございます
Text->Lengthに着目したのは間違いでは無かったようなので
少しは嬉しかったです、しかし
>>953さんのコードに入れ替えてコンパイルしてみたのですが
16桁以上入力して、実行しても
MessageBox::Show("文字数が少ない");
が実行されてしまいます。
956デフォルトの名無しさん:2006/02/26(日) 10:16:09
>>955 まちがえてた。
if(textBox1->Text->Length > 16)
だった。
957デフォルトの名無しさん:2006/02/26(日) 10:22:19
それにしても、C++/CLI だと -> が一杯出てくるね。
958944:2006/02/26(日) 10:23:15
>>947
>>951

ありがとうございます。
早速試してみます。
959デフォルトの名無しさん:2006/02/26(日) 10:25:54
>>954
横レス。
プロトタイプ宣言のところはちゃんと書き換えた?
おそらくヘッダーのほうに書いてるんだろうけど。

960949:2006/02/26(日) 10:32:48
>>959
ありがとうございます
おもいきり忘れてました
コンパイル通りました
961910:2006/02/26(日) 10:36:34
>>956さん
ありがとうございます
巧くいきました、
textBox1->Text->Lengthに気づかなかった自分が情けないです
(;´д`)トホホ…
>>918 ベースの方が安全かもしれない。というのは
>>例外で抜けたときに FreeCoTaskMem が呼ばれないかもしれないから。

自分も>>918のコードの方がとっつき易く思えたのですが、
実行するとhoge.txtに入力した文字ではなく桁数が異なる、
ランダムな数字が入ってしまって、原因が分からないので
(´・ω・`)ガッカリ…なとこなんです。
962デフォルトの名無しさん:2006/02/26(日) 10:40:49
>>961 え〜
wchar_t がらみだとは思うけど、
ちゃんと wofstream とか、ワイド文字版にしてる?
963949:2006/02/26(日) 10:41:22
動作確認しました
スレ汚しすみませんでした
また 付き合ってくれた皆様ありがとうございました
964910:2006/02/26(日) 11:07:24
>>962さん
どうもです
ワイド文字版で具具ってみましたが
意味は分かったものの具体的にどうしたらよいのかわかんないので
コンパイルオプションを
プロジェクトのプロパティーの全般タグで
文字セットを「Uniucode 文字セットを使う」から
「マルチバイト文字セットを仕様する」に変更してコンパイルし直しましたが
変わりません・・・
wofstreamは多分ここの部分だと思いますが同じようにしています

std::wofstream wofs("hoge.txt");
965デフォルトの名無しさん:2006/02/26(日) 12:20:57
普段はMFC使ってるので、Windows API 直での
GUIの勉強もしてみようと思って
http://www.kumei.ne.jp/c_lang/
で勉強してるんだけど、

「当ホーム・ページの一部または全部を無断で
複写、複製、転載あるいはコンピュータ等の
ファイルに保存することを禁じます」

って・・・・ファイルに保存できないなんて、
サンプルプログラムどうやって試せばいいんだろう。
って、悩んでます。
966デフォルトの名無しさん:2006/02/26(日) 12:46:00
>>965
メールでも出して許可もらえばいいんじゃね?
967デフォルトの名無しさん:2006/02/26(日) 12:46:26
サンプルを自分のPCで試す程度なら私的利用の範囲内
968デフォルトの名無しさん:2006/02/26(日) 12:55:06
>>966
そうします。
閲覧時にキャッシュしてるのはどうしたらいいんだろう・・・
969913:2006/02/26(日) 13:33:25
>>917
あのコードはコンパイルして確かめずに書いた、すまん。たしかになんか数値が書き込まれているな。
こうしたらちゃんと書き出せた。
pin_ptr<const wchar_t> text = PtrToStringChars(textBox1->Text);
std::wofstream ofs("h:\\hoge.txt");
ofs << static_cast<const wchar_t*>(text) << std::flush;
970デフォルトの名無しさん:2006/02/26(日) 14:19:04
VC++2005の std::fstream で日本語名のファイルが開けないんだけど、俺だけ?
971910:2006/02/26(日) 14:31:05
>>969さん
どうもです
ここで
pin_ptr<const wchar_t> text = PtrToStringChars(textBox1->Text);

Error C3861: 'PtrToStringChars': 識別子が見つかりませんでした
が出るんで、wchar_t PtrToStringCharsとかしたら、wchar_tは宣言するなとか
困憊羅が言ってきます
972デフォルトの名無しさん:2006/02/26(日) 16:14:34
PtrToStringChars って、
Visual Studio 2005 では見つからないんだけど、
もしかして .NET Framework 1.1 限定なのかな。
ってそんな下位互換性無いことはさすがにないかな。
973デフォルトの名無しさん:2006/02/26(日) 16:52:09
974デフォルトの名無しさん:2006/02/26(日) 17:10:52
>>971-972
<vcclr.h>
975910:2006/02/26(日) 18:58:45
>>972さん
>>974さん
うっかりしていました<vcclr.h>を途中から外していました、入れ直したら出来ましたが
hoge.txtの場所が変わっていたので
ここを std::wofstream ofs("h:\\hoge.txt");
std::wofstream ofs("hoge.txt");
if(!ofs.is_open() || ofs.fail())
最初のように元に戻したらばっちりでした
後、一箇所16進数の入力チェックなのですが
if(textBox1->Text->ToCharArray != ('1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'A' | 'B' |'C' |'D' |'E' |'F'))
MessageBox::Show("HEXコードを入力してね");
普通に書いたつもりなんですけど、ABC入れてもabc入れても弾かれて
「HEXコードを入力してね」が出てしまうのですが、正規表現の書き方間違ってますか?
976デフォルトの名無しさん:2006/02/26(日) 19:12:41
その右辺はどーみても単なるCの式だろ。
977910:2006/02/26(日) 19:24:04
>>976さん
そうなんですか、やっぱりCとは違うんですね
978デフォルトの名無しさん:2006/02/26(日) 19:50:43
>>975
チェックするということはどうせ16進法として数値へ変換するんだろ。
俺ならstd::strtoulで変換すると同時に変換できたかどうかチェックする。
979デフォルトの名無しさん:2006/02/26(日) 21:07:02
VC6でEditBoxからint値を取得する関数は何でしょうか?
980デフォルトの名無しさん:2006/02/26(日) 21:24:19
>>979
関数つうかapiだけどSendMessage
981デフォルトの名無しさん:2006/02/26(日) 21:37:42
APIの関数でGetDlgItemIntはどうだ。
982910:2006/02/26(日) 23:53:34
>>978さん
std::strtoul(PtrToSrtringChars(textBox1->Text), *PtrToSrtringChars(textBox1->Text), 16);
取りあえず、エラーチェックは後に置いといて、これで変換出来ると思ったのですが
error C2664: 'strtoul' : 1 番目の引数を 'cli::interior_ptr<Type>' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
となり、
strtoul→wcstoulにうしても
error C2664: 'wcstoul' : 1 番目の引数を 'cli::interior_ptr<Type>' から 'const wchar_t *' に変換できません。(新しい機能 ; ヘルプを参照)
になっちゃうんだよね( ゚д゚)ポカーン
983デフォルトの名無しさん:2006/02/27(月) 00:31:41
>>982
pin_ptrで固定させないと。
984910:2006/02/27(月) 01:16:46
>>983さん
どうもです
前段で、教えて貰ったように
pin_ptr<const wchar_t> text = PtrToStringChars(textBox1->Text);
を入れて入るんですが・・・
985デフォルトの名無しさん:2006/02/27(月) 10:21:28
しかし超初心者用の話題とかなり上級者
(C++/CLI使うやつは上級者だろ?という先入観あり)
の話題がごっちゃになってるな(笑
986デフォルトの名無しさん:2006/02/27(月) 13:05:21
どういうわけか、実際そうなんだよね。DLLインジェクションとか超初心者しないだろ(笑)
って話から、コンパイラ通りませんまで。気楽に聞きやすいせいかな?
987デフォルトの名無しさん:2006/02/27(月) 13:52:05
過疎スレで質問しても人がいないから
みんな初心者スレに来るのでは?

初心者スレ2つもあってもしょうがないと思うけど
988デフォルトの名無しさん:2006/02/27(月) 17:37:48
>>984
こうだろ。
pin_ptr<const wchar_t> text = PtrToStringChars(textBox1->Text);
wchar_t* pEnd;
unsigned long ul = std::wcstoul(text, &pEnd, 16);
989デフォルトの名無しさん:2006/02/27(月) 18:03:11
拡張子がcのファイルをC++としてコンパイルする方法はないでしょうか?
事情があって拡張子をcppなどに変更することができません。
990デフォルトの名無しさん:2006/02/27(月) 18:09:27
cppのファイルを作成して.cのファイルをインクルードする。とか、嫌がらせのようなことを言ってみる。
991デフォルトの名無しさん:2006/02/27(月) 18:11:48
>>989
・IDEから
 プロジェクトのプロパティ → C++ → 詳細 → コンパイル言語の選択

・プロンプトから
 /TP すべてのファイルを .cpp としてコンパイルする
 /Tp<source file> ファイルを .cpp としてコンパイルする
992デフォルトの名無しさん:2006/02/27(月) 18:16:04
>>990-991
ありがとうございます
993デフォルトの名無しさん:2006/02/27(月) 18:36:45
次はPart3なんで立てる人よろしく
994デフォルトの名無しさん:2006/02/27(月) 23:31:13
VisualC++6.0 で、エディタのフォントを変えるにはどうしたら良いのでしょうか。

もう3日悩んでます。
995デフォルトの名無しさん:2006/02/27(月) 23:35:06
秘密
996デフォルトの名無しさん:2006/02/27(月) 23:41:57
>>994
メニュー「ツール」→「オプション」で最後のタブに「書式」ってあるんじゃね。
997デフォルトの名無しさん:2006/02/27(月) 23:43:38
>>994
そのうちの「ソースウインドウ」のフォントを変える
998993:2006/02/27(月) 23:44:42
>>996
ガーン…スクロールできるなんて知りませんでした。。。
なぜか最近になって6.0を使うハメになり、ここで死んでました。。。
ありがとうございました!!!
999デフォルトの名無しさん:2006/02/27(月) 23:50:36
>>998
フォントはHGゴシックE サイズ12だ忘れるなよ
1000デフォルトの名無しさん:2006/02/27(月) 23:54:11
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。