1 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 23:25:17 ] 1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14 Visual C++入門者・初心者からの質問を、 お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。 ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう。 ・できるだけ具体的に。 質問の仕方については次のページが大変参考になります。 www.hyuki.com/writing/techask.html myu.daa.jp/osiete/ ■回答するにあたって ・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。 (MSDNのどの項目だとか、何のキーワードでGoogleするとか) ・ネタや煽りは軽く流しましょう。 過去スレ、関連スレなどは>>2-5 。
415 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 12:47:13 ] BSTR型ってサイズの制限とか無いですよね? Base64でエンコードされたファイルをBSTR型文字列で受け取ることになっているんですが、 メモリの許す限り何MBでも入りますよね?
416 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 16:34:38 ] 有ります。
417 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 16:40:51 ] A four-byte integer 理論上は終了文字含まないで4GBだな。 バイナリ換算だと1GBか。
418 名前:417 mailto:sage [2007/06/30(土) 16:43:53 ] Win32だとUTF-16だから、文字数はその半分、 バイナリ換算すると512MBだった…… orz
419 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:21:59 ] 何で限界バイト数が減るのか理解できん。 #Win32ではまず連続1GBもメモリは確保できないけど。
420 名前:417 mailto:sage [2007/06/30(土) 21:03:50 ] Base64の一文字当たりの情報量は6ビットだから、バイナリ変換すると3/4、 4GBytes => UTF-16:2G => 1.5GBytes だろ、常識的に考えて。 ごめん、今日はボケてるみたいだ orz
421 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 21:07:37 ] いつもじゃね?
422 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 22:45:44 ] >>415 >>417-420 が4バイトといっているのは、 BSTRの先頭の文字列の長さを格納する部分の大きさを根拠にしている。 Win64でもこの大きさは変わっていない。 あと、言ったところでどうにもできないとは思うけど、 BSTR自体は直接バイナリデータを扱えるようにもなっている。
423 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:04:06 ] 残念ながら、BSTRは例え64bitWindowsでも2^32-1バイトをサポートしていない。 最大は2^29バイトとなるように実装されている。 BSTRは別段UNICODE (これはM$が勝手に決めたUNICODEであって、本来はいわゆるUTF-16に準拠したもの)を 格納するためではない。その気になればEUCだって代入できる。 現に>>422 も単なるバイナリデータとして扱えると言っている。 ところが、少なくともVB6のCComBSTRのメンバ関数は、2バイト文字を扱うように実装されおり、 かつ、null-terminal文字列として扱っている。 BSTRはどんな文字セットでも扱えるとM$は称しているが、実際のところ安全なプログラムを組むには UTF-16以外は代入しない方がいいと考えていい。 そして、文字列のバイト数は2^29-2であって、文字列は2^28-1文字(最後は`\0')しか代入できない。 ちなみに、Windows95系と互換性を持たせたかったら、4095バイトを限界にした方がいい。 うろ覚えだが、確かメガバイト単位までは実装されてなかったはず。
424 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:08:59 ] >VB6のCComBSTR >null-terminal文字列 ここは突っ込むところなのだろうか。
425 名前:423 [2007/07/01(日) 00:16:16 ] >>424 よく突っ込んでくれた!といいたいところだが、単なるミスです。 当方チューハイ4杯入ってますので。
426 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:26:40 ] SysAllocStringの > zero-terminated string to copy. The sz parameter must be a Unicode string >in 32-bit applications, and an ANSI string in 16-bit applications. についてはどう考える? まあ、インターフェースと内部実装でコードが違ってる場合もあろうけど。
427 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:52:36 ] >>426 非ヌル終端の文字列でBSTRを初期化したければSysAllocStringLen。 バイナリデータでBSTRを初期化したければSysAllocStringByteLen。
428 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:56:28 ] >The sz parameter must be a Unicode string こっちのほうだけど。
429 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 11:06:09 ] ありがとうございます。 まとめると、データがBase64文字列の最大100MB程度で OSがWinNT系なら、何も考えずにBSTRに格納できるということでしょうか。 ただ、格納されるBase64文字列はUTF-8かSJISのどちらか(未確認)です。 Base64文字列データを返値として提供してくれる関数の返値の型がBSTRになっているのですが、 そのまま格納してはまずいのでしょうか…。 CStringに入れれば大丈夫だったり? ※ 上の関数はライブラリで提供されてるので中身の実装は分からないのですが、中で 返値をBSTRに格納してるのなら一緒じゃないかと思ったり
430 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 11:28:49 ] >>429 それくらいだったら平気だろう。
431 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:12:29 ] VC++2005ってC99コンパイルできますか?
432 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:20:09 ] いいえ。
433 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:41:20 ] VisualStudio2005でC++のライブラリの追加がうまくいきません ツール>オプション>プロジェクト及びソリューション>VC++ディレクトリ でインクルードファイルとライブラリファイルのところに 追加してるんですがうまくいかない場合は他にどこに気をつけるべき?
434 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:45:49 ] プロジェクトに追加しろよ
435 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:04:06 ] >>434 しょっちゅう使うつもりなんでできるだけ環境に入れときたいんですが……
436 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:22:21 ] ライブラリをインクルードファイルに追加する分際で何言ってんの? だからプロジェクトに追加しないとリンクされねぇっつーの。 プロジェクトなりソースでファイルをリンクするように設定しろや 環境にPATHを入れるのは自由だ
437 名前:デフォルトの名無しさん [2007/07/02(月) 00:53:23 ] visual C++ 2005 をインストールしようとしているのですが、 登録しなければインストールできないのですか? www.microsoft.com/japan/msdn/vstudio/express/visualc/
438 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:56:45 ] ううん
439 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 08:56:42 ] >>434 ,>>436 なんだい、えらそうに。このタコが。
440 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 09:15:15 ] うまくいかないで考えが終わってるから うまくいかないんだろう 猿の方が賢いかも
441 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 10:26:55 ] VC++なら、提供するincludeファイルに、#prafma comment(lib, "xxx.lib") をつけときゃ、あとはディレクトリの指定だけしときゃいい
442 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:12:19 ] 自作のクラスやメソッドをインテリジェンスで表示させるときに コメントも一緒に表示できるようにならないかねぇ・・・ 俺が知らないだけかもしれないけど・・・
443 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:26:37 ] New C++ Language Features - XML Documentation に何か書いてあるっぽい。C#のXMLドキュメントコメントと似たようなものか? でも、読むの('A`)マンドクセ
444 名前:デフォルトの名無しさん [2007/07/02(月) 23:10:07 ] >>441 いや、どうせなら #prazma ディレクティブの方が多少面白かったのに。
445 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:45:21 ] タブブラウザを作りたくて、手始めにタブ表示を実装しようと ttp://www.kumei.ne.jp/c_lang/sdk3/sdk_206.htm を参考に作ってみたのですが、 ttp://www.dsnw.ne.jp/~yasushi/donutr.jpg のページ切り替え用タブのような、タブ同士の間にセパレータが 入った格好良いタブ表示にするにはどうしたらよいのでしょうか?
446 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:02:42 ] タブに普通にあるスタイルに見えるけど
447 名前:デフォルトの名無しさん [2007/07/03(火) 00:13:30 ] >>445 www.kumei.ne.jp/c_lang/sdk3/sdk_206.htm の先頭に > さらにこのプログラムではタブコントロールから TCS_EX_FLATSEPARATORSスタイルを取り除いて > タブとタブの境界線を描画しないようにしています。 と書いてあるけどこれとはまた別のこと?
448 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:31:40 ] >>446-447 dwStyle &= ~TCS_EX_FLATSEPARATORS; の行をコメントアウトしたらできました。 大変下らない質問でスレを汚してしまい、 申し訳ありませんでした。 ありがとうございました。
449 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 03:44:25 ] ちょっと待て。それかっこいいのか?
450 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 07:26:00 ] >>449 まあまあ、主観の話なんだからケチ付けない。