C++/CLI

C++/CLIについてのよくある誤解

以前にも書いたような気がしますが、もう一度書きます。C++/CLI(仕様の邦訳)は、.netからC++やその他ネイティブコードのライブラリを楽に使えるようにするためと、そのための作業を楽に行うための言語です。「.netで使えるC++」ではありません。そういうこ…

もれなくおまけがついてくるがいらない

さぁ文句を垂らすぞー。 System.Collections.Generic.IEnumerable<T>はSystem.Collections.IEnumerableも含んでいる。この非ジェネリックのIEnumerableというのが面倒で、自分でIEnumeratorを実装しようとするとC++/CLIでは例えばこうなる: generic<typename Elem> ref class </typename></t>…

実践 C++/CLI

非常に珍しいことに私の職場で使われている言語はC#ではなく、C++/CLIである。理由はまぁありがちな感じで。で、「これ読んどけ」と渡されたのが「実践 C++/CLI 極めるための〜」なわけだが、これが酷い。いや、C++/CLIというか.netに関する解説は良かったし…

アクサンシルコンフレクスで修飾された型

Foo^ってのはC++以降のOOPなCの一族で言えばFooになるのね。ガッテン!ガッテン!ガッテン! えんいー

んなもん知るか

なんでコレクション系クラスにあるAddRangeメソッドにarrayがことごとく渡せないのか?などと思っていたらばっちりIListとかICollectionを実装しとるではないか(本当はできないクセに)。うわ、めっさ時間損した。 つーか、StringとかArrayは実装に無理があ…

ハンドルは操縦しづらい

参照型オブジェクトの場合、T^は参照がボックス化されて、値型の場合はT^は値がボックス化される、とでも覚えればいいのか? ところで、 value struct Bar { int i; }; void foo(Bar^ bar) { bar->i++; } int main(array<System::String ^> ^args) { Bar a; a.i = 100; Bar^ b </system::string>…

むしろ.netの話だが

うーむ、スクロールバーを動かしている間もリアルタイムで中の表示を更新しようとしたらえらいてこずった。 Invalidate→Updateね。

うわ

ポインタ回りが面倒。ポインタとハンドルと追跡参照のあたりでつまづくどころか足の小指ぶつけて転げまわった。 特にハンドルにリテラルを代入できる(そう見える構文がある)というのがややこしい。 それとハンドル→ポインタ変換に辿り付くまで時間かかりま…

正しいWindowsアプリケーションの作り方

C#とだいたい同じように作る できあがり! えんいー