1 :
デフォルトの名無しさん :
2005/12/29(木) 09:44:29
part2とか付けろよ。。。
4 :
デフォルトの名無しさん :2005/12/29(木) 13:03:40
ワロタw visual studioくれwww
Express Edition だけどな。 でも初心者には十分すぎると思われ。
弘法は筆を選ばず
8 :
デフォルトの名無しさん :2005/12/29(木) 20:10:29
Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う (Win32APIを使った開発には必須)ができません(別にしないけど) パスの指定で 実行可能ファイル C:\Program Files\Microsoft Platform SDK\Bin という記述が間違っているのでしょうか? かれこれ2時間悩みました。。
>>8 できないとはおそらくエラーが出るということだろうが、もっと詳しく。
別にしないんならできなくてもいいんじゃね( ´_ゝ`)
そういや、Visual Studio 2005 Professional なら Platform SDK 同梱なんだろうか。 .NET Framework SDK は同梱だった気がするけど。
>>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(){
}
原因がわかりません、、
どなたか教えてください。
14 :
8ですけど :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が選べるようになる
16 :
前スレ974 :2005/12/30(金) 09:30:37
new や malloc 系の関数ではヒープからメモリが確保されますが、 調子に乗って確保していくとスワップが発生するところまで 確保できてしまいます。そこで、「この辺で許しておいてやるか」 ってくらいのところでメモリの確保をやめたいのですが、 「まだメモリ確保できそう」とか「もうそろそろやばそう」 といった情報はどうすれば取得できるのでしょうか? .NET Framework の中にある PerformanceCounter クラスのようなもの を使うしかないでしょうか?
GlobalMemoryStatus?
18 :
前スレ974 :2005/12/30(金) 10:37:06
>>17 おお、これかも知んない。ありがとうございます。
パフォーマンスカウンタで Memory\Available MBytes
の値をゲットしようとあれこれ調べ始めてたところでした。
次いでなんで両方から情報を取得して比較してみます。
VC++ってopendirとか使えないの?
ceilやfloorもあるけどroundが居ません。 例えば741.852を741.9と四捨五入したいときはどうするべ?
使えないものはない
23 :
18 :2005/12/30(金) 13:17:14
当たり前といえば当たり前ですが、 パフォーマンスカウンタで取得した値も GlobalMemoryStatus で取得した値も ほとんど差がないですね。 前者 326385664バイト 後者 326369280バイト
どう作るのかを聞いてみたかったんだ。 じゃコンナ感じ?(double)((int)(741.852*10^2+5)/10^2)
>20 一般的にroundは四捨五入ではなくbankers roundなので注意
>>25 bankers roundってなに?
ISO/JISで定義されている、俗に言うISO丸めのことかな?
27 :
デフォルトの名無しさん :2005/12/30(金) 19:05:31
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 です。
30 :
29 :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() 関数内の一行目のコメントをはずすと、 何も表示されなくなります。なぜでしょうか?
いままで日本語とか何も意識しないで使ってけど
32 :
29 :2005/12/31(土) 17:48:19
>>31 あれ、そうですか。
俺の環境(?)だと、
std::wcout.imbue(std::locale("japanese"));
しないと std::wcout はワイド文字列をちゃんと表示してくれません。
質問です VisualC++はRADではない、と教わったのですがダイアログベースのアプリケーション等を作る時などは 普通にGUIでコントロール部品を貼り付けてコードを書いたりしますよね これはRADとは言えないのでしょうか? 「RADな開発環境」とは一体どういう意味なのでしょうか?
じつにくだらない質問だ 生きててよかった
くだらなくて今更人に聞けないんですよ…
分からない事がありまして C言語でファイルを入力し演算するソースを考えていまして ファイルから下記の数字が入っているtxtファイルがあったとして ■ファイルの中身 ----------------------------- 23 426 3 46 12 ・ ・ ・ ・ ----------------------------- このテキストファイルを読み込み一行ごとの数字を それぞれ変数を作って入れたいのですが どのように組めば宜しいでしょうか。 テキストファイルを中身を丸ごとひとつの変数には入れれる のですが・・・。 環境 OS 2K .net2003
どうみても冬休みの宿題です 本当にありがとうございました
VCと関係ねー
素直に宿題だって言えばよかったのにな。 ごまかせるとか思ってたのかと。
>>34 おれもよくわからんが、ビルダーマンセーなやつに聞いたら
ぽとぺたやって説明してくれた。
そいつにVC6のダイアログ作るところ見せたら(゚Д゚)ポカーンして
たが、どうなんだろうな。
>>23 その数字はどのメンバですか?dwAvailPhys?
44 :
デフォルトの名無しさん :2006/01/04(水) 02:47:22
マネージドアプリケーションを作ってますがやりにくい... ネイティブの方が楽に感じるのですが、やっぱりマネージドを覚えないとまずいでしょうか?
45 :
デフォルトの名無しさん :2006/01/04(水) 04:09:46
コンソールアプリケーションで、何かキーを押すまで終了しないようにするには どうすればいいですか? いちいちプロンプトから実行するのがめんどくさい・・・
VCなのにコンソールアプリケーションやってるやつ
>>45 [ctrl]+[F5]
「デバッグ無しで開始」
>>45 return の所にブレークポイント置くとか
50 :
29 :2006/01/04(水) 08:27:12
>>46 え?俺、ほとんどVCではコンソールアプリしか作ってないけど。
グラフィカルなもの作るときには特に C# の方が作りやすいし。
>>44 VC++ 2005のC++/CLIはだいぶまともになったと言う話だが。
52 :
デフォルトの名無しさん :2006/01/04(水) 08:50:50
Managed C++ と C++/CLI はぜんぜん違う。 Managed C++ に比べてずいぶんすっきりきれいになった。 でも、一から Windows アプリを組むなら C# でいいじゃん、と思った。
商用パッケージ製品で.NETアプリまだー?
intellisenseに関する質問です 他人の作ったDLLを使うためにヘッダファイルを読み込んだのですが、 そのヘッダファイルには当然、関数の宣言しかされていません。 また、intellisenseの仕様は void foo(); // これだけだとintellisenseが効かない void foo(){}; // intellisenseが効く となっていると思うのですが、 つまり関数の宣言だけのヘッダファイルをincludeしてもintellisenseが効きません。 このDLLを使うにあたってintellisenseの機能を使いたい場合はどうすれば良いのでしょうか? どなたかご教示願います
>>55 プロジェクトにヘッダファイルを追加かな?
57 :
55 :2006/01/04(水) 16:30:48
ncb消せ
59 :
55 :2006/01/04(水) 16:41:28
DLLをソースからビルドしないとだめだろ
61 :
デフォルトの名無しさん :2006/01/04(水) 16:46:58
>>55 え?関数の宣言だけじゃ、IntelliSense だめなの?
そんな訳はないと思うんだが。
とりあえず宣言だけずらずらと並べて、
実装は後回しにしてプログラム組んでいくことなんてよくあるけどなぁ。
っていうか、普通クラス設計ってそういうもんじゃね?
設計とかじゃなくて時間かかるから何回も同じことやらないように あらかじめ作ったやつを参照するようになってる。
63 :
55 :2006/01/04(水) 17:13:15
>>61 私もそんな訳無いよなあ…昔やったときはちゃんとintellisense使えた筈なのになあ
とか思いつつ実際に新規プロジェクト作って試してみてもそうなってしまうので困ってます
申し訳ないのですが試してみていただけないでしょうか?
最悪VCインストールし直しですかね…
64 :
55 :2006/01/04(水) 17:14:14
ちなみにVC++2003です
ブラウザ情報のビルドをやったらできるようになった気がしなくもない。
66 :
デフォルトの名無しさん :2006/01/04(水) 18:23:13
ちなみに
>>55 の欲しい IntelliSense の機能ってのは、
関数の引数のヒント表示のこと?
>>55 みると
対象となる関数には特に名前空間も指定していないみたいだから
NamaeKukan:: まで入力したら NamaeKuukan::Kansu が
候補に出てくるってことじゃないよね?
そうじゃなくて Kansu( まで入力したら引数に関する
ヒントが表示されるって言うもの??
67 :
55 :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 とかは ちゃんと引数のヒント出るよね。
しかし#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) モナー神社 願事 : 思いの儘となる しかしやり過ぎては悪し 待人 : 遅く来たる 失物 : 出づべし 旅立 : 早く行くが利 商売 : 見込み確かなれば儲け有り 学問 : 労多いが成果有り 争事 : 思うままに勝つ 転居 : 騒がずして吉 病気 : 気長く保養せよ 吉 縁談 : 良縁あり 人に頼んで進めよ
Express Editionの使い方が分かりません・・・ 特にコンパイルの方法が分からないのです! どうかおしえてください。 おねがいします。(´・ω・`)
>>75 そう。テンプレートだから。
正確にはインラインで定義されているからなのだろうが。
79 :
55 :2006/01/05(木) 08:16:22
どうやら再インストールの必要は無さそうですね 「昔やったときは出来たはずなのに・・・」 ってのは、いろいろ開発環境渡り歩いてるせいで多分VC#辺りと勘違いしたのだと思います わざわざ試していただきありがとうございました
80 :
デフォルトの名無しさん :2006/01/05(木) 08:34:01
>>78 じゃ、 printf( で引数ヒントが出るのはなぜだろう。
そういや、確かにVC++のIntellisenseはかなり微妙になったな。
82 :
デフォルトの名無しさん :2006/01/06(金) 00:18:58
>>81 微妙って?
2003 → 2005 で良くなったってこと?悪くなったってこと?
83 :
81 :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-> とかわざわざ打ってませんか?
>>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 は非標準????
VC++はC99に対応していない。
90 :
デフォルトの名無しさん :2006/01/06(金) 17:16:01
>>89 あれ、そうでしたか。
どうりで、 nan() とか isnan() とかもないわけだ・・・
という事は C95 準拠ってことですか?
>>86 我が家では、 Ctrl+Space は必ず異常終了してしまう。。。 VS6.0+SP6
>>99 一部準拠してる場合もあるしバージョンによる違いもある。
94 :
デフォルトの名無しさん :2006/01/06(金) 20:24:06
基本的なことなんですけど・・ ↓みたいな関数を作成した場合 CString getHoge() { TCHARbuf[4096]; 〜略〜 CString strBuf; strBuf = buf; return strBuf; } 戻り値のCStringのインスタンスstrBufって、呼出側で、明示的にdelete しないと、いけないの? それともJavaみたいに、オブジェクトの非参照カウントが0になると 自動的に開放される?
>>94 概念的にはstrBufのコピーが一時オブジェクトとして作られ、それが戻り値になる。
deleteする必要はない。deleteするのはnewしたものだけ。
その例の場合、strBufは存在意義がない。 単純に、 return buf; でよろしい。
>>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 /
失望された。絶望された。 ク でも私は貝けない。
100 :
デフォルトの名無しさん :2006/01/06(金) 22:07:11
std::ostringstream oss; oss << "nanashi"; std::string s = oss.str(); とすると、最後の代入演算子で本当にコピーが発生 してるんですよね?? もうこれ以上 oss をいじることはないんで、 oss の内部で使っている(と想像しているんだが) string を切り離して取り出せません? なんかコピーが発生しているのが非効率的に思えて。
>>100 できない。
どうしても気になって仕方がなければ自分で代わりのものを作れ。
102 :
デフォルトの名無しさん :2006/01/07(土) 07:39:37
>>101 THX
やっぱりガベコレ欲しいなぁ、C++にも。
って言うと C++/CLI 使えや、ゴルァ
ってことになるんですかね?
bohem gc
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 これ?
ミリ。なぜならば ソースと実際の挙動とで違いがあるから。 コンパイラ様が、『真面目にコピーせんでもええやん』と解釈したら、参照テーブル作って終わり。 になるかもしれない あと最後の一行、初期化になっていないのは認識しちょる?構築後代入
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;
}
>>104 そもそもbasic_ostream::str()はbasic_stringそのものを返す。
const basic_string&を返すのではないから無意味。
>>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; とかなんの警告も出ないのね。 やっぱそれぞれクラスを作らなきゃだめ?
もしかしてVCとは全然関係ないC++の話?
>>113 ごめん、C++ 一般のスレいってきまつ
115 :
デフォルトの名無しさん :2006/01/07(土) 17:11:07
MFCのCStringオブジェクトに格納された、デリミタで区切られた文字列から 直接任意のフィールドを取り出すことってできますか? CSVファイルの二番目のフィールドを取るとかです。
効率考えないならAfxExtractSubString
118 :
デフォルトの名無しさん :2006/01/07(土) 18:04:46
サンクス! strtokはどうしても好きになれませんでした。
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 を引っ張ってきて どうかうまくできるには出来たのですが、もっとスマートな方法はないでしょうか?
errnoなんか共有しない。
122 :
120 :2006/01/08(日) 14:08:55
居るよね 問題が解けないからって出題者を馬鹿にして居直る人間
124 :
デフォルトの名無しさん :2006/01/08(日) 18:13:58
質問です。 リストビューのメイン項目に複数行文字列が入って、 その項目の中に1つだけ「テスト」という文字列が入っています。 その「テスト」という文字列が代入されている項目番号を取得したいのですが どうしたらいいでしょう?
>122 そのためのCOM。そのためのIErrorInfo。 まあ、SetLastError,GetLastErrorのペアを使うようにする手もあるけど。
127 :
デフォルトの名無しさん :2006/01/08(日) 21:38:29
いつから event って C++ で予約語になったの? エディタで青く色づけられるんだけど。 C# じゃなくって、 C++ でも event って予約語なの??
129 :
120 :2006/01/08(日) 22:15:27
>>126 COMのことはよくわからないので GetLastError、SetLastError を試してみたのですが、
うまく行きませんでした。
DLL 側が errno しか使用していないのでダメみたいです。
ありがとうございます、勉強になりました。
130 :
81 :2006/01/08(日) 23:10:25
DLLのerrnoを返すような関数を用意すればいいんじゃないか?
>>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#とはどう違うんですか? 素人はどっちを買ったらいいか、特徴や利点などについて教えてください。 よろしくお願いします。
上がってきたスレを色々読み
>>132 は解決しましたました。
有難うございました。
ヘルプって英語しかないんですか? 日本語のヘルプがほしいんですが
135 :
130 :2006/01/09(月) 02:33:37
>>131 すまん、DLLの改変が出来るなら同じバージョンのCRT使えるか。
どうしてもDLLのerrnoが必要ならその方法でいいと思うよ。
136 :
120 :2006/01/09(月) 03:11:37
>>135 他の人が配布しているDLLを利用しているので
改変が出来ないんです
ご助言ありがとうございました。
このやり方で対応したいと思います。
137 :
124 :2006/01/09(月) 14:57:42
お願いします。
138 :
デフォルトの名無しさん :2006/01/09(月) 19:56:21
超初心者です。 ウインドウ'sプログラムなのに #include "window.h"がありません。 #include "stdafx.h"があります。 なじぇですka?
>>138 "stdafx.h"はビルド時間を短縮するためのプリコンパイルドヘッダのためにある。
"stdafx.h"はプロジェクト毎に存在し、その中で<windows.h>などがインクルードされているはず。
140 :
デフォルトの名無しさん :2006/01/09(月) 21:34:27
サンクス!
141 :
デフォルトの名無しさん :2006/01/09(月) 21:42:43
質問です。 VC++6でウィンドウが最大化されているかどうかという 状態を取得したいのですが、ずばりそのものを BOOLで取得できるような関数ってあるのでしょうか?
関数でよければありますよ
143 :
141 :2006/01/09(月) 22:23:51
IsZoomed
145 :
141 :2006/01/09(月) 23:04:14
>>144 ありがとうございました!!!!!
解決しました。
146 :
124 :2006/01/09(月) 23:39:03
これを調べる関数はありますでしょうか?
関数でよければありますよ
VC++6.0と、DirectX9.0c 2003 Summer を使用してコーディングをしようとしています。 MSDNライブラリのように、VCのエディタからF1でDirectXのドキュメントを表示させたいのですが、 VCに外部ヘルプを登録する方法はありませんか?
152 :
124 :2006/01/11(水) 02:06:45
>>151 ありがとうございました。
解決しました。
VC6のときはできていたのに、 最近VC2003を使いだしたのですが、 リソースにアイコンのインポートができません。 なぜ?
そのアイコンのフルパス中に、全角文字があるというオチ?
>>154 あ、そうです。
ありがとうございます。やってみます。
VC6ではインポートできるのに。。。
どうでもいいけど、凄い日本語だな。 初心者云々以前に日本語の勉強が必要そうだw
157 :
デフォルトの名無しさん :2006/01/12(木) 11:06:49
質問です。 コンソールアプリケーションでビットマップを作成するソフトを作りたいのですが、 メモリ上のビットマップイメージに文字列や円をAIPを使って 簡単に描画することは出来ないのでしょうか? 現時点では、ビットマップイメージを作成し出力する事はできるのですが… どなたか詳しい方、何卒宜しくお願いします。
>ビットマップイメージを作成し出力する事はできる これでできてるのでは?
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); }
>>158 出来ている事は、例えばint[x][y][3]の中にドットのマップを格納し、
それを元に画像を作るという事でレベルの低い事です。
現在はもうちょっとレベルの高い部分、
例えば座標10,100に赤で大きなフォントで"テスト"と書く
ような事を実現したいのですが、調べてもらないのです…
161 :
デフォルトの名無しさん :2006/01/12(木) 11:46:42
VisualStudioのオプションやプロジェクトでのディレクトリ指定時に マクロを指定できると思うのですが、 これをユーザで新規に定義する方法はありますか? スレ違いの場合は、適切なスレを教えていただければ幸いです。
>>157 ,160
>メモリ上のビットマップイメージに文字列や円を
メモリDCとCreateDIBSection();
>座標10,100に赤で
SetTextColor( hMemDC, RGB(255, 0, 0) );
TextOut( hMemDC, 10, 100, "テスト", 6);
>>161 スレ違いっていうか、日本語の勉強をしなおしてきてください。
>>160 調べてもらない?
WM_CTLCOLORSTATICが どのコントロールから来たか識別するには どうしたらいいですか?
>>163 >
>>161 > スレ違いっていうか、日本語の勉強をしなおしてきてください。
日本語の問題ではなくて質問内容の不備ということではないのですか?
>>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();
>>167 作ったビットマップオブジェクトに描画してる(ちゃんとされているか怪しいが・・・)だけで
元の画像に変化無し
そもそも元の画像ってなに?
コンソールアプリ?
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でもつかっとけ ソース理解するのも容易だし
質問です。複数個の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;
>>175 InputTextにはAns.を格納できるだけのメモリしか指していないし、
C/C++的には文字列リテラルへは書き込みできない。
普通はmallocしたりstd::stringやらCStringを使う。
>>176 ありがとうございます。
CStringにはまだ慣れてないので、char操作してみます。
178 :
デフォルトの名無しさん :2006/01/16(月) 04:43:20
自分で作った関数のサイズを取得する関数ってないですか? 関数ポインタを使うときに関数のサイズも知っておきたいので・・・
なんで知りたいの?
関数にサイズなんてない。
サイズはあるだろ。
182 :
デフォルトの名無しさん :2006/01/16(月) 11:31:49
>>179 関数ポインタの勉強をしてるときに
「ポインタの位置から関数分のサイズを別の場所にコピーすれば、
コピーした関数を実行できるのかな?」
と疑問に思ったんですが、関数のサイズがわからなくて・・・
183 :
デフォルトの名無しさん :2006/01/16(月) 11:54:08
>>182 実行できるわけねぇ・・・
いまの IA32 のコードって全部 PC 相対になってるわけじゃないから、
リロケータブルじゃないし。だから実行にはローダが必要なわけで。
6809 とか 68000 系を使ってればできそうな気もするけど。
まぁどうしても実験したいなら、/FAs等でリスティングファイル書き出して、 自分で計算するのが早いと思う。
関数をコピーする意図がわかりませぬ。
関数ポインタの指す先は、関数の実体へのジャンプコード。 なので、もう少し頭を絞らないといけない。
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回にいくつも出てるんですが・・・
プログラムの中で平行して動いてる副プログラムが3つあってそれぞれが終了したって意味 正常
実際、関数自身のサイズを知る方法ってあるのかな?
副プログラム? 知らないうちに呼び出してしまったのでしょうかね?
そういやMFCのWizard使うと勝手に内部でいくつかスレッド作ってるようだけど 何処で何のためにスレッド使ってるんでしょう?
意識しなくてもマルチスレッドなライブラリを使ってる事はよくあるよ
193 :
187 :2006/01/16(月) 19:11:28
コンパイラオプションが「マルチスレッド デバッグ(/MTd)」となってます これですね! ありがとうございました
mapファイルとか、pdbファイルを自分で読めばいけるとおもう
195 :
デフォルトの名無しさん :2006/01/17(火) 02:27:57
CStringのサイズ上限はどの程度なんだろう。 だれか知ってます? ちなみにVC++.netです。
なんかINT_MAXという説があるな。 とすると2ギガくらい? だとすれば実用上問題ない大きさか。 ストリングで100メガとか超えるようなら黙ってcharでメモリ割り当てて 使いまわすわけだから。
197 :
デフォルトの名無しさん :2006/01/17(火) 07:58:14
VB6.0→C#ときてて、 そろそろ自分用2chブラウザ作ってみたいと思い、 C++のソースを拾ったんだけど、 とりあえず何て拡張子のファイル叩けば良いの? dsp dsw rc cpp ... あ、VS2003でdsp叩いたら 「変換してね。元にもどせないよ」 と出て、OK押下〜。 ここまで合ってる?
dsw
>>197 何のソース?
俺も参考にしたいから教えてくれないか
#include "zlib.h"かぁぁ。 バージョン関係ないのかな。。 今日は会社午後からにしよ。。
なんかビルドしようとすると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++じゃ文法違う?
オラが無知というのは置いといてくれ。。
追伸 構文エラー多発なのは、zlib.hの中身。 ほぼ毎行怒られてる。。 ウワー丸出しデスネ。
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時間ある。マターリやってみます。
ソース同梱のexeを実行してみたら zlib.dllじゃなくて LZ32.DLL を使ってるようだけど
>>206 いらないと思ったらコメントにしてリビルドしてみればいい。
210 :
206 :2006/01/17(火) 09:49:08
コメントアウトしてもビルド可能なんですが クラスウィザードが入れたものなので、何か訳ありなのかな?と・・・
>>211 う〜ん。それ使っても怒られます。
error C2143: 構文エラー : ';' が 'const' の前にありません。
こんなんばかり。
やっぱり環境カナーと思い、久しぶりにV6引っ張り出したら
インスコ失敗。こんなのどうやったら失敗するんだよと。
インスコ中にXPのSP2から導入された火壁ダイアログが表示され、
「ポート空けちゃいますよ?」と言われ、「ブロック」を選択したあたりから
負けていたんだ。動きおかしかったもの。
プログラムの追加と削除でアンインスコしようと思ったら一覧に表示されないし。
VB6.0のインスコ中に何のデータを送信しようってんだ。
お断りだ。
さて、
システムの復元逝ってきます。
213 :
212 :2006/01/17(火) 11:03:31
俺用メモ Windows セキュリティの重要な警告 このプログラムをブロックし続けますか? 名前 Microsoft(R)VisualStudioVSA RPC EventCreator 発行元 Microsoft Corporation ・このプログラムをブロックし続けますか? →後で決める ・JITの設定を上書きしますか? →いいえ ここで再起動求む。 再起動逝って来ます。
214 :
212 :2006/01/17(火) 11:25:10
VisualC++ 6.0インスコ正常終了
でも
>>203 とほぼ同じ状況。
違うと言えば、エラーが4行になった事。
でも全て同じ行でのエラーで、最後のエラーが「予期せぬEOFが」っていうので
きっと言ってる事は同じか。
さて、レベル低杉。
215 :
212 :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ちゃんねる。
216 :
212 :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#厨のオラにはワカラネス。
それは気にしなくていいメッセージ
218 :
212 :2006/01/17(火) 12:20:45
>>217 ありがとう。気にしない事にする。
今したいこと。
・このC++のソースから2chとの接続してるメソッドを探し、ぱくる。
・その為に全体の流れを見ておきたい。
・そこでトレースですよ。
・F11押すと「デバッグ情報がない。続行するにはOK押して」
・OK押した。
・[停止]-[混合モード]とタイトルバーに表示され、0042C6D5などメモリアドレスと思われるものが表示される。そしてF11を押すたびに全アドレスを走査。
・ワカラナス。しょうがないのでデバッグの停止
・どっかそれらしきメソッドにF9押下でブレークポイント設定。
・さて、F5押下。ブレークポイントまで飛んでけ。
・エラー「これらのブレークポイントは向こうです。実行プログラムはプログラムのはじめで停止します。
・ワカラナス。
今知りたい事。
ソースを拾った時、アプリがどこから走るかを調べる方法。
昼休みだしよろしくおながいします。
追伸
もう我慢できずに会社ずる休み。
ニートじゃないよ。
メッセージで動いてるから最初から全部追いかけるのは不可能 だからソース見て必ず通る場所にブレークかけるしかない。
>>219 ありがとう。
それらしきところにブレーク置いても
・エラー「これらのブレークポイントは向こうです。実行プログラムはプログラムのはじめで停止します。
ワカラナス。
それで始まったデバッグも[混合モード]で
ワケワカラナス。
混合モードって回避できないのかな?
何らかのエラーの為に混合モードになってる?
いやー。思いやられる。
VC++.NET2003でビルドした(リリース版)静的ライブラリをメモ帳で開いてみたらオブジェクトファイルのフルパスが入ってたんだけど、 どうしてこんなのが入ってるの?なんか気持ち悪いんだけど。
混合モードは右クリック→ソースを表示で解除
>>222 毎度ありがとう。
・右クリック→ソースを表示
をすると、
「ポンッ」て音がして解除できない。。
インフォメーションマークのメッセージボックス表示音だと思う。
超初心者以下でモウシワケナス
それビルドして実行してみたけど デバッグビルドでもソース出なくて混合モードになるな どっかいじれば直るかもしれないけど、 ひろってきたやつだからまともに動く保証はないわけだし
225 :
212 :2006/01/17(火) 14:24:44
>>224 手間とらせてしまいました。
ありがとう。
>デバッグビルドでもソース出なくて混合モードになるな
通常の動きじゃないんだ。。。。
どちらにせよ、絶対的に知識足らなくて、
迷惑かけました。ごめんなさい。
また夜に来ます。
ありがとうございました。
デ
シ
2
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 なる ものがあるらしい。
>>225 デバッグ情報が入っていない。
プロジェクトの設定でデバッグ情報ありにする。
>>229 ATLプロジェクトはCOMサーバを作るためのプロジェクト。
普通のアプリケーションを作りたければ230のとおりで合っている。
233 :
212 :2006/01/17(火) 21:25:22
>>231 メニューの[プロジェクト]→[設定]を押下し、
表示された「プロジェクトの設定ダイアログ」で、
[リンク]タブをアクティブにし、
「デバッグ情報を生成する」にチェックを入れました。
が、おなじすねぇ。
環境ムズカシス。
>>233 デバッグできた。
ソース開いてからF5かF11で起動
235 :
デフォルトの名無しさん :2006/01/18(水) 16:48:51
タイマーを使って、取得した値を1秒ずつ表示させたいのですが、 どんな関数を使えばタイマーはじつげんできるのですか?
timeGetTime
238 :
デフォルトの名無しさん :2006/01/18(水) 18:35:53
配布可能なdllの一覧って、どこで見られますか? VisualStudioをインストールしたフォルダのどこかに 在った様な・・・
拡張子txtだからすぐみつかる
VC++2005EE(無料のやつ)をインストールしたんですけど、 コンパイルの仕方すらわかりません。 そのレベルの使い方が書いてある説明書の場所を教えてください。
情報をもう少し具体的に。ソフト自体の使い方を知りたいのか、 なんのアプリ(.NETか、Win32apiか、consoleか)を作りたいのか、 C++はある程度わかるのか、何をしたいのか(目的)などで 答えはかなり変わるのでは?
243 :
241 :2006/01/18(水) 22:08:18
244 :
241 :2006/01/18(水) 22:09:59
>>242 勢いあまった・・・。
とりあえず、Win32アプリのサンプルプログラムをコンパイルしてみたいんですが・・・。
C++はわからないです。
Cを少しかじった程度なので・・・。
246 :
241 :2006/01/18(水) 22:29:31
>>245 む、コンパイラっていっつも設定がややこしいんですね。
ありがとうございます、頑張ってみます。
IEで生成したcookieの中身を見る方法ってありますか? 目標としては自分の訪れたHPで記録されているcookieの ビューワーを作りたいなんて考えてます。
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 計算処理に戻る } などのようにできるなら、やり方を教えていただけないでしょうか?
>>250 // 厳密には1秒ではないが、計算処理が充分に早ければ使い物にはなる。
for (time_t oldTime = time(NULL);;) {
//計算処理
if (oldTime != time(NULL)) {
oldTime = time(NULL);
printf("");
}
}
>>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())などのようにできるのでしょうか?
いやいや、 SetTimerはウィンドウを作成することが前提なので コンソールアプリを使うのであればあまり適さない。
256 :
241 :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とそれぞれ書き足す。
おかしい場所がないでしょうか?
お願いします。
手順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 あとはわからないね。
258 :
241 :2006/01/19(木) 08:27:27
>>257 わ、朝早くからありがとうございます。
やり方はあってたんですかね・・・?
とりあえず、帰ったらもう一回やりなおしてみます。
>>251 だからtimeGetTime使っとけって
精度msだから
260 :
259 :2006/01/19(木) 09:00:02
261 :
247 :2006/01/19(木) 12:23:22
>>248 言葉足らずでした、すいません。メモ帳で中身が見る事が可能なのは
調べてわかったのですが、指定したurlのクッキーをvisualc++で
読み込んで、キーと値のリストを出したいのです。
うろおぼえ 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 のサイト見たんだが、
なにも考えずにSQLサーバー入れてしまった。
なんかまずいんだろうか。
余計なサービスが動いていたり、HDを余計に食ったりしても 気にならないんならいいんじゃないの?
267 :
デフォルトの名無しさん :2006/01/20(金) 04:18:36
#include <iostream.h> main() { cout << "test\n"; return 0; } Visual Studio C++ 2005でこれがコンパイル通りません。 なんでだろ。
なんでって、古い規格じゃん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; } こうすればいいのか、なるほど。
すみません。雑魚みたいな質問かもしれませんが WTLとATLの関係がわかりません WTLはウインドウアプリケーションを作成するための テンプレートライブラリのようですが ATLの位置づけがよくわかりません。これもWTLと同類のものでしょうか?
ATLは基本的にはCOMクラスを作成することを目的に設計されたもの。 Window関係はちょろっと踏み込んだ程度。 別にWTL/ATLのスレがあるから、そちらにいくがよろし。
ヘッダファイルの命名規則は、〜.hと〜.hppで何か違うのでしょうか?
276 :
デフォルトの名無しさん :2006/01/20(金) 11:17:33
気持ちが違う *.h Cがスキ *.hpp C++がスキ *.hxx C++以外認めない!!
>>275 わかりやすく噛み砕いた説明どうもですw
レスありがとうございました
おっと間違い
>>277 さんありがとうございました
280 :
デフォルトの名無しさん :2006/01/20(金) 12:35:35
おまいらはやっぱりVisual C++ 2005 Express Edition買うのか?
なんでタダのもの買わなきゃなんねーだよ
282 :
デフォルトの名無しさん :2006/01/20(金) 12:46:12
>>281 5000円ぐらいで販売されるんじゃないの?
>>282 それ書籍付きのVisual Studio Express
5000円で好きな本買った方がまし
284 :
デフォルトの名無しさん :2006/01/20(金) 12:55:39
VisualStudio2003を使ってVisualC++のフォームアプリケーションを作っています。 Form2 *NewMDIChild = new Form2(); NewMDIChild->MdiParent = this; NewMDIChild->Show(); これで子ウィンドウを作ったのですが、変数を受け渡したり、 子ウィンドウの処理を親ウィンドウに反映させたりするには どうしたら良いでしょうか。
ActiveXの<PARAM>で入れた値はどうやれば取得できるのでしょうか。
>>285 あらかじめForm2クラスの中に、変数を受け渡すためのアクセサを書いておいて、
親ウインドウからそれにアクセスする。逆はダメ。
288 :
デフォルトの名無しさん :2006/01/20(金) 17:21:17
printfやCString::formatの書式指定の一覧ってどこかにありますか? int → %d float → %f char → %c __int64 → ? wchar_t → ? 下の2つが分かりません
>>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] その他の制限: なし(どこまで習っているか、標準ライブラリは使ってはいけない等々)
>>288 %fはdouble用。
可変個引数なのでfloatもdoubleに変換されているからfloatもいけるだけ。
何で完璧にテンプレに沿ったフォーマットなのに宿題スレでやらんかね?
294 :
288 :2006/01/20(金) 19:29:51
295 :
デフォルトの名無しさん :2006/01/20(金) 22:20:50
VS C++ Express2005でPSDK入ってる環境で、 新しいプロジェクトからWindowsアプリケーションをつくるとコードが生成されますね。 このコードをコンパイルしようとすると エラー1fatal error C1083: include ファイルを開けません。'windows.h': No such file or director てなメッセージが出るんですけど、これはどーゆーことなんですか?
ずばりそういうこと そこに書いてあるとおり
297 :
デフォルトの名無しさん :2006/01/20(金) 22:30:15
>>296 つまり、windows.hをどこかから引っ張ってこいと言うことですか?
具体的にどうするのか教えて欲しいです。
298 :
デフォルトの名無しさん :2006/01/20(金) 22:31:37
>>297 そんなレベルでどうやって
プログラミングしようって言うんだ・・
windows.h が無いって言われてるんだから、
SDKのディレクトリ以下を検索するとか
しようとは思わないのか?????
300 :
デフォルトの名無しさん :2006/01/20(金) 22:43:24
これコ(ヘッダファイルの類)ピーして使ってもいいもんなんですか?
パスを通しなさい。 あと、いくら初心者でも少しは自分で調べようとしなさい。 書いてあるものは、最低限読みなさい。 それができないなら、VCは難しいですよ。
302 :
デフォルトの名無しさん :2006/01/20(金) 22:56:30
303 :
286 :2006/01/20(金) 22:58:56
自分で色々調べた結果、インターフェイスに<PARAM>のNAME属性に設定した 名前と同名のプロパティを追加すればよい(合ってますか?)という事が わかりました。で、プロパティマップに追加すればHTMLから実行された時に put_処理を通って<PARAM>でセットした値を利用する事ができるらしいのですが、 どうもput_処理を通っていないようです。 他にも何かしないといけない事があるのでしょうか。
>>295 インクルードファイルのフォルダの設定が正しくなされていない。
株価を表示するようなプログラムを作りたいのですが、 CListCtrlを使えばいいのでしょうか?
株価を表すためのフォントから作られたらどうでしょうか?
308 :
デフォルトの名無しさん :2006/01/21(土) 08:22:16
Windowsゲームプログラミングの中に、 TransparentBlt()を使うためにmsimg32を設定に追加する、とあるのですが どうすればいいのですか?
>>308 リンクするLIBとしてmsimg32.libを追加すればいいだけ
310 :
308 :2006/01/21(土) 13:42:43
リンカ→コマンドラインに追加で正解ですかね? ソース自体に問題あるみたいなんで確認できてないんですけど、 Transが外部〜はでなくなりました ありがとうございました
リンカ→入力→追加の依存ファイル
>>308 HPあるんだから直接聞けばいいのに・・・・
これからプログラミングを始めようと思います。 目標はファイラー作成です。 Visual studioとその解説本・C言語の入門書を買いたいと思いますが、 オススメの本がありましたら教えてください。
314 :
デフォルトの名無しさん :2006/01/21(土) 23:04:57
>>313 が現在どのレベルなのかにもよるなぁ。
って、C言語の入門書って書いてあるってことは、
C++じゃなくてCがまだってことかな?
レベル・・・ 本屋でC言語の本を立ち読みして は〜 基本はBASIC(センター試験でもある高校数学のアレ)と一緒なんだな って思ったのが昨日ってレベルです
配列でfloatで4000*4000の二次元配列が5つ欲しいんだけど malloc使ってもうまくいかない…('・ω・`)
317 :
316 :2006/01/21(土) 23:33:42
と、途中で送ってもうたスマン これって仕様上無理なのか、それとも何か回避方法があるのか教えてください
>>317 4K*4K=16M
sizeof(float) = 4 ?
5こ
64MB*5 >300MB
スキに確保しろ、仕様上は確保できる範囲
>>318 サンクス。仕様上確保できるなら私のやり方がまちがってるっぽいね…
もうちょっと頑張って考えてみます
コンパイルでエラーが出ないってつらいなぁ
>>319 heapの領域は足りている?mallocはheap領域にメモリを確保すると
思うけど、その領域が足りていないんじゃ?
確か、linkのオプションで指定できたと思うから、
コマンドプロンプトで、link /?とかMSDNで確認してみるといいかも。
VirtualAllocとかつかうべき気もするけど、
HeapAllocって自動的に足りなくなったらVirtualAlloc呼んでくれなかったっけ?
試しにやってみたら malloc( sizeof ( float [4096][4096]) ); で13個(832M)確保できた。 (RAM+ページングが1024M)
324 :
デフォルトの名無しさん :2006/01/22(日) 06:06:35
Windows では、NEAR ポインタや FAR ポインタの区別はないんですか? Windows って、セグメントセレクタはもはや使われてなくて セグメントセレクタ固定のフラットなメモリモデルなんでしょうか? デバッガなんかでセグメントディスクリプタの内容見れますか?
C++Builderではカスタムコントロールを簡単に作成して フォームに貼り付けたりできましたが、VisualC++では これに相当する機能はないのでしょうか? ActiveXを使用するとレジストリへの登録など煩雑になるので Exeに組み込むかあるいはDLL形式だとGOODなのですが・・・
327 :
デフォルトの名無しさん :2006/01/22(日) 08:58:43
セグメントディスクリプタで実行の可否を指定できるのに なんでNXビットが必要なのかなぁ、と思って。
>>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
はじめまして。僕はプログラムに興味がある進路に悩む学生です。 僕もみなさんのように知識を持ちたいのですがどのようなところでこういう事は勉強すればよいのでしょうか?みなさんは専門学校や工業学校に行ってるんですか?それとも本などで独学しているのですか? 板違いだったらすみません。でも真剣に進路を考えています。
いま時間があるんだったら、ためしに独学でやってみれば。 それでもし自分は向いてないと思ったら違う道に進めばいい。
337 :
デフォルトの名無しさん :2006/01/22(日) 20:49:58
MFCで開発している自作アプリが保存するファイルに Excelファイルのプロパティにある「カスタム」タブを付けたい。 どうやればわからないので誰か教えてください。
多要素の配列をかんたんに0で初期化する方法はありますか? VC++では配列の初期値が0であると保障されていませんよね?
339 :
デフォルトの名無しさん :2006/01/22(日) 21:55:23
>>338 ZeroMemory(&array, capacity);
340 :
デフォルトの名無しさん :2006/01/22(日) 22:14:59
>>338 memset
(ただし1次元配列のみ)
>>338 グローバル変数・静的変数なら0初期化される。
ローカル変数ならされない。
別にVC++に限ったことではなくてANSI/ISO準拠ならどのコンパイラでも同じ。
ちなみに今のところZeroMemoryとmemsetが出てきたけどstd::fillもある。
>>341 MSのZeroMemoryの中の人はmemmset
初期化なら、 int hoge[256] = {0}; とかでもいいんじゃね?
344 :
338 :2006/01/22(日) 23:15:10
色々ありがとうございます。
>>343 結局、クラスのメンバ変数をどう初期化するかってことなんですよね。
宣言時にその書き方すれば、初期化できましたっけ?
ZeroMemoryもmemsetってことは、これらは二次元配列には使えないってことですかね?
二次元、三次元の配列を初期化したいです。
class hoge { boost::value_initialized<int> values[100][200]; }
答え出てるやん
超初心者です。 教えてください。 左オペランドと右オペランドって何ですか?
A + B Aが左オペランド、Bが右オペランド
>>348 >>347 です。有難うございました!
数学で言うところの左辺、右辺みたいな
感じでしょうか・・・?
そういえばVisual C++には関係ないな。
ポインタとか浮動小数点数をmemset()で0にして良いようになったの? (とりあえずCの範疇では駄目なのは知ってる)。
今までVC++6を使っていたのですが、VS2005を導入しました VC++6でビルドして使っていたプロジェクトのdswファイルを実行して プロジェクトを変換して2005でリビルドするときは問題ないのですが 2005でプロジェクトの新規作成をして そこに今までのソースコードを追加してビルドした場合は、 コンパイラ エラー C2664 * 番目の引数を '***' から '***' に変換できません。(新しい機能 ; ヘルプを参照) が頻発してビルドできません。 エラーが出た部分の引数をひとつずつキャストすれば解決できるのですが、数が多くて大変です・・・ どこを設定すればVC++6のプロジェクトを変換した場合のように このエラーを無視してビルドできるのでしょうか?
>>353 今までのつけが回ってきたと思って諦めろ。
変換した時にできたファイルか変更されたファイルみりゃわかる
VC++2005EEでコンソールアプリを作って遊んでいるのですが 以下のコードのようにデフォルト引数に"(Wクォーテーション)を含んだ物で intellisenseの引数ヒントやメンバ一覧などが利かなくなります。 class hogehoge{ public: hogehoge( const TCHAR* text = _T("\"") ){}; ~hogehoge(){}; }; の場合は追加情報はありませんとでて一覧が表示されません。 もしくは void hogehoge( const TCHAR* text = _T("\"") ){}; の場合は引数ヒントがでて来ません。 VCを入れ直したりncbを消したりしたのですが改善されません、うちだけの現象でしょうか? コンパイルも通るし期待したとおりの結果でプログラムも動きます。 コードがおかしいとintellisenseが利かなくなるとどこかで見たのですが、\"と言う記述はおかしいのでしょうか?
いいえ
インテリセンスに過度の期待は禁物
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に"あいう"の文字列を書き込むには、どうしたら良いでしょう?
>>361 プログラムで、最初に一度これを実行させろ。
std::locale::global(std::locale("japanese"));
これには#include <locale>が必要。
363 :
361 :2006/01/24(火) 22:16:29
364 :
デフォルトの名無しさん :2006/01/25(水) 21:14:57
現在VC++6.0Pro SP6を使っています。 いい加減PlatFormSDKを更新しようと思い、MSのサイト内を検索したのですが、『Windows 2003 Server SP1』用の奴が見つかりました。 私はサーバー用のソフトを作る事は無いんですが、これを入れればいいんでしょうか? あと、VC2005 Expressは最適化がちゃんと掛かるという事が書いてあったんですが、VC++6.0Proに比べて優秀でしょうか。 あまり代わり映えしないなら、今のままの環境で開発したいと思っているからです。 ご回答宜しくお願いします。
>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."
367 :
364 :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);
エラーでないが?
実際のテストしたソースは cs += "aiu" + "eo";//エラー とかやってない?
いや、やっていないです… ちなみにVC++6.0です… 何か原因として考えられそうなもの有りましたらご教示下さい。 ちょっと実験してみます…
質問です。 サンプル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]); 詳しい方、ご教示の程を何卒宜しくお願いします。
>>368 これはどう?
cs = (cs + "aiu") + "eo";
cs += static_cast<CString>("aiu") + "eo";
CString cs(CString("aiu") + "eo");
意味もなくコンストラクタ呼ばれて無駄
cs.Format("%s%s"), "aiu", "eo");
ユーザ定義関数内で計算をしたいのですが、 数学のように変数を使って公式に当てはめるだけじゃダメなんですか? VisualC++6.0ですが、実行したら、 左のオペランドが左辺値になっていません。と1つだけエラーがでて 実行出来ません。考えられる事は何でしょう? 右のオペランドは通ってるみたいなんですが・・・ くだらない質問かもしれませんが、超初心者なので、 どなたか教えてください。
379 :
デフォルトの名無しさん :2006/01/26(木) 10:13:18
380 :
378 :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 の値を事後に知る事はできない。
>>381 std::vectorを使わない理由は?
newを使うなら、単純にサイズを得られなかったり忘れずにdelete[]をしなければいけなかったりといったリスクを背負うのは当然なのだが。
384 :
381 :2006/01/26(木) 13:22:49
printf(); scanf(); からgets関数を使ったプログラムに変えるには どうしたら良いですか? VC++でやってみたら実引数が多すぎます。って出たのですが、 何が悪いんでしょうか?
>>373 >memDC.SelectObject(&hBMP_IN);
これ、失敗してない?
>ビットマップのフォーマットは、モノクロかデバイス コンテキストに
>互換性のあるものである必要があります。
パレットの情報とか必要だから、SetDIBits()とかSetDIBitsToDevice()を
使う必要がある場合がある。
>>385 gets()はつかっちゃいかん関数の代表なんだが。
それに、scanf()の一部機能の代用にはなるがprintf()の代用にはならんぞ。
そもそも何がしたいか判らんから、もっと具体的に書いて味噌。
>>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を選択する時 関数追加ができないんですけど どうしたらいいでしょうか?
390 :
385 :2006/01/26(木) 16:40:56
>>387 反応有難うございます。
構造体の問題で苗字を入力させて、名前を入力させて
苗字と名前を連結させて表示させるプログラムを作る問題で、
plintf();と
scanf();を使って何とか表示出来たのですが、
その次の問題で、前の問題を入力関数をgetsで表示させるプログラムを
作りなさいって問題だったんです。
gets関数でググっても387サソの言う通り、
使ってはいけませんばかりで具体的な使用例とかを
見つけられなかったので悩んでいたんです。
でも、反応して頂いたのに申し訳ないですが、自己解決しました。
有難うございました。
393 :
デフォルトの名無しさん :2006/01/26(木) 19:34:23
プリプロセッサの #using って何?
C#の#regionみたいにコードの折り畳みを設定することはできますか?
>>393 マネージドC++でDLLを参照するためのもの。
396 :
デフォルトの名無しさん :2006/01/26(木) 20:33:50
ビルドした時に can't locate file for: -lcrt1.o ってエラー表示されたけど これは何のエラーですか?
398 :
sage :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++は使ったことがありません。 どなたか、アドバイスお願いします。
>>398 そのくらい先生に聞いたら? 教えてくれないわけが無い。
>コンパイラしたいのですが >コンパイラしたいのですが >コンパイラしたいのですが >コンパイラしたいのですが >コンパイラしたいのですが >コンパイラしたいのですが
>>398 「コンパイラする」なんて技術、俺には無いからなあ。
>>398 VC++がインストールされてんだな?
で環境変数もセットされているなら、コマンドプロンプト(DOS窓)でCLコマンド
例:test.cをコンパイルしたければ
CL test.c
「こ、こんぱいら……
>>398 に、こんぱいらされてる……」
その言葉が俺の忍耐を断ち切る。
もっとコンパイラする!
404 :
sage :2006/01/26(木) 22:23:26
コンパイルですねorz 出直してきます
超低レベル質問ですみません。 int型の変数をchar*型の文字列にキャストするのってどうすればいいのでしょうか? sprintfというのを使ってみたのですが上手くいかず、 一体どうしていいものやら困ってます。 どうか御教授お願いいたします。
>>406 int n = 123;
char s[32];
sprintf(s, "%d", n);
>>407 出来ました!感動!
素早い御回答ありがとうございます!
char* s; ではダメで配列のサイズを指定しなきゃいけないんですね。
でもなんで?? まあいっか。
本当にありがとうございました。
409 :
デフォルトの名無しさん :2006/01/26(木) 23:20:27
それをキャストというのかと小一時間問いつめたい。
>>408 セイセイセイ
そこは理解しとけ・・・後々困るぞ
>409 lexical_castについてはどうお考えか。
412 :
デフォルトの名無しさん :2006/01/26(木) 23:26:21
>>410 char* sだと領域が確保されてないからsprintfでバッファに書き込めない…ってことでしょうか?
ああ、激しく的外れな悪寒……。
キャストとかも漠然とした意味しか分かってません(´・ω・`)
>>413 そこは合格
キャストはもうすこし勉強しましょう
>>414 合ってた(´∀`*) 頑張って修行してきます。
int型の変数をchar*型の文字列にキャストするのってこう? (char *)&n;
文字列を格納するのに今まではcharの配列を使っていたのですが、 サイズを動的に確保する必要があり、よりC++的だと思われるvectorで格納する事にしました。 そこで疑問なのですが、char*を引数に取るような関数にこのvectorに格納された文字列を渡す時は 結局charの配列を用意して、vectorを走査して一文字ずつコピーしてから渡す、 というようなことをしなくてはいけないのでしょうか?
vector<char> v; という変数ならば、 &v[0] でOK。 だが文字列なら、なぜ std::string を使わないの?
MFCなら、CStringArrayクラスだろ。
>>418 (char*)&v[0] じゃなくて、それでOKなんですねー。なるほど。
string使わないのはバッファとしてバイナリのデータ格納する事もあるからです(この設計は適切じゃないかも…
\0が入るとstringってそこを終端としちゃいますよね?
あれ、std:wstringなら\0入ってもOKなのかな
バッファとしてバイナリのデータ格納できますか?
ちょっとこの辺よく分かりません。ご指導希望
キャストって何なん。実は俺も良くわかってない マルチスレッドとかも良くわからない しかしゴリゴリコンパイルが通る時点で如何なるコードも良しとしてる そんなおれは業務製造担当件最近Scm担当
>>420 そういう用途ならstd::vector<char>でもいいと思うけど、std::stringにナル文字は入れられる。
空(v.empty()が真)のときはに& v[0]したらダメ。
>>422 コンパイルは結局コンパイラをごまかせば通る事もあるからキケンじゃね?
正しいコードでも通らなかった時にごまかして通すやり方もあるけど、それはあくまで正しいコードやしな。
>>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()でファイル名で指定されたファイルをバッファで読み込んだ後に そのファイルをクローズするにはどうすれば宜しいでしょうか?
427 :
417 :2006/01/28(土) 18:35:14
皆さんありがとうございました 精進します
なんで突然クローズなんだろ
429 :
デフォルトの名無しさん :2006/01/28(土) 18:48:01
>>428 OnDraw()内でReadFileを実行後、バッファのあるパラメータを参照すると
原因不明の強制終了するのです。
おそらくはファイルの構造が正常にコピーされていないのではないかと思います。
一度しか呼び出さないコードを書けばそれまでですが、
毎回読み込んでも強制終了しないコードを書いてみたいのです。
わけもわからずとりあえず書いてみた フリーので・・・・どうやってコンパールすんだこれ?
_ ∩ ( ゚∀゚)彡 コンパール!コンパール! ( ⊂彡 | | し ⌒J
>>429 OnDrawでファイルを読み込むんですか。
激しいアプリケーションですね。
コンパール作戦
434 :
デフォルトの名無しさん :2006/01/28(土) 22:41:45
>>432 Winアプリは始めたばかりでよく判らないのですが、SDIアプリにおいて
ドキュメントクラスとアプリケーションクラスはどのように使い分けするのですか?
ドキュメントはウィンドウやダイアログボックス描画に関するデータ類の整備とすれば
アプリケーションクラスは何に使うのでしょうか???
アプリケーションクラス=メインスレッド
436 :
デフォルトの名無しさん :2006/01/28(土) 22:52:29
すいません、もう一つ質問させてください。 Appクラスではコンストラクタと初期化関数しかないように見えますが、 普通のプログラムではAppクラスの関数を自分で定義して その中で記述する物なのですか? コンソールアプリに於けるメイン関数はどこに記述すれば宜しいのでしょうか?
コンストラクタと初期化関数しかないわけじゃないくて親から継承してる mainも書く必要はない
>>437 成る程。機能については判りましたが構築方法については
これまでと全然違うのでよく判らないです。
例えば何らかの数値計算の処理をして、ウィンドウに処理する場合はどうすればよいのですか?
testApp::test1()を作って、
操作上のメッセージのときに記述すれば呼び出せると言うのは判るのですが
この数値計算をtest1()で行った場合その数値データは
どのようにしてtestViewで呼び出せばよいのですか?
MFCなんてAppとWndしか使ったことねぇからよくわかんねぇけど CTestAppで結果を入れる変数をpublicなりprivateなりで持たせておいて CTestApp *pApp = (CTestApp*)AfxGetApp(); pApp->m_nResult ; みたいな感じかな?
>>439 丁寧にお答えいただき有難う御座います。
へタレで申し訳ありませんがまた質問させてください。
リソースエディタでダイアログボックスを作成しそのダイアログボックスに例えば
MyDlg と割り当て、それをアプリケーション初期化の際に表示したいのですが
資料やネットでの検索の結果、コード中で
MyDlg myDlg;
myDlg.DoModal();
のようにすれば取り合えず表示できるようなのですが、コンパイルしますと
’MyDlg’定義されていない識別子です。
のように表示されてしまいコンパイルできません。
myDlgの後ろにドットを打つとずらずらずらっとメンバが出てくるのですが、
なぜコンパイルできないのかよく判りません。
resource.h/ Resource.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++ 独自の物みたいですね。
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
ダイアログクラス間でデータのやり取りをするにはどうすればいいのでしょうか? 親ダイアログから子ダイアログを開いて、入力された値を親ダイアログで処理したいのです。 宜しくお願いいたします。
>>447 簡単に言うと、VS2005のエディタか?
>>449 そうですね、文字列の一部を選択して属性を与えたり、
属性にアクセスしたりするところが同じですね。
テキストファイルを開いて、属性つけて、
属性付きで保存して、保存したファイルを
開くとまた作業を続けられるようにしたいです。
451 :
デフォルトの名無しさん :2006/01/29(日) 17:28:05
>>450 ふむ、内部的には XML DOM で持っておくってのはどうよ?
キャレット位置と要素の対応をきちんと見ておかなきゃならんけど。
でもそれはどんな表現方法にしたって必要だし。
ファイルへのI/Oのところについて悩みたくないから。
abcdefgと言う文字列があって、 abcdに属性A、cdefに属性Bを与えたいとすると、XMLでは ちょい面倒な話になるな。
453 :
デフォルトの名無しさん :2006/01/29(日) 18:06:06
>>452 う〜むそういう入れ子構造は考えてなかった。
それやるなら、内容は wchar_t のベクターと
なんか属性を表す short か何かのベクターの
二本立てでベタに持つしかないな。
入出力フォーマットは独自で。
>>452 <A>ab</A><A><B>cd</B></A><B>ef</B>
ってなるのかな…
素直に <A>ab<B>de</A>ef</B> って書きたいところだが。。。
A + B を C として定義しとくと少し見通しがよくなるのか…?
非効率極まりないけど、そんなにC標準にこだわりたけりゃ、 #ifdef UNICODE // Unicode用のソース wchar_t c; ... #else // MBCS用のソース char c; ... #endif とでもしたら?
>>454 で、その後「d」のみ属性を解除する編集操作をしたら?
457 :
445 :2006/01/29(日) 19:27:28
>>446 吸い出すにはどの関数使えばいいんですか?
Cでは、fflush(stdin)とかgets()を使ってましたがC++でもこれでOKですか?
VC2005でインテリセンスが性能良すぎて逆にウザイんだけど、無効にすることは可能?
>>457 C++にもfflushやらgetsはあるが、
fflush(stdin)もgets()も勧められないのはCでもC++でも変わらない。
C++らしい方法の1つはstd::cin.ignore();
ignoreは入力を読み捨てる関数。
引数を与えれば指定した文字数だけ捨てたり、
特定の文字(たとえば改行文字など)までを捨てたりという指定もできる。
質問です。 Docクラスから関連するウィンドウの CDC型のポインタが欲しいのですが、 どのようにして取得すれば宜しいのでしょうか?
VisualC++6.0でラベルとリストピューのフォントを自由に変更することはできるのでしょうか?
>>462 えーと、ドキュメントは複数のビューに関連付けられることもあるから無理だ。
MFCを使ったことのないので間違っていたらすまん。
>>462 APIならGetDC()、MFCならCWnd::GetDC()とか?
ドキュメントが関連付けられているViewを知っているとは思えないので普通はView側で処理すると思うのだが。
>>463 リストビューは試したことないけど、ラベルなら(比較的)簡単にできる。
>>464 ,463
462です。どうもありがとう御座いました…
諦めて効率の悪くエレガントでないプログラムを組もうと思います。
MFCのWinプログラミングは初めてなのですが、激ムズですね…
上手く出来るようになるのか非常に不安なのですが
皆様も始めはこんな千鳥足状態だったのでしょうかね?
>>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; のようにしてもまたもやコンパイラに怒られます。何故でしょうか…?
>>468 そもそもポインタの書式を理解していないと思われる
最後の*は要らない
Visual C++のコンパイラやライブラリは使用するとして、エディタや開発環境はEclipseを使う、 ということは可能でしょうか?
>>468 charではなくTCHARを使えばよい。
char *からconst TCHAR *とかPCTSTRにでも直せばよい。
そしてソースコード全てをTCHARやTEXTを使うように直すと言う泥沼へ誘う。
474 :
デフォルトの名無しさん :2006/01/30(月) 09:16:39
C++についてでわかる人いたら教えてください! textoutで出てくるフォントの大きさ(高さ,幅)を変える関数って ありますか??
>>474 CreateFont()
SelectObject()
UNIXでいうSystem関数みたいなものはありませんか? 特定の場所にあるexeファイルを起動するものです
>>476 つ[system()]
つ[CreateProcess()]
つ[ShellExecute()]
__FILE__マクロについてですが、 展開したときにパス名も付いてきてしまいます。(例:C:\hoge\hoge.c) これをファイル名だけ(例:hoge.c)にしてくれる コンパイラオプションなどの設定はないのでしょうか?
479 :
478 :2006/01/30(月) 14:18:04
>>479 これでとくに問題ないと思うけど、日本語ファイルの場合ダメ文字でないか?
まぁ、コーディングファイルに日本語を使う方が問題な気もするけど。
strcharって2バイト文字考慮してたっけ?
自分で試せばいいのだけど面倒くさい<ダメ人間な俺orz
UNICODEで作ると2バイト文字考慮しなくて良いから楽で良い^^
でも、ライブラリとの整合性が・・・・・
strrchrだ。 死のうorz
>>480 strchrは駄目文字問題がある。
_mbschrならその心配は要らない。
さらに_tcschrではstrchr/wcschrだけでなく_mbschrへ切り替えられる。
(_MBCSが定義されていた場合)
先頭に _ (アンダーバー)が付いている関数がありますが、 これはどういう関数に付けられるのでしょうか?
環境依存、独自拡張等
>>483 下線で始まる名前は処理系予約となっている。
そのため処理系独自の関数は下線で始めている。
名前が被ることを防ぐためだね。
つまり printf と _printf は微妙に何かが違うって事でしょうか?
>>486 _printfなんてあるか?
あるとしたらリンク時の話だな。
_summer
VC6で実行したアプリケーションを起動時よりも小さくリサイズすると 勝手にスクロールバーが出てきますが、これを抑制するにはどうすれば良いのでしょうか?
C言語始めたばかりの超初心者なのですが、 実行結果が見づらいので 10文字とか20文字毎に改行したいんですけど、 どうしたら良いんですか? ググってみたけど、いまいちよく判りませんでした;;
>>490 自分でなんとかするしかないかなあ。
こんな感じの1文を表示結果の後ろに置いてみるとか。
if(++cnt>=10){printf("\n");cnt=0;}
493 :
492 :2006/01/31(火) 13:28:10
すまん問題読み間違い。 実行結果をいちど文字列に落としてから 10文字づつ表示かな。
一定文字数で改行するのは結構めんどくさい。 プリンタの改行、改ページ処理とかを作るつもりならともかく、 単にデバッグ用だったら適当なところに改行を入れるのが普通
495 :
490 :2006/01/31(火) 14:08:51
496 :
デフォルトの名無しさん :2006/01/31(火) 17:25:42
実行時エラーが発生した時に、OSがエラーの表示をする前に処理を行いたいのですが、 VBでいうOn Error Gotoみたいのありますか?
497 :
496 :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++ちゃんとやっとけ。
499 :
496 :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); }
500 :
496 :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に飛んでくれます
>>500 try{
CFileException e;
sf.Open(filename, CFile::modeWrite | CFile::modeCreate, &e);
sf.WriteString(filename);
}
>>491 出ないようにできました。ありがとうございます。
503 :
496 :2006/01/31(火) 18:09:15
>>501 先生ダメでした><;
WriteStringの場合、MFC内部でtry catchの処理をやってしまっているのでしょうか?
505 :
デフォルトの名無しさん :2006/01/31(火) 18:13:31
VC++6.0で動いていたAPIアプリケーションを初めてVC++2005に移して今まで char * だったところを100箇所以上 LPWSTR, LPCWSTR のキャストを入れ たりして、やっとコンパイルが通ったと思ったら起動しても何も起こらない。 if (!InitApp(...)) などの return FALSE; の前に MessageBox() を入れたら 文字列は英字なのに漢字だわ。しかも意味がない。どうしたら英字になります か。コンパイル時の環境設定やサンプル見たのですが、行き着けません。 (起動して何も起きないのも文字列の指定がまずいのかなと想像しています) 安直とは思いますが、教えて下さい。
>>505 VC++2005はデフォルトでUNICODEビルドになってるみたいだから、
その辺りじゃね?
>>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中にお願いします。
510 :
505 :2006/01/31(火) 22:48:57
>>506 ,
>>507 レスをありがとうございます。不審には思いましたが、先ずは
コンパイルを通して見ようとエラーメッセイジの指摘の通りに直してみました。
LPWSTR, LPCWSTR は今回挿入しただけですから、戻すには置換で取り消せると
気楽に考えていました。
UNICODE ビルドでなくするには、どうすればいいかが見つかりません。
API が ...W を参照しているので、.h ファイルを見て ...A に振るよう
#define を入れるんでしょうか。
>508,509 [回答1] ・いいえ。PlatformSDKにエディタは附属していません。 ・しかるべく処理をすれば現れます ・しかるべく処理をすれば、ID_COMBO_STYLEから、その文字列が取得できます。 エラーメッセージかどうかは表示されるコンテキストに依存しますがその様な内容には 見えません。 [回答2] ・いいえ。HTMLではありません。 ・ほかに処理すべきアプリケーションに心当たりが無ければ、テキストエディタで処理で良いです。
>513 <BR>が<BR/>でない以上、XMLとするのは無理がある
>>508-509 [1]リソーススクリプト
[2]XML,XHTMLっぽいが、<BR>タグが閉じられてないのでどうか。
ドイツやフランスやスペインの掲示板でもこれと同様の質問がされてるけど
何か流行ってんの?
G-XML?
>>510 Windowsプログラミングの鉄則
charではなくTCHARを使おう
char*ではなくLPTSTRを使おう
const char*ではなくLPCTSTRを使おう
strlen()ではなく_tcslen()を使おう
続く
TCHARと_TCHARの違いは?
>>518 >strlen()ではなく_tcslen()
lstrlen()じゃなかったっけ?
>>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;
Windowsに渡す文字列はもうUnicode固定でいいんでね?
>>520 lstrlen()はPlatform API。
_tcslen()はCランタイム関数。
lstrlen()はlstrlenA()かlstrlenW()にマクロ置換される。
_tcslen()はstrlen()かwcslen()にマクロ置換される。
CRTのwの付き方は異常
>>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)
文字列多すぎ LPTSTR LPCTSTR TCHAR BSTR CString string OleChar wchar_t
すみません、VB6とVB,net がインストールされているPCに、 Visual Studio 2005 Professional も一緒にインストールできますか。 日経ソフトウェアに付いていたいたのでぜひ入れたいのだが…
TCHARもwchar_tも、文字列じゃねー
肉系はProfessional付けてくれるの?買いに行かなきゃ。
>>526 LPTSTRとLPCTSTRとTCHARは基本的に同じものだが。
あとCComBSTRとか_bstr_tとかはいいの?w
すいません VC6でプログラミングしてるんですが、ファイルが保存できないと警告が でるだけでなく、たまに消してもないのにソースが消えてしまうのは いったい何なんでしょうか。。?
>>532 ありがとうございます。
ウィルスに感染してる様子もないしウィルスチェックしても何にもかからないんですけど
ウイルスなんでしょうか・・
とりあえず仕様ではないんですね。
消してもいないのにソースが消えるのが仕様かも、と思える精神構造に学術的興味を感じる。
>>533 それ俺も体験したことある。IDEでファイルを保存しようとすると、
「ファイルを保存できません。ファイルが他のアプリケーションで使用されている可能性があります。」
とかメッセージが出て、そのファイルがあるはずのフォルダを見ると消えている。
(すばやくフォルダに切り替えると、いきなりファイルが消える瞬間を目撃できる。}
原因は不明だが一旦OSを再インストールして
怪しいアプリをインストールしないようにしたら発生しなくなった。
>>535 そう、そんなメッセージでてきてました。
原因不明で不快で不快で仕方ないんですが・・・
最善策は再インストールしかないという事でしょうか。
537 :
510,505 :2006/02/01(水) 00:44:19
UNICODE を使わない設定をプロパティに見つけて、LPWSTR, LPCWSTR を置換して
コンパイルしたら起動できるようになりました。
で、ここへ来たら、
>>511 さんのレスがありました。
これからは
>>518 さんの言われる通りでしょうが、まずは移植ということで。
ありがとうございました。
ダイアログで落ちるところが出たのでこれからその追求です。fopen(), sprintf()
などでも warning があるし。
そのファイルを他のアプリで開いたりしていないの? 複数のアプリが絡んだ話だとインストールしなおしだけでは無理じゃ?
539 :
537,510,505 :2006/02/01(水) 08:32:53
>>538 ご指摘ありがとうございます。「輪郭抽出」でぐぐると出てくる実験プログラムを
これまで win98, VC++6.0 で作って使っていたもの。スタンドアロンです。
ま、あるとしても ShellExecute() から位。しかし unicode に変えないと
いけないでしょう。これから勉強です。
また質問したときは教えて下さい。
別にほかのアプリで開くも何も VCしか開いてないときでも保存しようとすると 警告文が出て保存できない場合があるんです
Visual Studio って原則的に1プロジェクト1 main みたいなんですが、 1プロジェクトにたくさん main をおく。もしくはプロジェクト抜きでソースを コンパイルするとかってできますか? あと、プロジェクト毎にプロパティからコンパイル時にリンクする ライブラリを追加することになっているっぽいのですが、 せっかくソリューションというまとまりがあるわけだし、全体に追加できないのですかね? Visual Studio 2005 です。 小さい1ファイル程度の実行プログラムを大量に(具体的には画像フィルタ) 作ろうなんてしているのですが、今のところ一つのためにプロジェクト作って いちいちリンクさせるライブラリをコピペして、なんてやってます。 UNIX 環境でばかり開発してきたからよくわからんですばい。 どなたかよろしくおね
542 :
541 :2006/02/01(水) 10:06:29
あ、ついでにもうひとつ。 プロジェクトの名前を変えても、実際のローカルにあるファイル、フォルダ名が変わってないのですが、 プロジェクトの名前変更をそれらにも反映させるにはどうすればよろしいでしょう?
>>542 Solutionに複数のProjectを作れ。
UNIX慣れてるならmakefile作ってnmakeで良いんじゃない
>>543 その状態です。ソリューションを選んでプロパティを開くとリンカの項目がありません。
>.544
あえて Windows での開発にも慣れておきたいです。
(VCインスコフォルダ)\VCProjectDefaults\CoreWin.vcstyle ここに自分がよく使うlibを追加しとけばWin32を選ぶと自動的にlibが追加されるようになる。
547 :
デフォルトの名無しさん :2006/02/01(水) 11:58:03
>>544 漏れ、不完全ながらもポータビリティのチェックのために
cygwin つかって GNU make & g++ でビルドするプロジェクトも作ってる。
ただ残念なことに、g++ のエラーメッセージやワーニングの
フォーマットが cl のそれと違うので、エラー箇所に即ジャンプ、
というわけにはいかないのが悲しい。
>>546 トン。GUIからできるようにはなってないわけですか。ふむふむ。
ちょっと状況と質問追加。例えばマスクフィルタの mask.cpp と mask.h を作っておくと、
それを利用して、平均フィルタ、ラプラシアンフィルタ、ソベルフィルタ、
をちょちょちょいと作れるんですが、
やっぱり、3つプロジェクト作らざるを得ないですよね?
その際に mask.cpp, mask.h をその3つにコピーせざるをえない?
>>540 まだ全体がよく分からないのですが、VC++2005からのデバッグ、ShellExecute()
からの起動、単体での起動で、.txt, .jpg, .bmp の保存、読み込みは異常が出て
いません。名前をつけて保存は試していません。ご指摘は何か起きたとき助かり
ます。ありがとうございました。
ところで、link map を取るにはどこで指定するんでしょうか。それともない?
>>548 いったい何を作ってるの?
ライブラリ?それとも一つ一つが実行ファイルなの?
ぶっちゃけ開発手法そのものをミスってる悪寒。
>>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 必須。
>>537 fopenとかで出ているwarningってもしかして、C4996じゃない?
古い云々言われるやつ。
ヘルプとかを見た感じMS独自拡張な気がするから無視(無効)してるんだけど問題なし?
>今後のために慣れておきたいのでできればこのGUIを使いたいのです。 いちいちプロジェクト作るのめんどくさいと思うのは お前が慣れてないからだ
VCだけってわけじゃないけど、 アプリケーションの外見を変える スキンの実装ってどうやる? ただ画像はっつけるだけかなー?
556 :
549,537 :2006/02/01(水) 17:31:20
>>553 そうそれ。うるさいから変えてやろうとしたけどサンプル見てもよくわからないん
でそのまま。この(実験)プログラムは SDI で複数のファイルの内容を同時に
表示できないんで、読み込み記録を取って起動時その記録を見てメニューに積んで
クリックで指定のファイルを読むように急場しのぎでくっつけたものなんで、
煩いから、API に変えようと思います。
余談ながら、ユーザ登録しろと煩いんで、パスワードもあるんで登録したけど
まだ吹き出しが出てくる。
>>553 なんで fopen_s(), sprintf_s() なのか見たら、fopen_s() は file pointer を
引数に入れて err no. を返すようになった。sprintf_s() は第2引数に書き込み
領域の長さを入れるようになった。_s は security の意。
ま、安全には違いない。書き換えて試した。
link map を取る方法が分かって取ってみたら、"CIL" ってのがある。
.obj name が取れないと困るアプリが他にある。なんとか汁だ。
引き続きすみません。教えて下さい。 char, char * で書いてあるアプリを UNICODE 対応にしようと思いますが、 1.char -> _TCHAR に換える。 2.暗黙の内に1バイトで文字列の長さを扱っているところを sizeof(_TCHAR) 倍にする。 3.テキストファイルの読み込み、書き出しで UNICODE への変換、UNICODE から の変換を行う。 4.リソース・ファイルを含め、定数文字列を _T() で囲む。 5.でコンパイルする。 ってところでしょうか。
>>558 基本的にそれでいいけど、
「文字コードの変換は必要最小限にする」努力も忘れずに。
ライブラリをリンクする時、1でも2でもできるみたいだけど どう使いわければいいんでしょうか? 1.libファイルをプロジェクトに追加 2.プロジェクトの設定(〔リンク〕タブ)でリンクするlibファイルを指定
WinXP + VC++.NET でプログラムを作っているのですが、 LINK2022 メタデータの操作に失敗しました というエラーが出てリンクできませんでした。 typedef struct _MAP { char MAPEXT[3]; (以下略) とう構造体を変更した場合にエラーが出るようなのですが、 配列を2以下にした場合はエラーが出ず、3以上にすると出るようです。 原因はなんなのでしょうか? どなたか教えてください。
>>559 お教え頂きありがとうございます。そのように致します。
またよろしくお願い致します。
DelphiでいうTListっぽく使えるのってvectorでおk? 思ったよりC++って具合良いのね
このスレでDelphiだされても、よくわからないと思うんだが・・・
ものすごく基本的なことなんですけど、 C言語とかの関数ってwindow.hとかd3dx9.hとかを読み込んで どの関数を使うか決めるんですよね? で、そのヘッダーファイル?を読み込んだときに使える関数のリファレンスって 日本語でどこかにまとめて書いてないでしょうか? どのヘッダーファイルを読み込んだらこの関数が使える というふうに載ってるとありがたいんですが。 PHPとかActionscriptとかはリファレンス本があるんですが CとかC++のリファレンス本は無いようなので。
>>565 MSDN Library
ただし関数名などからそれに必要なヘッダが書いてあるという具合。
ちなみにCやC++の標準関数なら本もいろいろとある。
567 :
デフォルトの名無しさん :2006/02/04(土) 08:46:05
どうしようもなく迷子になったときには grep 最強、という噂もある。 Google Desktop Search とかって ソースファイルも食ってくれる?
>>567 もちろんソースファイルやヘッダーも検索の対象だけど、
大抵のものは自分で書いたソースやサンプルばかりひっかかって、
肝心のPratform SDKのヘッダーが出てこないと言う罠。
それにWinAPIの関数ならwin***.hで宣言されているけど、
windows.hをインクルードしてねと言うものが殆どだから
WinAPIに関してはどのヘッダーが必要なのかを知る必要性をあまり感じない。
569 :
565 :2006/02/04(土) 09:41:39
ありがとうございます。 MSDN Library 情報がいっぱいあってどこに何が書いてあるか解らない orz さすがC言語一筋縄ではいかない。 近場の本屋にはなかったのでアキバ(ザコン)でも行ってこようかと思います。 はやくエディタとかさくっと作れるぐらいになりたい。
570 :
デフォルトの名無しさん :2006/02/04(土) 19:24:18
初心者ならVistaが出るまでVC++は控えたほうがいいと思う。 今のVC++は仕様が不安定すぎるから。 本格的な本職プログラマを目指しているのならば、JavaとC言語がある。 まずはそっちをやってみて状況を見据えた上でC++を始めたらいいでしょう。
>>570 今さら「C++じゃなくてC」とか言われたってなぁ。
C++が難しいってんなら、Javaがあるし。
C++じゃないCなんて覚えても、もう役に立たん。
いや、C++はやる価値あってもVC++がだめぽ
>>572 VC++のどこが「仕様が不安定」なんだ
ひょっとしてC++/CLIの事を言ってるのか
俺VCしか使ったことないから分かんないんだけど、 何に比べて不安定なの?
577 :
デフォルトの名無しさん :2006/02/04(土) 22:18:48
マネージドC++捨てたじゃん 不安定だわ
>>578 それと「Visual C++の仕様の安定性」とどう関係あるの?
/clrを使わなきゃいいだけじゃん。
C++/CLIとC++を混同してる人ですか?
あなたは自分と他人を混同してますね
ぼくに与えられた ぼくの一日を ぼくが生きるのを ぼくは拒む ・・・・・違うな。反省。
581 :
デフォルトの名無しさん :2006/02/05(日) 00:29:50
Visual C++で関数ごとに「実行回数」「実行時間」「平均実行時間」を計測する 機能は提供されていますか? 提供されているとすれば、どのバージョン、グレード(スタンダードやExpressではないなど) を教えてもらえると助かります。
プロファイラってどのグレードだっけ。 2005だとProでも付いてなかったキガス
Enterprize級(Team Suite Team System, ..)のみの機能。 2005には未対応だがまだICC買ったほうがマシかな。 自分の書いたコードのプロファイリングならRDTSCとかグローバル変数で永続性のあるカウンタを表現するとか いろいろ手はあるよな。 突き詰めた最適化やるならICCのほうがいい。I 最終的な生成物はAMDのCPUでも十分高速に動く。
585 :
582 :2006/02/05(日) 02:14:25
>>585 俺は去年のキャンペーンで16万で入手したw
587 :
581 :2006/02/05(日) 02:26:09
589 :
562 :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); }
Win9xにはW系APIが殆ど実装されてないから。 UNICODEでコンパイルするのを諦めるか、MSLUでも使っとけ。
ダイアログ作ってその中でリストコントロール貼り付けてるんですが、 そのリスト内だけ別のフォント(固定ピッチ?)にしたいんですが この場合CreateFontで論理フォントつくってSETFONTで送ってやるんでしょうか? 普通はどうしてるのかな…
>>590 レスをありがとうございます。win98 でコンパイルしたものを winXP に
持っていって起動したら動きました。
LastError = 131 が返って来て、FormatMessage() もダンマリで、MSDN に
bug report がないかと探したのですが、何もない。
win95 での UNICODE サンプルがあるので、win98 ではできるかと期待しま
した。
>>591 で、実際に自分で手を動かして何かやってみたのかい?
vc++で指定したURLのクッキー情報を読み出すにはどうすればよいでしょうか?
WinInetでよければ
596 :
デフォルトの名無しさん :2006/02/06(月) 21:16:12
質問です。 POINT構造体の、原点からの距離の絶対値を簡単に求める関数って無いでしょうか…? √(A.x^2 + A.y^2) としても良いのですが、プログラムコードが長くなってしまいますので…
>>596 √(A.x^2 + A.y^2)を行うインライン関数を自分で作ればいいだけだろ。
598 :
デフォルトの名無しさん :2006/02/06(月) 21:48:21
CRTってのはMS製のCの標準ライブラリってことで良いんでしょうか? あと、MSDNC++の標準ライブラリのリファレンスが英語しかないんですけど 日本語のリファレンスってないですか?
CRTはC RunTimeの略であってMS製という意味は特に込められていない。
確かにC++のリファレンスはほとんど使わないしな よく使うAPI方面を充実させて欲しいね
601 :
デフォルトの名無しさん :2006/02/06(月) 22:06:20
VC8なんですがctrl+hにbackspaceを割り当てるにはどうすればいいでしょうか? キーバインディング設定見てみたけどそれらしいものがありません。 てかコマンドのリストが大きくできなくて見づらい・・
C++のほうは名前の正しい綴りや引数の順番を知りたいことが多いから、 俺は英語でも気にしない。そこにあるプロトタイプ宣言は結局C++言語なんだから。
>>601 いま探したら簡単に見つかったから教えてやんない
605 :
デフォルトの名無しさん :2006/02/06(月) 22:48:18
プログラム以前の質問で申し訳ありませんが、 Visual C++ 2005 Express Editionの設定情報は どこにあるのでしょうか? インストール時にマイドキュメント内に 自動的にできるフォルダを削除して アンインストール→再インストールしましたが 間違えて設定した状態で起動してしまいます。 具体的には下部ウィンドウにデフォルトであったものを間違えて消してしまったり 「出力」ウィンドウをソースプログラムのある箇所に移動させたまま 下部ウィンドウに戻すことができなくなっており、 メニューからの戻し方が不明な状態です。 厨な質問であることは重々承知しております。 どなたかご教授いただけたら幸いです。
606 :
デフォルトの名無しさん :2006/02/06(月) 22:48:41
__declspec(align(16))はクラスのメンバ変数に使えますか? グローバル変数に使うと正常に動作しますが、メンバ変数に 使うとどうもエラーになってしまいます。
>>606 どんなエラーが出るのかを書くことをオススメする。
俺も昔エラーが出て困ったことがあったが君と同じ状況かわからないから書けん。
>>607-608 ありがとうございます。
SSEを使おうとしているんですが、グローバル変数に
__descspec(align(16)) char buffer[256];と書くとOKで、
メンバ変数に同じ書き方をすると、不正なメモリアクセスエラーに
なってしまいます。
>>609 普通に出来るなぁ。
再現する最小コードキボン。
それならこちらのコードが悪いんでしょうから、もう一度色々いじってみます。 どうもありがとうございました。
612 :
デフォルトの名無しさん :2006/02/07(火) 00:31:45
初めて質問させていただきます。よろしくお願いします。 MFCで書かれたサンプルプログラムがいまいちよく理解できないのでAPIに書き直すという作業をしています。 そこで、関数を置きなおすときに、MFCにおけるダイアログボックスを初期化するUpdateData()関数をAPIで書き換えたいのですがAPIにおいてどのような関数を使ったらよいのでしょうか? どなたか分かる方がいらっしゃいましたら教えてください。 よろしくお願いします。
>>609 俺も普通にできるけど
__m128iをクラスメンバに設定できる?そこ重要。
余談だけどclassだとデータの並びが解りにくいんで、おいらは構造体と操作関数で実装してあとでC++でラップしてる。
>>612 ダイアログの初期化でしょ?
WM_INITDIALOGで処理かな。
>classだとデータの並びが解りにくいんで、おいらは構造体 いつからクラスと構造体は違うものになったんだ?
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++も付いてくるんですよね?
いいえ
620 :
デフォルトの名無しさん :2006/02/07(火) 02:45:28
>>619 え〜そうだったか?
Visual Studio .NET 2003 でも
Visual Studio 2005 でも
普通にネイティブアプリが作れるけど。
そういうこと言ってるんじゃないの?
新参者ですがよろしくおねがいします いま高校生なんですがC言語を本気で勉強したいと思っています みなさんは最初C言語をどのようにして勉強したんですか? やはり専門学校や独学でしょうか? 自分は身近にC言語が分かる人もいないし 高校生の身なので専門学校にも行けないし(お金も無い) なので本を買い独学で勉強をしようと思って本屋に行ったのですが どれも分厚い本ばかりでどれを買ってよいのか分かりませんでした どなたか入門にはお勧めの本など教えていただけないでしょうか? どうかよろしくお願いいたします
>617 delete p;では、hoge[0]のデストラクタしか呼ばれない。
623 :
617 :2006/02/07(火) 09:09:05
>>622 おーなるほど。
ありがとうございます。
でも、なんでそんな作りになってるんだろう?
そんなことC++スレで聞けばいいのに
>>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とはなんでしょうか? 自分で調べてもバージョンが違うとどうのこうのしかわからなくて、 結局のところの対策がわかりません。 お願いします。
VC6のプロジェクトを2005で開けば2005用に作り直されるはずだけど どういうふうにビルドしたんだ?
>>621 入門書なら何でも良いと思うが、本屋で最初のほうを立ち読みして
理解できると思ったものを選ぶと良いんじゃないかと。
>>626 なるほどそんな経緯があるのですか。
他にもいろいろあるけど、
>>624 の言うとおり Visual C++ な話でもないので、C++スレ行ってきます。
ありがとう。
>>621 >>629 のやり方がいいと思うが、自分の場合「用語」で苦労した。
コンピュータ用語辞典、C言語辞典、アルゴリズム事典とかは手許にあると
いいと思う。
632 :
デフォルトの名無しさん :2006/02/08(水) 19:10:46
VC8のエディタのタブについて質問です。 [tab]キーの設定は「タブを挿入」にしてるんですが以下のような場合にタブが挿入されません int(ここで[tab]を打つ) num; こういう時に[tab]を打っただけタブを挿入させるにはどうすればいいでしょうか?
Visual C++ .NETのソースプログラムって Visual Studio 2005 C++ではコンパイル出来ないんですか? 教えてください(人∀・)タノンマス
Visual C++ 2005 Express Edition で Windows アプリケーションは作れる?
636 :
デフォルトの名無しさん :2006/02/09(木) 01:31:53
当然作れる
>>627 本当に調べた?ググッて一番最初に出てくる、Microsoftの
FAQにlibcp.libがなんだか書いてあるけど。
638 :
592 :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(私設)を設定して書き分けた。
>>638 最新のPlatform SDKを入れたVC6環境やVC7で既に、MFCのクラスの一部や、
CArrayのインデックス値等テンプレート内で、INT_PTR は使われているよ。
おまえらの言ってることはちっともわからん。
641 :
638 :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ではまだダイアログが開く前に計算が開始してしまい、 最後の"終了"の部分が終わってからやっとダイアログが開きます。。。 どうしたら良いんでしょうか。
OnTimerとかOnIdleでちまちま計算するとか、 マルチスレッドにして同期に苦しめられるか。
>>643 >>644 やっている計算や、ダイアログ自体は、本当にものすごくシンプルなので、
できるだけ単純に書きたかったんですが…
やはりモーダレスあるいはマルチスレッドにしないと無理なんでしょうか?
なんか馬鹿馬鹿しくて。。。
モードレスにして、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
>>647 ライブラリのパスを通していないなど単純な手違いだと予想。
すみません、VC++6.0使用している方、VC++6.0をインストールした直後のコンパイルオプションを 教えて頂けませんでしょうか。 会社でVC6使用していて、この度VS2005EEを自宅のPCにインストールしたのですが、 設定がわからずデバッグ等がうまくいかずに困ってます。 よろしくお願い致します。
>>649 VC++6とVC++8(VS2005)の一番の違いはUnicodeを使用する設定になっているかどうか。
いろいろとコンパイルエラーになるのだったらまずはそこを見直してみろ。
【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で過去の仕様に戻せました。
653 :
デフォルトの名無しさん :2006/02/10(金) 04:54:17
質問です。 CStringなりchar*なりを用いて、変化する文字列を作りたいのですが どのようにすればよいでしょうか? 具体的には、カウンタの番号を文字列化して予め定めた特定の文字列 の後ろにつけた物を生成したいのです。 例えば、count = 0〜300として、 output000.txt output001.txt 〜 ... output299.txt output300.txt としたいのです。 どのようにすれば宜しいでしょうか?困り果てております...
CString str ; str.Format("output%03d.txt", count) ;
655 :
デフォルトの名無しさん :2006/02/10(金) 05:39:28
ここはC相談室じゃねえでよ
>>656 だからこそ、CStringなんじゃないの?
>>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);
}
ワーカスレッドからはCWndに触れなかった気がする。 生のhWndでトライ。あと、SendMessageはデッドロックの危険もあるので、 せめて、SendMessageTimeoutなど使うように。
660 :
デフォルトの名無しさん :2006/02/10(金) 13:34:17
VisualC++6.0なのですが、プロジェクトを作る時、MFC(exe)にしてそのあとは「次へ」だけのデフォルトのワークスペースを作りました。 そこでCのみのプログラムを書いてコンパイルしたら実行結果が出る黒いウィンドウと描画結果の白いウィンドウが出ますよね。 そこで質問なのですが、そうやって描画された図形を切り取ってファイルに保存することはできますか? 教えてください!
できる
またお前か
Cの質問じゃないなと思いつつ。 [Alt]+[PrintScreen]で、そのアクティブなウインドウが [Ctrl]+[Alt]+[PrintScreen]で全画面がクリップボードにコピーされる。 あとはペイントでも好きなように。 ダメ?
VCってRADなのですか?
666 :
デフォルトの名無しさん :2006/02/10(金) 14:18:20
コーディング主体と存じております
>>659 色々調べてみたのですが、生のhWndでトライというのが分かりません。
DDXを使用してメンバ変数をダイアログに反映させているのですが
それではダメなんでしょうか。
多分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とかも自分で書いて てきとーだけどこんな感じ
>>668 ありがとうございました!!無事に思い通りの結果になりました!
初めてスレッドというものを使ってみて、色々躓いていたのですが、ようやく先へ進めます。
このスレに来て良かったです。本当にありがとうございました。
670 :
デフォルトの名無しさん :2006/02/10(金) 16:13:13
TRACE使ってるんですが、マルチバイト文字を出力するにはどうすれば良いでしょうか? TRACE(_T"012あいう"); とやると、出力ウインドウには、「012」とだけ表示されます・・・
2003のMSDN見るとLPCSTRになってるから TRACE("012あいう"); でいいんじゃないの? 2005は知らない、変数がunicodeの場合の出力も知らない。
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); } }
↑ ですが、ちなみにincludeしたファイルは #include "stdafx.h" #include "Data.h" #include "DataDlg.h" #include <fstream> #include <sstream> #include <afxdlgs.h> using namespace std; です
m_sEditは何? CString ? while(fin.getline(buf,80)){ CString str = buf ; m_sEdit = m_sEdit + str + "\r\n"; }
m_sEdit + buf + "\r\n"; char型であるbufは、こんな事出来ない
676 :
672 :2006/02/10(金) 18:04:24
どうもです >>m_sEditは何? CString ? はいCStringです >>char型であるbufは、こんな事出来ない そうなんですかとしか、言えないのですが どうしたらいいのでしょうか?
>>676 >>674 に書いてる
解説するとCStringはcharから代入できる。
CString(CStringT)のヘルプをみると
コンストラクタで
CStringT(
LPCSTR pszSrc
);
とかあるし、operator =で
CThisString& operator=(
char ch
);
とかある。
678 :
672 :2006/02/10(金) 18:25:07
Unicodeがもんだいじゃねーだろーね。
680 :
672 :2006/02/10(金) 18:33:50
失礼しました 第6章ファイル処理とデータ表示のP50でした
いや、一応C++。
>>679 が言うようにUnicodeじゃね?
と思ったんだが、
AfxMessageBox("初めてのメッセージ?");
はエラーにならないのか?
UNICODEの問題だったらstd::ifstreamの代わりにstd::basic_ifstream<TCHAR>にすればいいよ。 openメンバはそれでも仕方が無いけど。
685 :
672 :2006/02/10(金) 23:27:09
みなさんどうもです >>UNICODEの問題だったら UNICODEの問題の意味が分かりませんスマソ >>AfxMessageBox("初めてのメッセージ?"); AfxMessageBoxは自力でafx_msgを発見して置き換えたら成功しました
686 :
デフォルトの名無しさん :2006/02/11(土) 00:09:42
>>686 wsock32.libとか、ws2_32.libとかそんなライブラリを。
688 :
デフォルトの名無しさん :2006/02/11(土) 03:34:31
質問です。 double 型をTextOutする時に 2.5222e-002とかになって困ってしまいます。 0.0***のように表記させるにはどうすれば宜しいでしょうか?
>>672 こう書けば?
( m_sEdit += buf ) += "\r\n";
>>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ではコンパイルが通らない。
ちなみに、CString::operator=とかCString::operator+=は const char*とかを引数にとるオーバーライドがあるので、 CString str; str = buf; m_sEdit = m_sEdit + str; これとか m_sEdit += buf; これとかは普通にコンパイル通る。
692 :
672 :2006/02/11(土) 08:17:12
>>689-691 さん
どうもです、コンパイル通らなくて小20時間
遂に、コンパイル成功、Unicode問題も理解できました
ありがとうございました
ε-(´∀`*)ホッ
693 :
672 :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); }
>str = str + "\r\n" + str1;↓ >str = (str += "\r\n") += str1; 工エエェェ(´д`)、そこは、 str += "\r\n" str += str1; と処理すべきだろー。つか、副作用完了点が……
>>694 演算子多重定義されているから副作用完了点は今回関係ない。
697 :
672 :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]);
やっぱりUnicodeが原因か。
名前の欄に672入れるとなんか、コテっぽくって他に質問したい方々や 回答待ちの方に申し訳ないので入れませんが672です(_ _)(礼) Visualu Studio 2005 C++ではとにかく変数を明確に扱かわないと、コンパイルが 通らないものと考えた方が好いという事がよく分かりました 私のような中途半端なC言語の知識だと痛い目を見ますね 会社で簡単なWIN32APIの実装を頼まれてC++に挑んでいるのですが 簡単な様で、結構難しいものです、これから本屋に行って、良書を探してきます 皆さん本当に<(_ _)>ございました
>>672 のNETで見つけたソースが糞すぎるから捨てた方がいいよ
ウンコいじりはやめよう
わざわざ行にわける必要がなかったら1回で全部読めばいいのに
以前 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を仕掛けて、 デストラクタが呼び出されているのは、確認したのですが、 どうしてでしょうか・・・?
焦るな
706 :
デフォルトの名無しさん :2006/02/11(土) 14:14:55
正直かなり悩んでます。。 せっかくゲームが動いたのに…途中で落ちちゃって…。
deleteしたらデストラクタが呼ばれるのは当然だが、 メモリは次のnewなどに備えて 内部で確保された状態のままになっていることが多い。
708 :
デフォルトの名無しさん :2006/02/11(土) 14:38:42
>>707 回答ありがとうございますm(_ _)m
その場合だとやはり、たくさんnewしてたらいつかは落ちますよね?
どうすれば内部で確保されたままのメモリを解放できますか?
709 :
デフォルトの名無しさん :2006/02/11(土) 14:40:43
>>708 気にするな。
必要になったらOSが回収してくれる。
710 :
704 :2006/02/11(土) 15:57:34
自己解決しました。 if(Object){ delete Object; Object = NULL; } としていたのですが、ifを取り除くことで改善できました。
それはおかしい
delete内でNULLチェックしてくれるからifなくてもいいのは正しい。 newのメモリ確保はVC環境内で高速化のためプールしているので OSからみるとdeleteのタイミングでは解放されない。 自前のnew/deleteを定義し、その内部で直接APIを呼べば改善される。 …が、激遅になる。
711はifを無くしたところ改善するのが変だ言っているのであって NULLをdeleteすること自体がおかしいと指摘している訳ではないと思う。
>>713 ,.,.,.,.,.,.,.,.,__
,,;f::::::::::::::::::::::ヽ
i::::::::/'" ̄ ̄ヾi
|:::::::| ,,,,,_ ,,,,,,|
|r-==( 。);( 。)
( ヽ :::__)..:: }
,____/ヽ ー== ; ほほう それでそれで?
r'"ヽ t、 \___ !
/ 、、i ヽ__,,/
/ ヽノ j , j |ヽ
|⌒`'、__ / / /r |
{  ̄''ー-、,,_,ヘ^ |
ゝ-,,,_____)--、j
/ \__ /
| "'ー‐‐---''
715 :
デフォルトの名無しさん :2006/02/11(土) 16:56:16
716 :
660 :2006/02/11(土) 19:04:07
>>663 回答ありがとうございます(^^)
でもダメでした。
VC++の本を読むとプログラムを実行した時左上にMFCのマークがついたウィンドウが出ているのですが、私の場合はコマンドプロンプトが出るんです。それがおかしいのでしょうか?
>>716 コンソールアプリのプロジェクトでMFCサポートを有効にしてるんじゃないだろうな?
>>716 >でもダメでした。
画面に表示されるものはスクリーンショットで必ず取れるはずだが。
(マウスカーソルとDicectX以外)
課題:文字列の挿入 文字列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;
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++
zを初期化しろ
723 :
647です :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 ライブラリのパスを通していないなど単純な手違いだと予想。
>ライブラリのパスは通してます。
環境変数PATHに設定してるとか言うオチだな。
725 :
647です :2006/02/11(土) 23:34:30
726 :
647です :2006/02/11(土) 23:51:42
あはw解決しました。すんませn
2005C++です コマンドラインから/clrオプション付けてコンパイルしたいのですが 多分DOS窓でやるのだと思うのですが、どうやったらいいのデツカ 具体的に教えてもらえたらうれしいのですが
728 :
デフォルトの名無しさん :2006/02/12(日) 00:54:27
下記のようにあらかじめいくつかのロケールに合わせて用意した文字列を コンパイル時に切替えるにはどうすればいいんでしょうか 日本語 -> "こんにちは" 英語 -> "Hello"
>>728 コンパイル時にロケールもなにもなかろうに。
自分でプリプロセッサシンボル決めて#ifdefで切り替えるしかなくね?
実行時ならやりようがあるが。
#define JAPANESE 1 #define ENGLISH 2 #define ・・・ #define LANGUAGE JAPANESE #if LANGUAGE==JAPANESE LPTSTR hello="こんにちは"; #elif LANGUAGE==ENGLISH LPTSTR hello="Hello"; #elif ・・・ #endif
>>729 , 730
ありがとうございます。マクロで解決することにしました。
>>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
}
へんなやつ
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 の仰っている事が気になるのですが、こうすればよいと言う方法がありましたら
よろしくお願いいたします。
>>736 ハァ?
そんなレベルの話だったの?
そんでもってマルチ?舐めるなよ。
会社(VisualStudio2003.net使用)でやってた仕事を家でやろうと 思ったけれど、家のVisualC 6.0ではソリューションファイルってのが 開けない・・・ ってか、毎回この手んおファイル形式が変わりますな・・・ このソリューションファイルをワークスペースファイルに変換って 出来ないんでしょうか? 構成がでか過ぎるので自分で作るのも面倒だし、 ちなみにVisualC++.netでもソリューションファイルに変更されたんですか? 素直にVisualC++.net買うか・・・
739 :
デフォルトの名無しさん :2006/02/12(日) 10:54:40
ソリューションープロジェクトの構成は慣れればそれなりに便利。 ソリューションエクスプローラの中で プロジェクト名変更したら、 ファイルシステム嬢でのプロジェクトフォルダの名前も 変更してくれれば便利なのにな。
OSはWinXP、開発ソフトはVisual C++2005 Express Editionです。 二つの自作関数Draw()とRead()を用意し、Read()でビットマップを読み込み、 Draw()でDIBで描画するというプログラムを作っているのですが、詰まってしまいました…… ファイル名・バッファ・BITMAPINFOHEADER・BITMAPFILEHEADERのポインタをRead()側に渡し、 Read側でGlobalAllocしてメモリ確保、ReadFileでバッファにデータを読み込みます。 Draw側ではそのバッファをSetDIBitsToDeviceで描画するという形を取っているのですが、 バッファにデータが読み込まれてないのか、空のデータが描画されてしまいます。 ただ、試しに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); }
>>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);
}
Draw()のlpInfo,lpFileの実体がない。おそらく BITMAPINFOHEADER lpInfo; とすべき。あるいは LPBITMAPINFOHEADER * ppInfo; としてRead()でアロケートする。もっともRead()なんかやめて LoadImage(,,,LR_CREATEDIBSECTION); するのが最適とおもうが。
VC++とMFCは別物と分かるのに 小三日、いつかはMFCとVC++のコラボレーションで スーパープロジェクト、コードネームUkraineが完成するものと 信じていたのに。 ゚(*゚´∀`゚)゚ノ彡☆ギャハハ八八ノヽノヽノヽノ \ / \/ \ DIALOGにEdit ContorolやBottunを貼り付けて、ちょこちょこっとC++で コードを書いて、ぽちっとコンパイルすればプログラムが完成すると思った香具師は 漏れだけデツカーッ(゚Д゚≡゚д゚) Ukraineが完成するのはいつに日やら┐(´д`)┌ヤレヤレ
747 :
デフォルトの名無しさん :2006/02/12(日) 17:50:28
質問です。 コンボボックスの文字列を、エディットで変更できないようにできないでしょうか。 つまり、▼で選択は可能、エディット上で変更は不可能、という状態にしたいです。
749 :
747 :2006/02/12(日) 18:00:34
>>748 ありがとうございます。できればやり方をご教授お願いします。
>>749 Typeプロパティをドロップダウンリストにします。
>>740 サンクス。
早速試して無事プロジェクトファイルは出来たんだけど、
他の問題でエラーでまくり・・・
あまりに多いんで、潰していく前に力尽きました。
ExpressEditionってのも試したけど、
windows.hすらないんですけど・・・
>>751 Expressは別途PlatformSDKを入手する必要があります
753 :
sage :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 ](); こう書くとテーブルの定義でエラーになってしまいます。
static? うーーん。よくわかりません。 詳しく教えていただきたいのですが・・・・
すみません。 実際やりたい事は void (* func[])(void) = { xxx.aaa, yyy.ccc, zzz.bbb, }; のように別のクラスの関数にジャンプさせたいんです。
>Expressは別途PlatformSDKを入手する必要があります 動いた。 ありがとん。 いやーなんで最初から入れないんすかね。 なんにせよincludeやlibの設定と偉く面倒かった。
初心者に必要ない機能は抜いてあります。
確か、規定でもPlatformSDKというパスそのものは設定されていたはずなので、 そこにPSDKをインストールすれば、includeやlibの設定は要らなかったはず。
>>753 MSDNか何かで静的メンバ関数をしらべよう。
そもそもなにか無理なことをしようとしてる希ガス。
MFCのメッセージハンドラのようなことをするなら別の方法に考よう。
>>756 class xxx {
static void aaa() ;
} ;
void (* func[])(void) = {
xxx::aaa,
・・・
} ;
じゃないか?
staticのメンバー関数は機能が制限されるけど。
C++的にはこのような関数テーブル使わずに仮想関数で
どうにかしろ、という意見が多いと思うが。
762 :
747 :2006/02/12(日) 20:35:40
>>750 返事が遅れましたが、ありがとうございます。
>>756 staticでない関数以外は、複数のクラスの関数を
1つの関数ポインタ配列に格納するのは無理。
void*の配列でも使わない限りね。
関数ポインタのサイズがsizeof(void*)より大きかったらどうすんのさ
正直スマンカッタ
つboost::function
質問です 自前で画像付きボタンのコントロールを作ろうと思い、(MFCの)CWndクラスを継承して作ることにしました。 このボタンは100〜1000個程並べる予定です。 エクスプローラの「縮小」時のようなサムネイル表示ビューを作りたいのです。(CListViewは使わないつもりです。) CWndを継承するのはマウスのヒットテストやボタンの移動等が楽になる事を主に期待してのことです。 しかし、コントロールがある数を超えると急に重たくなってくるという記事を、どこかで読んで気になりました。 このように子ウィンドウを沢山使うやり方は何か問題があるでしょうか?
768 :
741 :2006/02/13(月) 04:17:03
>>743-744 遅れましたがレスありがとうございました。しかも素早いレスで非常に感謝してます。
ただ、Draw()側でlpInfoの中身(biBitCountなど)を表示して確認してみたところ、
lpInfoの中にはちゃんとデータが入っているようでした。
となるとlpBufが戻り値として帰ってきていない(Allocしたアドレスを
参照できていない?)ようで、色々と試してみたのですが、
結局上手く取得することが出来ませんでした。
(あげくに不正なアドレスを参照したり、メモリーリークが多発と…orz)
教わったLoadImageを利用して、DIBセクションを利用する方法も考えてみようと思います。
>>767 要するに子ウインドウたくさん作ってそれぞれ別の画像を貼り付けるんだよね
ブラクラみたいなもんだな
最近のOSはOSごと落ちることはないと思うけど
全角数字を半角に直すには如何すればいいんでしょうか? str.Replace(”0”,"0"); str.Replace(”1”,"1"); str.Replace(”2”,"2"); って一個ずつ置換していくのはなんだかスマートじゃないな〜と 思いつつ、ドウスレバいいのか判らん超初心者です。
VC++6.0でCRichEditViewで文字を選択した時の背景色は変えられないのでしょうか?
>>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流にやるほうが効率いいけど。
>>770 WinAPIならFoldStringがある。
すいません、質問です。 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日以上経過で保障期間外。
こいつはくっせーー
ゲロ以下の臭いがプンプンするぜーーっ!
vc++の実習があったのですが、課題が解けないので教えてください SDIでOnDrow(CDC *pDC)にmyDL.DoModal();でダイアログを呼び出して そのダイアログのokボタンを押すとSDIのウインドウに「okが押されました」と表示させたいのですが ボタンを押したと認識するためにはどこの関数に書き込めばいいですか? 一応ダイアログは表示します。 書き込むソースは int ret; if(ret==IDOK){ //retはダイアログからの戻り値 mydc.TextOut(0,0,"okがクリックされました"); } こんなかんじです
ボタンってダイアログのOKボタン?
>>774 お前古いDirectXSDK入れてVS2003から乗換えてるんじゃないか?
もしくはそれに似た状況だと予想されるんだが。
includeフォルダの検索順でDXSDKの順番をPlatformSDKより下げてみ?
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(); }
782 :
781 :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()もないのですが、どうすれば良いんでしょうか。
>>781 ビットマップ(DIB)ファイルの読み込みはそんなに簡単じゃないよ。
file.Read(&BMP_F,sizeof(BITMAPFILEHEADER));
の後、BMP_F.bfSizeの値から残りのデータを読み込むようにして、
BITMAPFILEHEADERやBITMAPINFOHEADERの情報から
パレットのアドレスやビット情報のアドレスを求める必要がある。
BITMAPINFOHEADERのbiBitCountとかでパレットのサイズが変わったりするから。
この辺の情報はぐぐれば見つかるはず。
>>783 開発環境がよくわからない。
言語は? C++, C# ?
プロジェクトの作成のときにWindowsアプリケーションにしたの?
>>783 CWinApp::ExitInstanceをオーバーライドして値を返す
787 :
デフォルトの名無しさん :2006/02/14(火) 15:22:40
>>784 わかりやすいご返答、ありがとうございました。
789 :
778 :2006/02/14(火) 16:13:45
>>789 ダイアログのOKボタン、ダブルクリックするとイベントハンドラ(関数)が作成されるから、
そこにゴニョゴニョ書け
多分、やりたいのは、こっち↓だろうけど
int ret = myDL.DoModal();
if(ret==IDOK){ //retはダイアログからの戻り値
mydc.TextOut(0,0,"okがクリックされました");
}
>>783 他のツールとは?
WinAPIが使えるのならGetExitCodeProcess。
792 :
781 :2006/02/14(火) 19:13:37
ごめんなさい。再び質問させて下さい。 例えば 0000005A〜00000102のデータを ある場所に配列として代入したい時、 どのようにしてこのバイナリのアドレスを指定及び操作できますか? それとも出来ないのでしょうか・・・夢見すぎかも。
>>792 先ずは、「0000005A〜00000102のデータ」とは何のことか聞こうか。
それより、「ある場所に」ってのが何なのか知りたい。
795 :
789 :2006/02/14(火) 19:59:19
>>790 ありがとうございます、再び質問しつれいですが
追加の課題でそのダイアログから式を選択して「OK」を押すと計算した数値をわたして
グラフを描けというふうなのが出てしまったんですがOKをいじるだけでもできますか?
ESP能力を最大限に発揮して、念写してみた。 メインのウィンドウからダイアログを開く。 開いたダイアログは、計算式の選択などを行う操作ダイアログ。 ダイアログのOKを押すことでメインウィンドウに結果を反映させる。 これをやりたいのだろう。
VC++でgcc -E -dM hoge.cみたいなことはできませんか?
>>797 そうです、文法へたですみませんでしたw。
>>799 OKをいじるだけではできないんじゃないか?
グラフを描画する必要があるなら、それも書かないとね。
(どこに描画ルーチンを入れるかによるかもしれないけど)
>>800 うーん、まぁなんとかがんばってみます。
無理と悟ったらまたききにきますので、よろしくお願いします<(_ _)>
>>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言語スレあたりでポインタとかで質問するよろし。
>>802 おなかすいたので空けてみました、これでなんとかできそうですよw
いやーありがとうござあいます。
806 :
デフォルトの名無しさん :2006/02/15(水) 14:17:40
VC 2005 EE でゲーム作っています。 シーン引継ぎの際、PopScene()にて delete m_pSceneStack[m_iCurrentScene] としているのですが、シーンのデストラクタが呼ばれず、 メモリリークしてしまいます。deleteなのにどうして呼ばれてないのでしょうか?
m_pSceneStack の宣言のところと new してるところはどう書いてるの?
ソース1行からクラス定義を透視するエスパーの降臨きぼん。
809 :
806 :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 はちゃんと追加してるの?
エスパーと似非パーの会話が飛び交ってて 一般人の漏れには訳が分からんスレだ……
つ[ヒント] で解決したのは自己解決というのか?
814 :
デフォルトの名無しさん :2006/02/15(水) 23:27:55
static_cast<T> などの新しいキャストの記述ではなく 旧来のキャストの記述を使用しているときに 警告を出すようにするオプションはありませんか?
スレ違いの際は誘導お願いします。 通信相手のMACアドレスを指定して、Ether接続させたいのですができるのでしょうか。 もしあるのなら、どのような方法でしょうか。 WinSocket(?)とかだと、IPアドレスとポートが必要ですよね。 RARPとかは全然違うっぽいし…。 参考になるサイトとかでもいいので、知っていたら教えてください。
816 :
デフォルトの名無しさん :2006/02/16(木) 00:05:30
WinSock2でも、Layer2レベルの通信は直接ハンドリング不可。 ドライバかかなきゃ、イー差フレームのハンドリングはできんぞなっと。
817 :
デフォルトの名無しさん :2006/02/16(木) 00:17:49
WinPcap ライブラリを使う
819 :
815 :2006/02/16(木) 00:29:28
早速の回答ありがとうございます。
ちょっと言葉が足りなかったのですが、Ether接続用のドライバに機能追加することになったんです。
>>817 さん、
>>818 さんのレスの内容を明日調べてみます。
820 :
デフォルトの名無しさん :2006/02/16(木) 00:34:19
ちょっと質問です。 アドレスを整数値として読み込むとき、今まで DWORD にキャストしていました。 が、2005 のデフォルトのオプションでは 64bit 対策を考慮し、警告を出すようになっています。 64bit 対策としては、どんな型で受け取るべきでしょうか。 BYTE-WORD-DWORD のさらに上のようなものが標準で定義されているのでしょうか?
UINT_PTRとかLRESULTとかWPALAMとかLPARAMとか
size_t ssize_t ptrdiff_t
#include <stddef.h> intptr_t uintptr_t ptrdiff_t size_t
ダイアログベースでアプリを作成し AfxBeginThread()で スレッドA,Bを作成しました。 今までは3スレッド共に単独で動作させていたのですが スレッドAがデータを受信した際に スレッドBに連絡したいケースが出てきました。 この場合のスレッドAからBへの連絡手段を教えていただきたいです。 自分にはグローバル変数をBがずっと監視するくらいしか思いつきません。。
スレッドBは待っているだけならWaitForSingleObject
フォームのどこをクリックしても移動できるようにするにはどうすればいいんですか?
>>827 WM_LBUTTONDOWN/WM_LBUTTONUPをひっかけて、それぞれWM_NCLBUTTONDOWN/WM_NCLBUTTONUPを発行。
private: System::Void Form1_MouseDown(System::Object * sender, System::Windows::Forms::MouseEventArgs * e) { ReleaseCapture(); SendMessage(Form1->hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0); } };
以下のような状況になり困っています。 何かヒントをお持ちの方がいらっしゃいましたらご教示願います。また、スレ違いの場合は誘導願えませんでしょうか。 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++です。
取り敢えず全部大文字はうざいぞ、と。
それよりもCLSIDが99999999-9999-9999-9999-999999999999というのが事実ならそっちのほうがずっと醜い。
EditBoxなくたってWM_KEYDOWNは発生するだろ
834 :
830 :2006/02/16(木) 19:04:47
>>831 タグに大文字と小文字が混じっていたので一括で大文字に変更してしまいました。
>>832 CLSIDは実際の値を記さないように9並びにしてしまいました。
>>833 何故このような事をしたいかと言いますと、現時点での自前のEditBox上で例えばF7キーを押しても親に伝わりません。
それをどうにかしようと、押されたキーをそのまま親に返すようなソースを書いたのですが、思い通りに親にメッセージが飛ばなかったのが始まりです。
835 :
830 :2006/02/16(木) 21:46:48
解決しました。IEのバージョンが原因でした。 IE5 -> NG IE6 -> OK でした。 お騒がせしました。
OpenMPは使えますか?
VC++2005なら使えます。
IMMを無効にする為にImmDisableIMEを使いたいのですが imm32.libをリンクしてimm.hをインクルードしているにも関わらず 定義されていない識別子ですとエラーが出ます 関数名を入力した後に bool ImmDisableIME(DWORD) のように 補助表示が出るのにエラーになるのは何故なのでしょうか?
ライブラリは関係なさそうなあれだけど あれだな
補完はdb見てるからエラーと関係ない
841 :
838 :2006/02/17(金) 22:55:30
HWND hImeWnd = ImmGetDefaultIMEWnd(hWnd); DestroyWindow(hImeWnd); の荒業で非表示にできたのですが、今度は入力文字列が取得できなくなりましたorz デフォルトの文字入力を消しつつ日本語入力の文字列を取得するにはどうすれば良いのでしょうか?
ImmDisableIME
843 :
838 :2006/02/17(金) 23:07:38
他のImm系の関数は使えるし imm.hの中覗いてもちゃんとあるし なぜだーーーOTL
まさか・・・ #if (WINVER >= 0x040A) BOOL WINAPI ImmDisableIME(IN DWORD);
846 :
デフォルトの名無しさん :2006/02/18(土) 12:44:29
VB2005 C++だす × String str = "Hello"; ○ String ^str = "Hello"; いちち^付けないといけないみたいですね、 ^ってどういう意味よ?
847 :
デフォルトの名無しさん :2006/02/18(土) 12:51:58
ミリ秒取得する関数って何だっけ。至急頼む。
そんなの急に言われても、ミリ
849 :
847 :2006/02/18(土) 13:00:30
事故解決
DWORD timeGetTime()
だった。
>>848 ちょっと心が和んだw
850 :
846 :2006/02/18(土) 13:16:37
× VB2005 C++ ○ VS2005 C++ (Visual Studio 2005 C++)
>>846 それ、(純粋な)C++じゃないから。C++/CLIかManagedC++か知らんけど、該当スレで聞いてみたら?
2003のMFCを2005expressで使えるか試した人いますか?
>>852 '`ィ (゚д゚)/
散々な目に会いました
VC++6.0で最近使ったファイルが1個も無いと 2番目、3番目以降の「最近使ったファイル」が表示されてしまうのですが どうしたら良いでしょうか?
>>853 えっ、散々な目にあうとは、どうなってしまうのですか?
856 :
854 :2006/02/18(土) 22:12:39
自己解決 最近使ったファイルはメニューに1個だけ追加すれば良いんですね くだらない質問失礼いたしました。
素人考え&個人的に興味があるんだが、 >815のやつ、相手のMACアドレスからIPアドレスを取得すればいいんでないの? 自分でフレーム作らなくてもよさそうだけど。 最初の1回だけ相手のMACアドレスから相手のIPアドレスを取得する方法があれば解決だよね。 そんな方法があるのかどうか知らんが。 あったっけ?
コペルニクス級の馬鹿
859 :
838 :2006/02/18(土) 23:09:31
>>844 >>845 使えるようになりました。ありがとうございます。
使えるようにはなったのですが、文字列の取得もできなくなりましたorz
ウーン
ImmDisableIME(-1);//引数( 0 )も試しました
hImc = ImmCreateContext( );
ImmSetOpenStatus(hImc, true);
860 :
838 :2006/02/18(土) 23:48:58
ちなみに ImmCreateContextの戻り値を調べたらNULLでした…
rarpがどうかしたって? どっちにしろルータは超えられない。
>>859 そりゃそうだ。IMEを無効(Disable)にしたんだから使えるわけが無い。
>デフォルトの文字入力を消しつつ日本語入力の文字列を取得する ってのがいまいち不明。
>>863 ウィンドウの左上に勝手に変換中の文字が表示されるやつです
もしかして、フル画面アプリで文字入力の際にIMEのツールバーを 表示させたくないだけだったりして。 ゲームでたまにある名前入力とか。
すまん的外した。
WM_PAINが呼ばれるごとにIMEウィンドウを非アクティブにする荒業で なんとかなりました
お世話になっています。
質問自体は既出(
>>178 )なのですが、自分も同じ疑問があるので再出させていただきます。
フックの勉強の一環として、コードをインジェクトする方法を色々学んでいます。
すでにDLLインジェクトはやりました。
現在、単一ファイル(exe)で同様のことに挑戦できないかな、と思っています。
(勉強が目的なので必要性などは度外視です)
自exe内の小さな関数(C++)をターゲットプロセスに書き込んでCreateRemoteThread() あるいは
SetThreadContext() による EIP 変更で走らせようとしています。
IATを読んでAPIを即値呼び出しに変える、EVAを読んでオフセットを修正する、
.data/.rdataの情報は全て別個にコピーする、など、そのへんは行っているつもりです。
問題はやはり、
>>178 さんの質問された、関数そのもののサイズの取得です
VirtualAllocEx() でどれだけ確保すればよいのか。
現在は自分の関数をシーケンシャルサーチしてretをマッチすることで把握していますが、
美しくないなーと思うのと、条件分岐次第でコンパイラの最適化とかでretが複数入ることは
ないのかしら、というあたりで不安です。
先生方、クールな解決法教えてくださいませ(;´Д`)人
869 :
868 :2006/02/19(日) 12:23:34
ごめんなさい書き忘れました。 もちろん、「動的に」知りたい、という意味です。
コードが動的にできるならともかく(それなら、自分がコードを生成したわけだから 当然サイズはわかるわな)、コンパイルしたコードはそこで決定されるわけだから、 やっぱりmapファイルとか、pdbファイルとかを食わせた方が早いとおもう。
>>870 「ビルド後のイベント」でmapファイルを(perlとかで適当に)処理して関数のサイズを
即値で記述したヘッダファイルを生成させて、もういっかいビルド、とかそんな感じでしょうか
やっぱりそうしたほうが手っ取り早いですよね(´・ω・`)
872 :
デフォルトの名無しさん :2006/02/22(水) 13:25:45
vc++2005で作ったdllをエクセルとかで使う場合も、COMが必要なんでしょうか?
>>872 ただのDLLでも平気。
VBAからはDeclareで宣言すればよい。
ワークシート上でも読み込む方法があった気がしなくも無い。
>>873 そうなんですか。ありがとう。
c#で作ったやつはcomする必要があったので
c++もそうなのかと思いますた。
もちろんただの関数を公開ときだけだよ。 クラスの形で使わせたければ、やっぱりCOMしかないからな。
>>875 わかりました。
早速VC2005EEをdlして朝鮮してみます。
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 が発生してしまいます。 通常のメンバ関数であれば、問題なく引数の省略はできていました。 何か、コンストラクタ特有の制約があるのでしょうか?
879 :
878 :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 ) { ・・・(省略)・・・ } 宜しくお願いします。
>>879 そのHogeを使うソースがHoge.cpp内でなければそのデフォルト引き数を知り得ない。
881 :
878 :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 */ )
{
・・・(省略)・・・
}
とすれば、よさそうです。
const string p1はconst string & p1にでもしておいた方が無難なきもす。
いままでVB6.0使ってたんですけど a=b*2 って書くと a = b * 2 ってスペースが自動で挿入されてましたが、 C++.netでは、こういうのは自動でできませんか? もしくは、自動じゃないほうが便利な場合があるのでしょうか? ホントに超初心者な質問ですみません。
自動じゃない方が便利。 スペース入れる入れないもコーディング規約に含む企業もあるくらいだし。
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じゃねぇの?
>>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 の可視化ツール だったもので。
890 :
885 :2006/02/25(土) 14:00:15
どうやらcorewin_express.vspropsの書き換えが出来ていなかったようです。 それをしたらコンパイルできるようになりました。 解答ありがとうございました。
>>888 その中から選ばないといけないならAPI直打ち。
.NETが流行ることがあっても、APIは使えるだろう。
wxWidgetやGTKを使うってのも一つの方法。
ラッパークラスを作って、APIの変更はそこで吸収ってのもあり。
っていうか、VSで作らないといけないの?UNIXベースなら
colinuxやCygwinがあるからそっちの方がいいように思うが。
892 :
891 :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業界(?)の最近のトレンドを知らないもので、 これからならどれ?と思った。
895 :
891 :2006/02/25(土) 15:16:43
>>893 、894
おまいさんも大変だね〜
でもそれだったら、windowsだけで完結してないとまずいよな。
腐れ仕事っぽいから、.NETで楽した方がいいかもね。
.NETがポシャったら、MSのせいだから契約のPRになるしw
MSは.NET普及に力いれてるみたいだから、ちょうどいいよ。
.NETはC#との相性が一番いいんじゃないかな。
>>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を明示的に宣言しなければいけないというエラーが 出るんですが、どうすれば明示的に宣言できるのでしょうか?
VS.NET 2003 を使っているのか VS 2005 を使っているのか それが問題だ。って、そういうメッセージが出るのは前者か。
899 :
デフォルトの名無しさん :2006/02/25(土) 18:13:00
>>898 .net2003を使っています。
今までc/c++のコンソールアプリを勉強してきましたが、
最近奮起してGUIの勉強を始めたばかりです。
Managed (Extended) C++ をいまさら使うのはどうかと思う。
901 :
897 :2006/02/25(土) 18:29:54
他に何かよいものはありますか?
なんで GUI 作りたい→そうだ Managed C++ だ! になるのか分からん。MFC とかでいいじゃん。
904 :
897 :2006/02/25(土) 18:49:07
C++/CLIを使うためには.net2005を新たに購入する必要があるのでしょうか? 最近.net2003を買ったばかりなのですが...
マネージドC++は事実上廃止されました。 Visual C++ 2005では前項のマネージドC++が整理され、C++/CLIという名が与えられた。 マネージドC++は従来のC++に独自拡張としてCLR用のキーワードと構文を導入していたが、 C++/CLIではその枠を超えC++ではなくC++/CLI言語という位置付けなのである。 ただしVisual C++ 2005では互換性のため 従来のマネージドC++のソースコードもコンパイルできる。
C++/CLIなら無料のVisual C++ 2005 Express Editon
>>906 デザイナとかはついてたっけ? Express Edition
もしついてたら、それでおkだな。
でも C# でもいいような気がしないでもない。
って、そりゃ C++ で GUI っていう
>>901 の目的と外れてるか。
そもそも C++/CLI ですら C++ ではないわけだしなぁ。
★初心者に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); }
またか・・・また C++/CLI なのか・・・・ どうすれば、って、std::ofstream を使うのか fopen() をつかうのか System::File を使うのかで違うだろ・・・
912 :
910 :2006/02/25(土) 19:48:48
std::ofstreamでオナガイシマス ( `・ω・´)ノヨロシクー
>>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あたりで呼べばいいと思う。
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 で 書き込むコードは上の通りで動くよ。
915 :
914 :2006/02/25(土) 20:56:22
なんでおれわざわざ std::wstring にしてるんだろ。
916 :
914 :2006/02/25(土) 20:57:17
が〜ん、
>>913 がシンプルに書いてるじゃないか。
オレのコードは忘れてくれ、見んな。
917 :
910 :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 先生のコードは完璧でした。
918 :
914 :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;
}
919 :
914 :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); } こっちはアンマネージドなヒープに一度コピーを作る方法なので、 ピンニングは必要なし。
920 :
910 :2006/02/25(土) 22:10:33
(´ε`;)ウーン…
>>914 先生ノ
テキストボックスに123と入れてボタン押すと00AA07F8となったり00AA0384
になったり、hoge.txtの内容がランダムになります( ゚д゚)ポカーン
>>919 Ansiだからwofstreamを使う必要はないと思う。
922 :
910 :2006/02/25(土) 22:15:10
>>914 先生ノ
(´ε`;)ウーン…
919のコードはコンパイルできますが、hoge.txtが空デツ
923 :
914 :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);
}
924 :
910 :2006/02/25(土) 22:39:33
>>914 先生
>>913 先生
<ノ丶`Д´>ノ マンセー
ヽ(´ー`)ノマンセー
923のコード成功シマスタ
925 :
910 :2006/02/25(土) 22:47:15
先生質問なのですが IntPtr int_ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text->ToString()); この部分ですが、textBox1から受け取った変数の型を int型からString型に変換していると理解していいですか?
926 :
914 :2006/02/25(土) 22:56:58
>>925 ちがう
textBox1->Text->ToString() が返すのは
String 型のオブジェクトへの参照
それを受け取って StringToGHlobalAnsi が返すのは
アンマネージドヒープにコピーしたブツへの「ポインタ」。
この「ポインタ」はアンマネージドヒープ内を指すための
特別な「ポインタ」で、IntPtr 型。
IntPtr 型のオブジェクト int_ptr から void* を
取り出すのが int_ptr.ToPointer()
これ、実際には void* じゃなくて char* だから、
static_cast でキャストしてる。
927 :
914 :2006/02/25(土) 22:57:57
すまん、参照ってのは言葉のあや。 C++ でいうところのいわゆる参照じゃなくて、 なんつーか、リファレンス? 訳すとやっぱり参照か。ややこしいな。
928 :
910 :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;
>>929 エラー出てんの?
for文だけ見ると、問題ないんだけど
VCは確か初期化されてない変数から代入すると止まる(デバッグ版)から
b[0]〜b[4]のどれかが、初期化されてないままなんじゃね?
b[5] = {0};でどうよ?
>>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 */
}
932 :
929 :2006/02/26(日) 00:17:41
>>930 bに全部0入れてもエラーでるんですよね
>>931 ありがとうございます。やってみます。
あと、さっきので、、変数名かえ間違えてました。
すみませんでした。
mainと関数でほんとは変数名違うのでやってました。
〜〜〜〜訂正main.cpp〜〜〜〜〜
c= (int*)malloc(sizeof(int) * 5);
*c = hogehoge(hogee);
>>929 誰も突っ込まないので突っ込んでおくが、
return *a;
これじゃポインタaの内容が返るから、 ポインタは返らないよ。a にしなきゃ。
んで、
int *c = (int *)malloc(sizeof(int) * 5);// cをint型のポインタで宣言。ついでに先頭アドレスで初期化。
c = hogehoge(hogee);// *を取る
ってやって、c[3]とかやれば使えるんじゃない?
ややこしい計算=b[g]; ここ逆でしょ。
935 :
929 :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;
}
>>935 典型的なメモリリークパターンです。0から勉強しなおしては如何でしょう。
もしかして
>>929 は仕事でコードを書いているんだろうか。
だとすると恐ろしい世の中だ。
938 :
935 :2006/02/26(日) 03:53:01
>>937 いあいあ、仕事じゃないです
学校の課題です
>return *a;をreturn a;にするとコンパイルエラーが出るんですよね。 君、面白いなぁ。
940 :
935 :2006/02/26(日) 03:58:47
>>939 すみません、解説していただけないでしょうか?
941 :
914 :2006/02/26(日) 04:02:35
main() でも malloc している。 hogehoge() でも malloc している。 何をしたいんでしょうか? main() で malloc したメモリ領域に 結果を書き込みたいんじゃないんですか?
int *hogehoge(double *hogee){
にすればいいけど、
>>931 の方がいいだろう。
943 :
935 :2006/02/26(日) 06:53:13
とにかく、リターンで複数の値を返したいだけなのです。 配列で返せればいいけど、ダメなので、わからないなりにポインタとか使ったんですが、本当にわかりません。 もうちょっと勉強してみます。
class A{ public: void hoge1(): void hoge2(): void hoge3(): }; 上のようなクラスを継承するときに hoge1以外を隠す方法は無いでしょうか?
>>943 関数への値渡し、アドレス渡し辺りを勉強すればすぐわかると思う
946 :
943 :2006/02/26(日) 08:08:07
>>944 逆にhoge1だけを見せるということなら、できる。
class Bar : private A
{
public:
using A::hoge1;
};
948 :
910 :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);
}
949 :
946 :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;
}
int hogehoge ( double *hoge , int *a ); じゃなくて int hogehoge ( double hoge , int *a ); だろ。
>>944 インターフェイスが変わるなら継承では無いんじゃない?
class B
{
public:
void hoge1(){
a.hoge1();
}
private:
A a;
}
952 :
910 :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("文字数が多い"); }
>>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 が呼ばれないかもしれないから。
954 :
949 :2006/02/26(日) 09:47:46
>>950 現在過去のプログラムを改変する作業なのですが、過去のプログラムはメインで
double hoge[5]; こんな感じでして、*hogeじゃないと動作しませんでした。
説明不足ですみませんでした
955 :
910 :2006/02/26(日) 09:59:11
>>953 さんありがとうございます
Text->Lengthに着目したのは間違いでは無かったようなので
少しは嬉しかったです、しかし
>>953 さんのコードに入れ替えてコンパイルしてみたのですが
16桁以上入力して、実行しても
MessageBox::Show("文字数が少ない");
が実行されてしまいます。
>>955 まちがえてた。
if(textBox1->Text->Length > 16)
だった。
それにしても、C++/CLI だと -> が一杯出てくるね。
958 :
944 :2006/02/26(日) 10:23:15
>>954 横レス。
プロトタイプ宣言のところはちゃんと書き換えた?
おそらくヘッダーのほうに書いてるんだろうけど。
960 :
949 :2006/02/26(日) 10:32:48
>>959 ありがとうございます
おもいきり忘れてました
コンパイル通りました
961 :
910 :2006/02/26(日) 10:36:34
>>956 さん
ありがとうございます
巧くいきました、
textBox1->Text->Lengthに気づかなかった自分が情けないです
(;´д`)トホホ…
>>918 ベースの方が安全かもしれない。というのは
>>例外で抜けたときに FreeCoTaskMem が呼ばれないかもしれないから。
自分も
>>918 のコードの方がとっつき易く思えたのですが、
実行するとhoge.txtに入力した文字ではなく桁数が異なる、
ランダムな数字が入ってしまって、原因が分からないので
(´・ω・`)ガッカリ…なとこなんです。
>>961 え〜
wchar_t がらみだとは思うけど、
ちゃんと wofstream とか、ワイド文字版にしてる?
963 :
949 :2006/02/26(日) 10:41:22
動作確認しました スレ汚しすみませんでした また 付き合ってくれた皆様ありがとうございました
964 :
910 :2006/02/26(日) 11:07:24
>>962 さん
どうもです
ワイド文字版で具具ってみましたが
意味は分かったものの具体的にどうしたらよいのかわかんないので
コンパイルオプションを
プロジェクトのプロパティーの全般タグで
文字セットを「Uniucode 文字セットを使う」から
「マルチバイト文字セットを仕様する」に変更してコンパイルし直しましたが
変わりません・・・
wofstreamは多分ここの部分だと思いますが同じようにしています
↓
std::wofstream wofs("hoge.txt");
普段はMFC使ってるので、Windows API 直での
GUIの勉強もしてみようと思って
http://www.kumei.ne.jp/c_lang/ で勉強してるんだけど、
「当ホーム・ページの一部または全部を無断で
複写、複製、転載あるいはコンピュータ等の
ファイルに保存することを禁じます」
って・・・・ファイルに保存できないなんて、
サンプルプログラムどうやって試せばいいんだろう。
って、悩んでます。
>>965 メールでも出して許可もらえばいいんじゃね?
サンプルを自分のPCで試す程度なら私的利用の範囲内
>>966 そうします。
閲覧時にキャッシュしてるのはどうしたらいいんだろう・・・
969 :
913 :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 で日本語名のファイルが開けないんだけど、俺だけ?
971 :
910 :2006/02/26(日) 14:31:05
>>969 さん
どうもです
ここで
pin_ptr<const wchar_t> text = PtrToStringChars(textBox1->Text);
↓
Error C3861: 'PtrToStringChars': 識別子が見つかりませんでした
が出るんで、wchar_t PtrToStringCharsとかしたら、wchar_tは宣言するなとか
困憊羅が言ってきます
PtrToStringChars って、 Visual Studio 2005 では見つからないんだけど、 もしかして .NET Framework 1.1 限定なのかな。 ってそんな下位互換性無いことはさすがにないかな。
975 :
910 :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コードを入力してね」が出てしまうのですが、正規表現の書き方間違ってますか?
その右辺はどーみても単なるCの式だろ。
977 :
910 :2006/02/26(日) 19:24:04
>>976 さん
そうなんですか、やっぱりCとは違うんですね
>>975 チェックするということはどうせ16進法として数値へ変換するんだろ。
俺ならstd::strtoulで変換すると同時に変換できたかどうかチェックする。
979 :
デフォルトの名無しさん :2006/02/26(日) 21:07:02
VC6でEditBoxからint値を取得する関数は何でしょうか?
>>979 関数つうかapiだけどSendMessage
APIの関数でGetDlgItemIntはどうだ。
982 :
910 :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 *' に変換できません。(新しい機能 ; ヘルプを参照)
になっちゃうんだよね( ゚д゚)ポカーン
984 :
910 :2006/02/27(月) 01:16:46
>>983 さん
どうもです
前段で、教えて貰ったように
pin_ptr<const wchar_t> text = PtrToStringChars(textBox1->Text);
を入れて入るんですが・・・
しかし超初心者用の話題とかなり上級者 (C++/CLI使うやつは上級者だろ?という先入観あり) の話題がごっちゃになってるな(笑
どういうわけか、実際そうなんだよね。DLLインジェクションとか超初心者しないだろ(笑) って話から、コンパイラ通りませんまで。気楽に聞きやすいせいかな?
過疎スレで質問しても人がいないから みんな初心者スレに来るのでは? 初心者スレ2つもあってもしょうがないと思うけど
>>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などに変更することができません。
cppのファイルを作成して.cのファイルをインクルードする。とか、嫌がらせのようなことを言ってみる。
>>989 ・IDEから
プロジェクトのプロパティ → C++ → 詳細 → コンパイル言語の選択
・プロンプトから
/TP すべてのファイルを .cpp としてコンパイルする
/Tp<source file> ファイルを .cpp としてコンパイルする
次はPart3なんで立てる人よろしく
994 :
デフォルトの名無しさん :2006/02/27(月) 23:31:13
VisualC++6.0 で、エディタのフォントを変えるにはどうしたら良いのでしょうか。 もう3日悩んでます。
秘密
>>994 メニュー「ツール」→「オプション」で最後のタブに「書式」ってあるんじゃね。
>>994 そのうちの「ソースウインドウ」のフォントを変える
998 :
993 :2006/02/27(月) 23:44:42
>>996 ガーン…スクロールできるなんて知りませんでした。。。
なぜか最近になって6.0を使うハメになり、ここで死んでました。。。
ありがとうございました!!!
>>998 フォントはHGゴシックE サイズ12だ忘れるなよ
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。