C#
今回は System.Security.Cryptography.RijndaelManaged に対するDebugger Visualizerを自作することを考えます。暗号化・復号化に必要なIVとKeyのバイト列の値を16進数表記で表示させるという特に面白くもなんともないサンプルです。このクラスはSerializabl…
Visual Studio では、ブレークポイントで止めた時に以下の図のように変数の中身を視覚的に見ることができます。ここで見られるのは普通は数値や文字列ぐらいに限られます。しかし例えばUriクラスならば、そのUriの示す先のWebページが見られたりしたら、(実…
今度研究室でOpenCV勉強会というのをすることになったのですが、そのネタにと思い、id:yaneurao:20090802 を参考にはてなの画像認証をクラックしてみました。CAPTCHAの画像をHTMLを解析して自動収集するところから書き始めたりして、全然30分では終わらず3時…
通常のforであれば、このような場合にはgotoが未だに健在です。しかし、以下のコードは、まあいかにもダメそうですがやはりコンパイルできません。delegateを作った時点ではラベルが認識されていないようです。 Parallel.For(0, 20, delegate(int i) { for (…
またまた内部仕様が変わりまくりです。既にコア部分の対応は大体終わっていて、windows版のmono2.4では動作を確認できました。残るはMLやBlobの部分で、この辺りはC++/CLIで実装してあるので、これを全部やめてC#で書き直さなければなりません。しかし、ここ…
ポインタから値を読み取るメソッドとして、Marshal.ReadByte, Marshal.ReadInt16, Marshal.ReadInt32, Marshal.ReadInt64 があります。すなわち、byte, short, int, long についてはこれらのメソッドを使うことで、unsafeを使うこと無くポインタの実体の値を…
名前空間が長すぎてうんざりしますが、つまりGDI+のBitmapから、WPFのBitmapSourceに変換しようということです。 using System.Drawing; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Controls; using System.Windows…
コメントにご質問があったので、少し長くなりそうなのでこちらで書かせてもらいます。構造体とポインタ(若しくはバイト配列)との相互変換を行う方法については以前紹介しましたが、あの時の例はあえてごく簡単な構造体にしてありました。今回はメンバとし…
delegateとかアンマネージとかあまり関係有りませんでした、すみません。Releaseモードだとオブジェクトの生存期間が変わってしまうのが原因でした。基本的には以下のページと同様の現象です。http://blogs.wankuma.com/shuujin/archive/2007/05/15/76794.as…
前回の記事の件で訂正。もう少し探っていくと、2重のdelegateでなくとも単にアンマネージ関数に空のdelegateを渡すだけでも落ちていました。お手上げ状態なのは相変わらずです。GCが発動すると落ちるということしかわかっていません。そのアンマネージ関数と…
言葉では説明しにくいので、すごく端折ったコードで書くとこんな感じです。即席で書いているので間違っていたらすみません。C++側の実装 (hoge.dll) typedef void (_cdecl *CallbackA)(void); typedef int (_cdecl *CallbackB)(int a, int b); extern "C" __…
前回の記事の逆変換の場合を考えていきます。基本的に、ポインタに変換するよりはコーディングは楽です。
色々方法はあります。これから、思いついたものを列挙していきます。
C#使っているくせにポインタが絡むことばかりやっていて、なんだかなあと思う今日この頃。 C# unsafeコード中でのヌルポインタについて。C/C++では、NULLすなわち0という整数値をそのままポインタ変数に代入できましたが、C#は型にうるさいのでできません。…
C#では base というキーワードで継承元のクラスのメンバにアクセスできます。では継承元の元はどうするか、つまり base.base.Hoge(); のようなことがやりたいという場合のお話です。しかし残念ながらbaseは繋げて書けません。
C#で作ったDLLからC++/CLIで作ったDLLを呼び出すと、FileNotFoundExceptionが発生して、このところ途方にくれていました。 FileNotFoundExceptionというと、読み込むテキストファイルや画像ファイル等がないときに発生するというイメージでしたが、これはDLL…
あるIntPtrの変数ppに、構造体Tのポインタのポインタ、つまりC言語でいうところのT**が入っていたとします。このポインタからunsafeを使わずに実体の値を得る方法です。 確認までに、C言語ではこうなります (ppの型はT**とする)。 T t = **pp; C#(というか.…
以下のコードはコンパイルが通りません。doubleはstructですし、ifの中はTがdoubleの時しか絶対に実行されないので良さそうなものですが、ダメです。 T Hoge<T>() where T : struct { if(typeof(T) == typeof(double)) { double r2 = 1.41421; return r2; } els</t>…
のですが、いい方法はないものか・・・・。 とかのタグにlang="ja"とかあったらなあと思いましたがあるわけもなく。 思いついたのはこんな方法です。 #if LANG_JP /// /// 日本語 /// /// 正の数 #elif LANG_DE /// /// Deutsch /// /// eine positive Zahl …
C#でC/C++のライブラリのラッパークラスを作るときの基本形は、こんな感じになると思います。 class HogeWrapper : IDisposable { IntPtr ptr; public HogeWrapper() { ptr = createHoge(); } public void Dispose() { releaseHoge(ptr); } [DllImport("hoge…
※追記:.NET Framework4以降における方法 http://schima.hatenablog.com/entry/2013/10/08/003445現在OpenCvSharpをC#メインで書き直し中です。C++/CLIに比べるとVisualStudioの支援が手厚く、コンパイルも圧倒的に速いので作業効率は良いです。しかしラッパ…
最近プログラムを書いていてちょっと納得いかなかったことをいくつか。
CvSeqを使う関数は何かとラッパー的に面倒なので避け気味なのですが、頑張って実装しました。最近たまっていた分を含めてリリースしておきました。Sandcastleのバージョンを上げたので、以前よりもヘルプが見やすくなっていると思います。 以下の画像はOpenC…
C#でアンマネージな関数を使いたければ、DllImportを使うのが常道です。しかし、定義の際に必ずstaticをつけることからもわかるように、静的な定義であり、プログラムの実行中に動的に関数名を決めてロード、といったことはできません。C/C++ではWin32APIのL…
だいぶ前に書いたちょっとしたメモのせいで、このブログに「C/C++/C# 動的配列」といったキーワードで飛んでくる方が結構いるみたいです。大して書いてなくて申し訳ないので勉強兼ねてまとめときます。
cvFindStereoCorrespondenceBM, cvFindStereoCorrespondenceGCのほかに、cvauxの方にもcvFindStereoCorrespondenceという関数があります。こちらもラップしてみました。 http://opencv.jp/opencv-1.1.0/document/opencvref_cvaux.html#decl_cvFindStereoCorr…
こちらのページの関数をすべてラップしました。まだリリースはしてません。 http://opencv.jp/opencv-1.1.0/document/opencvref_cv_epipolar.html cvFindStereoCorrespondenceBMとcvFindStereoCorrespondenceGCを試しに動かしてみました。先ほどのOpenCVリフ…
クラスのメンバに定数を、すなわちpublicでstaticでconstな値を定義するとします。C++的な考えでC++/CLIで定義してみるとこうなるでしょう。 public ref class Const abstract sealed { public: static const Int32 HOGE = 123; }; しかしこれをC#側から定義…
例えばパスワードに総当たり攻撃をかけるときには、文字のあらゆる組み合わせからなるパスワードを作ってみて攻撃することになります。どういうアルゴリズムで作れるのか興味を持ったので書いてみました。 こんなクラスを定義しておきます。いまいちスマート…
例外を投げたいとき、「この場合だとどの例外を投げるのが適切なんだろう?」と悩むことが良くあります。すぐ出てくるのはArgumentException, ArgumentNullException, FileNotFoundExceptionぐらいで、他はパッと出てこないのでただのExceptionを投げて誤魔…