[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 03/28 10:59 / Filesize : 176 KB / Number-of Response : 772
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++/CLI について語ろうぜ Part2



1 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 16:08:39 ]
おそらく、.NET開発でデファクトスタンダードに最も近い
であろうC++/CLIについて語ろうぜ!

このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は姉妹スレ「くだすれC++/CLI(初心者用)」に
お願いします。

前スレッドはこちら
(p)pc8.2ch.net/test/read.cgi/tech/1126450441/l50

姉妹スレ
くだすれC++/CLI(初心者用)
(p)pc8.2ch.net/test/read.cgi/tech/1142144110/l50
managed C++ やろうぜ!! 002
(p)pc8.2ch.net/test/read.cgi/tech/1139043535/l50


281 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:39:41 ]
>>276
ネイティブクラスのインスタンスは、マネージヒープ・スタック以外に作られる可能性がある
しかし、CLRのGCは、自身が管理するメモリ以外を見ない
だからネイティブクラスはハンドルを持てない

おとなしくmsclr::gcrootを使いなさいということ

282 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:49:32 ]
>>281
ありがとう。
つまりネイティブヒープ上にあると、ハンドルがGC対象にしていいか追跡
できなくなるって理解しました。

gcrootなんてあったんですね。調べてみます。

283 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:49:50 ]
CreateFileとかCloseHandle呼べばいいんでは?

284 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:00:12 ]
審議中
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'


285 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:16:51 ]
>>279
つーか、ECMAに最初だけ登録しておいて、
以後のバージョンアップは放置ってのがMSの手法。
で「仕様は公開されてますよ、オープンです」って言う。

286 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:33:12 ]
C++/CLIで作ったら、各部署、それぞれから大ブーイングだぜ。

287 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:37:41 ]
C#はJIS通ったんだが

288 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 21:02:25 ]
>>286
なんで?

289 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 01:13:42 ]
>288
ソースが転用できねーじゃねーか。ぼけ、死ね、くたばれ。
って言われる。



290 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 05:53:23 ]
ネットワークドライブ上のファイル X:\あああああ\いいいいい.txt
があり、ファイル名は日本語とします。

また、ファイル名としてconst char*を受け取るライブラリの関数libfuncがあります。
これは変更不可です。

英語XPでこのlibfuncにパスを渡すいい方法はないでしょうか?
以下のようなコードだとconst char*に変換するとき X:\??????などと
なり、読み込み不可になってしまいます。

String^ filename = L"X:\\あああああ\\いいいいい.txt";
System::IntPtr pp = StringToHGlobalAnsi(filename);
const char* afilename = (const char*)pp.ToPointer();
libfunc(afilename);
FreeHGlobal(pp);

shortpathを使う方法も思いついたのですがGetShortPathNameWで変換しても
X:\ああ~1\ などとなり日本語が残ってしまうためconst char*にうまく変換
できません。

291 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 05:54:24 ]
続きです。
さらにもし可能なら、英語版windows98でも動くようにしたいです。

292 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 08:28:02 ]
PtrToStringCharsの戻り値をpinして、
自分でWideCharToMultiByteやその他の手段でマルチバイト文字列へ変換
その際マルチバイト文字列の文字コードにShift_JIS (CP932)を指定

XP (NT)なら、Unicode対応でないプログラムの言語の設定(コントロールパネル→地域と言語のオプション→詳細設定)
で日本語を選んでおけばこれで動くと思う。あるいはAppLocaleで個別指定する手もある
98 (9x)は無理

293 名前:デフォルトの名無しさん [2007/06/05(火) 23:56:10 ]
String^ temp;

^って、なんの意味があるんですか?


294 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 23:58:15 ]
ポインタ

295 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 23:59:01 ]
ハンドル

296 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 00:10:54 ]
>>294
ポインタ?

String* temp;

はなくなったんですか?

>>295
すいません、よくわかりません。


297 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 00:14:05 ]
ハンドルで分からないなら managed なポインタと思っとけばおk

298 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 00:55:44 ]
>>297

有難う御座います。
そのように思っておきます。


