今回は CBVector クラスを Win32 Project の DLL (Dynamic Link Library ダイナミック リンク ライブラリ) として作成してみました。
Win32 プログラムの場合、作ったクラスをリンクする方法が3種類あります。一つはオブジェクトファイルを直接実行ファイルにリンクする方法。もう一つは、スタティック ライブラリ (.lib) を作成し実行ファイルにリンクする方法。そして3つ目はダイナミック リンク ライブラリ (.dll) を作成し、実行ファイルから実行時に呼び出す方法です。
JavaScript は実行時に解釈されるので、コンパイル、リンク、実行が全て実行時に行われますが、Java の場合、コンパイルした結果はクラス毎に .class というファイルになり、これが実行時に呼び出されます。
オブジェクト指向でのプログラミングは、オブジェクト単位(クラス単位)に行うのが自然なので、Java に近い DLL 方式を選ぶことにしました。ただ、この方法だとクラスを作るたびに DLL が増えることになるので、将来複数のクラスをまとめて一つの DLL にするかもしれません。
今回のプログラムは CodePlex にアップロードしました。また、CppDoc で作成したドキュメントはこちらにアップロードしました。
今回作ったのは、以前 Java や JavaScript でも作った BVector (binary vector) クラスです。2進ベクトルです。
作った DLL をテストするのに、Visual Studio にある Managed Test Project と Native Unit Test Project にチャレンジしてみましたが、ちょっとうまくいかなかったので、まずは Win32 Console Application から呼び出してテストすることにしました。実行結果は以下の通りです。

まだ2進行列クラスを作っていないので、それに関係するメソッドは今回作っていません。
Visual Studio を使う上で、ソリューションとプロジェクトを理解する必要がありそうです。一つのシステムがソリューション、その中に例えば今回のように、BVector.dll とそれをテストする RegressionTest.exe がそれぞれプロジェクトになります。一つのソリューションの中に複数のプロジェクトを追加できます。今後さらにクラスを追加していくので、その度にプロジェクトを追加していく予定です。
今回は RegressionTest.exe を実行すると BVector.dll が呼び出されるので、GraphGo ソリューションのプロパティ (Properties) で Single startup project として RegressionTest を選びました。また RegressionTest のプロパティで [Add New Reference] ボタンを押して、BVector を追加しました。こうすることで、[Local Windows Debugger] の緑の三角を押したときに、RegresstionTest が実行され、BVector が呼び出されます。
