C++/CLI
http://d.hatena.ne.jp/akiramei/20071129/1196358506 昨日の日記に菊池さんから反応が! catch句はできるだけ例外に依存しないか、依存しても抽象的な例外に依存しましょう ほぼ全面的に同意。違うのは全ての例外をキャッチするのに catch (Exception) { ..…
C#ではExceptionクラスもしくは、その派生クラスしかthrow出来ませんが、C++/CLIだとそれ以外の値もスロー可能です。 // This is the main DLL file. #include "stdafx.h" #include "MyDLL2.h" public ref class Foo { public: static int Divide(int x, int…
先ずはサンプルから。 using namespace System; ref class Calculator { int dummy; public: // インスタンスメンバにアクセスしない void add() { Console::WriteLine("add"); } // インスタンスメンバにアクセスする void subtract() { dummy = 0; Console…
C++で出来てC++/CLIで出来ないことをちまちま調査。 ref class B { public: virtual B^ clone() { return gcnew B(); } }; ref class D : B { public: virtual D^ clone() override { return gcnew D(); } }; void main() { D^ d = gcnew D(); D^ d1 = d->cl…
そろそろ話題も無くなってきたのでネタ企画。(^^;まず、テンプレートライブラリはヘッダで提供されているので、当然C#から使えないのでコンパイルしてアセンブリにしなければなりません。また、STL.NETのクラスはプライベートな型になっていてアセンブリの外…
STLは素晴らしいライブラリですが、.NET Frameworkにもコレクション(System.Collection.Generic)があり、C++/CLI以外の言語も使う場合にはコレクションを使った方が何かと都合が良かったりします。STL.NETではその辺にも配慮されています。 void test() { ve…
今頃する話題なのか?(^^;exeを作る $ cl /clr:safe /Fexxx.exe yyy.cpp dllを作る $ cl /clr:safe /LD /Fexxx.dll yyy.cpp /clrだけでマネージドなアセンブリになりますが、Monoで実行するには/clr:safeにする必要があります。(詳しく調べてないけど・・・)…
http://www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.aspを読みながらSTL.NETでも弄ってみようかと思ってましたが、なんか上手く行かないです。cli/vectorがcliext/vectorになっているとかはいいのですが、 sort( &arr[0], &arr[ arr->Length ]…
C++/CLIだとインタフェースの明示的実装に制限がありそ。それともバグかしら? しかし、インタフェースの明示的実装周りはWorking Draft1.9(2005/1)と結構変わっています。まだ、言語仕様固まってないのかなぁ・・・ #include "stdafx.h" using namespace Sy…
プロパティを含んだインタフェース。あと、プロパティのアクセス修飾子も。 #include "stdafx.h" using namespace System; interface class IFoo { // getのみ property int Bar { int get(); } // setのみ property int Baz { void set(int value); } // ge…
なんか間違って消してしまったので貼り直し。(^^;C#と同じくらい簡単に書けるよーになった云々とか書いた記憶が。イベントをいちいちnullptrチェックしなくていいのは良いですね。 #include "stdafx.h" using namespace System; // デリゲート delegate void…
C#におけるstructとenumですが、C++/CLIではvalue class/structとenum class/structになっています。C++ではstruct/classの違いはデフォルトのアクセスがpublicなのかprivateかの違いだけなんですが、列挙型でprivateにされても困るのでenum classもenum str…
マネージドなポインタと考えればいいのかな? #include "stdafx.h" #include <cstdio> using namespace System; void equals_val(String^% s1, String^% s2) { // Stringの値を比較 Console::WriteLine(s1 == s2); } void equals_ref(String^% s1, String^% s2) { //</cstdio>…
C++/CLIの配列は[ ]ではなく、arrayキーワードを使います・・・って、もう何度も使っているので今更感漂いますが。(^^; #include "stdafx.h" #include <cstdio> using namespace System; void print_array(array<int>^ args) { for each (int n in args) printf("%d ", n)</int></cstdio>…
http://d.hatena.ne.jp/akiramei/20050630#p1で、^(トラッキングハンドル)を付けないとスコープから外れたら自動的にDisposeが呼ばれることに大喜びしていましたが、配列の場合はどーなるんでしょうか? #include "stdafx.h" using namespace System; ref cl…
今月はC++/CLIに力を入れることにして、先ずは型から。charがSByteだったりlongがInt32だったりするのに違和感がある。C#に毒されているなぁ。(^^; #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { // C#のtypeof(int)はC++/CLIではin</system::string>…
昨日の日記でconst char*からStringへの変換にPtrToStringAnsiを使いましたが、考えてみたらStringのコンストラクタはconst char*を取りましたよね。(^^; #include "stdafx.h" using namespace System; using namespace System::Runtime::InteropServices; v…
C++: .NET Framework プログラミング最良の言語(via 菊池 Blog) 何となく動作を見たくなったので色々実験。Native C++のデストラクタっぽく動作してくれるところで心が鷲掴みされています。>C++/CLI #include "stdafx.h" #include <string> using namespace System; </string>…