299 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 02:46:37 ]
>>293
C++/CLI の変更点くらい確認しようぜ

ヘルプで C++/CLI Version 2, マネージ拡張 から
変更の概略を見れば出ている



300 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 10:33:56 ]
でも、ぶっちゃけ、CLIにメモリ管理を任せる意味はあるのか。


301 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 11:32:38 ]
>>300
DLLをまたいでオブジェクトが行き来しても、
メモリアロケータが違ってあぼんとかしないのはイイよ。
もちろんネイティブC++だってわかっている人が使えば問題ないんだけど。

ヘッダファイルにnew書いててそれがDEBUG_NEWに置換されて死亡とかイヤ過ぎる。
ttp://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1641869&SiteID=7

302 名前:デフォルトの名無しさん [2007/06/06(水) 13:21:26 ]
>301
その為に共有メモリってのがあったわけだが…。

ちょっとコスト対効果のバランスが悪い理由な気がする。


303 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 13:25:03 ]
>>302
共有メモリはプロセス間でメモリ共有したいときのものだと思うけど。
DLLはもとからメモリ空間共有してるわけだし、
メモリ共有で何を解決するつもりなのかサパリワカラン

304 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 14:29:10 ]
>>303
DLLのスタティック領域がプロセス間で共有されてたのはWindows 3.1時代の話だぜ


305 名前:290 mailto:sage [2007/06/06(水) 19:50:35 ]
>>292
ありがとう。
しかし290の例の日本語は他の言語の場合もあり、またはUnicodeでしか
表わせない混合型の場合もあるので、もっと根本的な解決法があれば
いいんですが。

306 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 00:18:32 ]
根本的な解決があるとすれば、そのライブラリをどうにかするしかない
ハンドルやファイルポインタ・ストリーム辺りが渡せればだいぶましなんだが

307 名前:デフォルトの名無しさん [2007/06/13(水) 07:45:40 ]
アンマネージドで格納したバイト配列をcli::array<unsigned char,1>にしたいのですが、
どうすればいいのでしょうか?

int size = 1024;
byte *buf = new byte[size];

cli:array<unsigned char,1> ^arr = gcnew cli:array<unsigned char,1>(size);
System::Runtime::InteropServices::Marshal::Copy((IntPtr)buf, arr, 0, size);
//ここでエラーになる。

308 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 17:50:08 ]
IntPtrをSystem::IntPtrにしたこと以外はそのままでも問題なさそうだし、
実際試しに動かしてみても問題なかったぞ

309 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:37:21 ]
>>308
ありがとうございます。
すみません。問題は別のところにありました。
実際は*bufは関数でネイティブに渡していて、そこにそのまま渡していたという初歩的なミスです。

void nativefunc(byte **buf_p, size_t *size) {
//--- nativefunc(byte *buf_p, size_t *size) これで宣言していた
*size = bitmap.size;
byte *data = new byte[*size];
memcpy(//--- データ書き込み
*buf_p = &data[0]; //--- cliのbufのアドレス書き換え
}

void clifunc() {
 size_t size;
byte *buf;
(new NativeCls)->nativefunc(&buf, &size);
//--- nativefunc(buf, &size); そのまま渡していた
cli:array<unsigned char,1> ^arr = gcnew cli:array<unsigned char,1>(size);
System::Runtime::InteropServices::Marshal::Copy((IntPtr)buf, arr, 0, size);
}



310 名前:デフォルトの名無しさん [2007/06/21(木) 00:39:09 ]
String a("A");

これがコンパイルできないのはなぜですか?

error C3149: 'System::String' : トップレベルの '^' なしに、この型をここに使用することはできません

311 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:46:21 ]
トップレベルの '^' なしに、この型をここに使用することはできないから。

312 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 01:45:46 ]
>>311
その理由を聞いています。

313 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 07:33:41 ]
仕様だからとしか

314 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 08:49:15 ]
仕様ですか。しかしObjectやStringBuilderなどは^がなくてもOKなので、
Stringのみ特別な事情があると理解すればいいでしょうか?


315 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 09:20:15 ]
MSDNには対象外としか書いてないね。
The following reference types are not available for use with stack semantics:
delegate / array / String

予想だけどこれらはIDisposableでないので出来ても意味が少ない。
出来たとしてもハンドルに変換しないと使えない。
String s("A");
String^ x = "abcd" + %s;
String^ x = "abcd" + s.ToString();

316 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 10:55:52 ]
>>315
ありがとう。
使い道がないということで理解しようと思います。

317 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:45:52 ]
delegateは知らんが、arrayやStringは.NET ILレベルで特別扱いしてるからかもな。

318 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 09:16:58 ]
VC2005でデバッグしてるとステップ実行で変なところを
さしてしまう場合があってデバッグしづらいんですが
直す方法はありますか?

nop命令があってそこでへんなとへこいきます。

319 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 05:55:39 ]
GUIなアプリケーションを作るために
C#の「Windowsアプリケーション」プロジェクトでいくか
C++/CLIの「Windowsフォームアプリケーション」プロジェクトで行くか悩む。

アンマネージドなC++クラス(とboost)で書かれたCUI
アプリケーションのGUI版を作ろうとしています。
C# でもアンマネージドな DLL のエントリを呼び出すことできますし。

でもアンマネージドな C++ のクラスを使いまくりたいんだけど
どうしたものか・・・ COM コンポーネントとして作られていれば
容易に扱うことができたのかもしれないけど。

アンマネージドな C++ で書かれたクラスのインスタンスを
生成したい時って、そのクラスのファクトリメソッドを
用意しておいてそれを C# 側から呼び出すということになるんですかね?
C++ 特有の複雑な(引数の型を反映した)関数名とかどうなるんだろう。
extern "C" つかうのか。



320 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 05:56:10 ]
ごめん、書いてる途中で C# な話題になってしまった。

321 名前:319 [2007/07/06(金) 06:41:49 ]
それで、肝心のことなんですが、アンマネージドな C++ のクラスを
.NET 環境で使うためには C++/CLI でラッパークラスを書けば
いいのでしょうか?そうするとマーシャリングなども自動で
やってくれるということなのでしょうか?

DLL は C++ にやさしくない、かといって COM コンポーネント
として書いてしまうとプラットフォームに強く依存しすぎるので
一般的な用途のクラスライブラリには向かない、
でもアンマネージドな C++ のクラスを .NET と仲良くさせたい、
という課題をどう解決すればいいのかを教えてください。

322 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 08:19:58 ]
> そうするとマーシャリングなども自動で
> やってくれるということなのでしょうか?
そういうことになるが、ある意味自分で
マーシャリングコードを書く補助をしていると言ってもいいかもしれない。

アンマネージクラスをC#(やその他.NET言語)から呼び出したければ、
C++/CLIでそのクラスをラップしたマネージクラスを含むマネージドDLLを作って、
他の言語から参照設定して使うのが一番率直な手段。

そもそもC#でアンマネージDLLのC++クラスを操作するなんて不可能だぞ。
(COMインタフェース経由を除く)

323 名前:319 [2007/07/06(金) 10:57:16 ]
>C++/CLIでそのクラスをラップしたマネージクラスを含むマネージドDLLを作って、
>他の言語から参照設定して使うのが一番率直な手段。

やっぱそうですか、ある意味安心しました。
System.Runtime.Interop 以下にいろいろあるのを眺めてて、
もしかしてマネージドからなんかうまい具合にごにょごにょ
できる方法が用意されてるのかなぁ、などと疑心暗鬼になってました。

324 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 13:26:04 ]
VC2005でデフォルトのフォームアプリを作成して、
CLRサポートを/clrにして以下のインクルードを追加すると
実行時ヒープエラーみたいなのが出ます。

#include <comdef.h>
#pragma comment(lib, "oleaut32.lib")

どうやって直したらいいのでしょうか?

325 名前:デフォルトの名無しさん [2007/07/24(火) 03:07:41 ]
なんで Void って大文字になったの?

326 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 03:13:36 ]
ヘミvoidが権利を主張するのを避けるため

327 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 23:16:42 ]
System::Void のこと?


328 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 23:50:23 ]
当たり前のことなんだろうけどvoid代わりに使えるのが少し不思議に感じる。
#include <cstdlib>

int main()
{
&nbsp; System::Void* pv = std::malloc(256);
&nbsp; std::free(pv);
}

329 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 02:28:58 ]
自分自身の起動パスを得るにはどうしたらいいの?



330 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 13:29:14 ]
CRTの__argv[0]やWin32のGetModuleFileName(0,とか
.NETのSystem::Windows::Forms::Application::ExecutablePathなど。

331 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 22:11:43 ]
Applicationにあったのか!
ありがとう。
ずっとProcessとかを探してたよ
Win32APIのときGetModuleDirectoryとかなんとかだったから

332 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 22:51:56 ]
>>331
その線も惜しい。
Win32はGetModuleFileNameだったでしょ。
.NETだとモジュール (EXE/DLL)に対応するものはアセンブリだから、
その方向でやるならAssemblyクラスが正解だった。

www.atmarkit.co.jp/fdotnet/dotnettips/016exepath/exepath.html

333 名前:デフォルトの名無しさん [2007/07/27(金) 12:14:00 ]
Visual Studio 2005 で C++/CLI を使おうとしています。
std::vector<System::String^> のように標準のSTLのコンテナには
ハンドルを格納することはできないのでしょうか?
C++/CLI にはマネージドな世界独自のコンテナクラスライブラリが
用意されているのでしょうか?今の自分は array<String^>
しか使えずさみしい毎日を過ごしています。

std::vector<System::String^>^ lines;
try{
for(;;)
lines->push_back(stream_reader->ReadLine());
} catch
以下略

のようにぶん回してファイルを行単位で全行
読み込みたいだけなのですが・・・

334 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:19:12 ]
>>333
>C++/CLI にはマネージドな世界独自のコンテナクラスライブラリが
つSystem::Collections::Generic

STL.NET構想はどっかいっちゃったけどな

335 名前:デフォルトの名無しさん [2007/07/27(金) 12:26:29 ]
>>334
おお、「コレクション」というのですか。
どうりで C++ CLI コンテナ で検索していても
昔の managed C++ の資料や gcroot でがんばる
という方法しか見つからず難儀していました。
しかも cliext::vector なんかも見つかってしまい、
余計に混乱していました。cliext 名前空間以下の
識別子ってのが STL.NET なんですかね?

336 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:42:30 ]
>335
STL.NET は STL/CLR という名前で VS2008 に同梱
ただ、.net fx 2.0 では動かない

こういう後方互換性がないものを C++/CLI で出してほしくなかった


337 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:47:04 ]
>後方互換性

上位互換が無いってことか?

338 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:49:22 ]
>>336
それで困るやつはどれだけいるんだ

339 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:51:29 ]
STLってのはC++では最重要なんだが...



340 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:55:13 ]
>>336
それ本当?
.NET Framework 3.0も3.5もCLRのバージョンは2.0のままだろ。

341 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:07:08 ]
.net fx 2.0 で作ってた既存アプリに STL/CLR を使って修正すると、アプリの実行に
3.5 が必要になるのは嫌じゃね?
前のCTPの頃はライブラリだけ持って行けばよかったんだが



342 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:22:05 ]
>340
Beta1 で Microsoft.VisualC.Stlclr.Dll +ヘッダ抜き出しで駄目だったという報告があった

とりあえず、Beta2 が来てるんで、入れて試してみる
一応、「Microsoft.VisualC.Stlclr.Dll は .net fx 3.5 の一部ではない」はずなんだが

343 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:47:59 ]
>>341
>.net fx 2.0 で作ってた既存アプリに STL/CLR を使って修正すると、アプリの実行に
>3.5 が必要になるのは嫌じゃね?
>前のCTPの頃はライブラリだけ持って行けばよかったんだが

コンパイルし直すんだろ?
どうせmsvcp90.dllとか増えてるんじゃないの?
VC++のランタイムライブラリに同梱ってのが幸せになる道かねぇ。

まあ3.5のサイズにもよるな。



344 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 14:43:50 ]
>343
客先に説明するのが面倒なんだよね。でも、STL/CLR は使いたい
できれば、CTP同様に VS2005 + ヘッダ + Microsoft.VisualC.Stlclr.Dll で STL/CLR を
使った開発ができる方がうれしい。SP2 で来ないものかな

345 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 17:14:22 ]
std::vector<int> v;
   :
for each(int i in v)
{}

for eachでbegin(), end()が呼ばれているようですが
ECMA-372にはこの振る舞いの記述が見あたりません。
MSの独自拡張なのでしょうか?

346 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:28:26 ]
>345

これでも行けますね

int vec[] = { 1, 2, 3, 4, 5 };

for each ( int num in vec )
{
  std::cout << num <<std::endl;
}

配列アクセスが可能なものは Array のラップを掛けて渡されているのでは
ないでしょうか。Array は IEnumerable ですし

347 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:34:44 ]
>346
ごめん。これはできて当たり前だわ
array<int>^ vec = { 1, 2, 3, 4, 5 };
と同等だもんな

348 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 07:12:42 ]
>>346
Cタイプ配列とarray<T>は同等じゃないから346は通らないのでは?


349 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 07:20:17 ]
std::vectorに対するfor each inはネイティブでコンパイルしても使えてるな。
/Zeで拡張構文を抑制するとeachが構文エラーになった。
// cl /EHsc hoge.cpp
#include <iostream>
#include <vector>
int main() {
  std::vector<int> v; v.push_back(1); v.push_back(5);
  for each (int i in v) std::cout << i << std::endl;
return 0; }



350 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 18:16:58 ]
>348
Cタイプ配列は C++/CLI では array<Type> でラップされるよ。だから、346 は動く
>347 がそれを言ってる

ヘッダ見たけど、特に ecma-372 で必要とされている IEnumerable の定義も
見あたらないから、CLR・・・で定義されている所に、拡張構文で潜んでるっぽい

351 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 18:24:10 ]
VS2008 Beta2 試してみた。コンパイル対象となる .net fx が選べるようになったんだが
2.0, 3.0 を選んだとき、STLCLR.dll は使えなかった
STL/CLR を使いたかったら、3.5 を普及させろと言うことらしい

  ( ゚д゚) Feedback マンドクサ
_(__つ/ ̄ ̄ ̄/_
  \/     /
     ̄ ̄ ̄

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/     /
     ̄ ̄ ̄

352 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 19:47:41 ]
>>350
C#のCタイプ配列はCLR配列だが、C++/CLI のCタイプ配列はCLR配列じゃないぞ。
>>346を実際にコンパイルしてみろ、C3285でしっかりコンパイルエラーが出る。 

353 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 23:12:16 ]
VC8 SP1で試したけど/clrの有無に関わらずC3285になるね。

当たり前だけど、boost::arrayはOK。
どうせならレンジに使えればいいのに、
ってそれなんてBOOST_FOREACHなんだけどね。

354 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 14:40:44 ]
>352-353
悪禁食らっていたので返答が遅れた
ごめん。漏れが試したのは、VS2008 Beta2 だった。こちらは >346 でコンパイルできるし
動く。また、ecma-372 でも、仕様上 346 で正しいから、VC8 で取りこぼしてた仕様が
いくつかあったやつを VC9 で準拠したんだと思う

/clr の有無に関わらずって、/clr なくて for each が使えるの?

355 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:24:33 ]
>>354
349でネイティブでも使えるという報告があるよ。

356 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 14:40:51 ]
ファイル名をキーとするstd::mapのようなものを作りたく、Generic::Dictionaryのキー型にString^
比較にStringComparer:::CurrentCultureIgnoreCaseを指定してるのですが
全角アルファベットの大文字・小文字も同一視されてしまいます。
要するにNTFSやFATと同じようなファイル名の比較をしたいのですが、どうすればいいんでしょうか?

357 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 15:16:49 ]
つ ネイティブC++

358 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 15:50:00 ]
>>356
WindowsのNTFSファイルシステムドライバは"A"と"a"は同じ文字とみなしてるよ?

359 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 16:11:47 ]
>>358
あ、ほんとだ。区別されるものと思ってた。



360 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:22:34 ]
>>356
カーネルの中には比較する関数あるんだけどね・・・
なんでユーザーモードに無いのかは謎

まじめにやると日本語やアルファベット以外の文字(ヨーロッパ圏など)でも
全角半角を問わず大文字小文字を区別しないので
割と面倒だった気がする。


361 名前:デフォルトの名無しさん [2007/08/01(水) 04:25:12 ]
Visual Studio 2005 で C++/CLI を使っています。
フォームデザイナの機能で C++/CLI と C# の間に
違いはあるのでしょうか?
つまり C# でのフォームデザイナと、C++/CLi での
フォームデザイナの間に、利用できるコントロールの
種類などで違いがあるのでしょうか?
.NET Framework で用意されている機能なら言語によらず
利用可能だとおもうので差はないと思っているのですが。

362 名前:デフォルトの名無しさん [2007/08/01(水) 04:54:48 ]
マネージドなプログラム組むならC++なんか使わねっつの!w

363 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 08:38:47 ]
>マネージドなプログラム

これってメリットある?
いや、一般論じゃなくて実際のところ。

364 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 09:07:42 ]
プラットフォームにVistaが使えるじゃねーか。

365 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 09:14:12 ]
いや、Vi$taにあうのはネイティブアプリ。

366 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 11:44:46 ]
>>363
自分専用ツールにはクラスライブラリが充実しているので便利。

367 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:01:52 ]
>>366
それにしては、Win32で出来るものが出来なかったり、中途半端。

だったらVCLみたくネイティブクラスライブラリ充実させろよ。


368 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:05:21 ]
>クラスライブラリが充実しているので

これって、ネイティブ版クラスライブラリを作成すれば完璧だおね。

M$のドトネト囲い込み戦略に嵌められてるだけじゃないの?
ドトネトは終焉したわけだし、無視した方が良いよ。

369 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:37:37 ]
ドトネト君っていろんなスレにいるな。
飽きないの?



370 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:00:03 ]
>プラットフォームにVista

つ ttp://gigazine.net/index.php?/news/comments/20070801_will_not_move_to_vista/

企業ユーザーの大多数はVistaへの移行を考えていない


371 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 16:47:45 ]
そりゃ、CreateFile系のAPI自体がバグでロックしちゃうんだもの。
企業ユーザが使おうとするわけがない。 >> VISTA

372 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:10:29 ]
>CreateFile系のAPI自体がバグでロックしちゃうんだもの。

kwsk

373 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:12:17 ]
これか
ttp://d.hatena.ne.jp/NyaRuRu/20070731/p2

374 名前:デフォルトの名無しさん [2007/08/01(水) 22:23:38 ]
Form.hに実装を書かせられるの嫌なんだけど、どうにかならない?
てか、なんでForm.hに実装させるような仕組みにしたんだろう?

375 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:02:47 ]
Form.cppに実装を移せば?

376 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:59:06 ]
実装を書かせるといっても、イベント用に開発環境が自動生成したものですよね。
これをcppにということになると、たとえば、フォームデザインの変更を
ちょこちょこやる場合、Formのデザイナとヘッダとcppを行ったり来たりでは
やっぱり大変だよね。



377 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 00:59:04 ]
ぶっちゃけVC++8の.NETサポートは「諦めろ」としか言えないよ・・・

378 名前:デフォルトの名無しさん [2007/08/02(木) 04:03:15 ]
VC++9 では何か変わってるの?

379 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 09:44:37 ]
そりゃ変わってますよw



380 名前:デフォルトの名無しさん [2007/08/02(木) 18:35:26 ]
VC2008先行して使っている人、
デサイナが生成するコードに何か大きな変化は有りましたか?

381 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:36:34 ]
試してみたけど変わってないみたいだね。残念だ…






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<176KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef