C#ライブラリ(DLL)の作成方法

C#から使う、C#で書かれたライブラリ(*.dll)の作成方法です。
C#から使う、C言語ライブラリの作成方法はこちらを参照ください。

 

まず、ライブラリを呼び出す側のプロジェクトを作成します。

 

ここでは、Windowsフォームアプリケーションを作成するのに、

テンプレート→Visual C#→Windows→Windowsフォームアプリケーション

と選択し、名前を適当に付けてOKボタンをクリックします。

 

これで、呼び出し側のプロジェクトが作成されました。

 

次に、C#ライブラリ用のプロジェクトを作成します。

今、作成したプロジェクトの1つ上の階層に作成されている ソリューション の文字を右クリックし、

追加→新しいプロジェクト

を選択します。

 

今度はライブラリを作成するので、

  Visual C#→Windows→クラスライブラリ

と選択し、名前を適当に付けてOKボタンをクリックします。

 

すると、最小限のコードが生成されます。

 

通常は、Class1とかいうクラス名ではなく、もっとわかりやすい名前に変えますが、とりあえず、このまま次に進みます。

 

次に、2つの値を足すだけの簡単なメソッドを追加してみます。

 

この状態で、ビルドすると、ライブラリのプロジェクトフォルダのbinフォルダのDebugもしくはReleaseフォルダの中にライブラリファイル(CSharpDll.dll)が作成されます。

 

しかし、それだけだと、ライブラリを呼び出す元のプロジェクト(ここではWindowsFormsApplication1)からは使う事ができないため、参照の設定を行います。

 

参照は呼び出す元の方のプロジェクトにある、参照の文字を右クリックし、参照の追加を選択します。

 

ここで、ライブラリファイルを選択する方法もあるのですが、プログラム作成中はライブラリのプロジェクトを参照した方がデバッグ等が便利なので、プロジェクトの参照を行います。

 

  プロジェクト→ソリューション

 

と選択すると、ライブラリのプロジェクト名が表示されているので、プロジェクト名の左側にあるチェックボックスにチェックを入れ、OKボタンをクリックします。

 

これで、参照元に参照先のライブラリ名(ここではCSharpDll)が追加され、ライブラリが使用できる状態になります。

 

 

試しにフォーム上にボタンを配置します。

 

 

ボタンをダブルクリックし、作成されたクリックイベント内に、今、作成したライブラリのメソッドを追加してみます。

 

これで、ボタンをクリックした時に、以下のように表示されれば、C#ライブラリの作成は成功です。

 

ここでは、ライブラリのプロジェクトの参照として行いましたが、こうすることで、ライブラリのメソッド内へのステップイン実行もできるようになるので、かなり便利です。

 

一つポイントとしては、デフォルトのまま、ライブラリを作成すれば特に問題は無いのですが、ライブラリのプロジェクトのプラットフォームはAnyCPUにしておくのをお勧めします。

 

こうしておく事で、呼び出し元のプロジェクトがx86だろうが、x64であっても、同一のライブラリファイル(ここではCSharpDll.dll)を使用することができるようになります。

これを間違うと、x86用のdllファイル、x64用のdllファイルのそれぞれを作成する必要が出てくるので、少々面等になります。

【OpenCV2.2】ライブラリ構成(*.lib,*.hなど)

OpenCV2.2からはライブラリの構成が再構築されています。
旧バージョンと、OpenCV2.2の構成の概略は以下の通りとなっています。

 

OpenCV2.2 旧バージョン ヘッダファイル ライブラリファイル 概要
opencv_core CXCORE core_c.h (C言語用)
core.hpp (C++用)
opencv_core220.lib
opencv_core220d.lib
メモリ確保/解放、行列、
演算、描画など
opencv_imgproc CV imgproc_c.h (C言語用)
imgproc.hpp (C++用)
opencv_imgproc220.lib
opencv_imgproc220d.lib
画像処理
一般的なフィルタ処理など
opencv_highgui HighGUI highgui_c.h (C言語用)
highgui.hpp (C++用)
opencv_highgui220.lib
opencv_highgui220d.lib
ウィンドウなどのGUI、
ファイル読込/保存、
ビデオファイル、カメラなど
opencv_ml ml ml.hpp opencv_ml220.lib
opencv_ml220d.lib
サポートベクタマシン、
ブースティングなどの
機械学習
opencv_features2d features2d.hpp opencv_features2d220.lib
opencv_features2d220d.lib
SURF、FASTなどの
特徴抽出
opencv_video background_segm.hpp opencv_video220.lib
opencv_video220d.lib
前景/背景分離
tracking.hpp トラッキング
opencv_objdetect objdetect.hpp opencv_objdetect220.lib
opencv_objdetect220d.lib
Haar、LBP、HOGなどの
オブジェクト検出器
opencv_calib3d calib3d.hpp opencv_calib3d220.lib
opencv_calib3d220d.lib
カメラキャリブレーション、
ステレオカメラなど
opencv_flann flann.hpp opencv_flann220.lib
opencv_flann220d.lib
高速最近傍処理(FLANN)
など
opencv_contrib contrib.hpp opencv_contrib220.lib
opencv_contrib220d.lib
肌検出、MeanShiftなど
完全な状態ではない
opencv_legacy legacy.hpp opencv_legacy220.lib
opencv_legacy220d.lib
旧関数との互換用
opencv_gpu gpu.hpp opencv_gpu220.lib
opencv_gpu220d.lib
GPU(CUDA)による行列演算、
画像処理など。(β版の扱い)

 

ライブラリファイル(*.lib)はReleaseモードの場合、『d』のつかないlibファイルを、Debugモードの場合、『d』の付いたlibファイルを、参照設定して下さい。

 

ヘッダファイルはopencv.hppにまとめてインクルードされているので、このファイル(opencv.hpp)一つをインクルードすると、すべてインクルードされます。

 

また、OpenCV-2.2.0-win32-vs2010.exeを使ってデフォルト状態でOpenCV2.2をインストールした時の主なファイルのフォルダ構成は以下の通りです。

 

C:\OpenCV2.2
┣ bin
┃  ┣ opencv_core220.dll
┃  ┣ opencv_core220d.dll
┃  ┣ opencv_imgproc220.dll
┃  ┣ opencv_imgproc220d.dll
┃  ┣ opencv_highgui220.dll
┃  ┣ opencv_highgui220d.dll
┃  ┣ opencv_ml220.dll
┃  ┣ opencv_ml220d.dll
┃  ┣ opencv_features2d220.dll
┃  ┣ opencv_features2d220d.dll
┃  ┣ opencv_video220.dll
┃  ┣ opencv_video220d.dll
┃  ┣ opencv_objdetect220.dll
┃  ┣ opencv_objdetect220d.dll
┃  ┣ opencv_calib3d220.dll
┃  ┣ opencv_calib3d220d.dll
┃  ┣ opencv_flann220.dll
┃  ┣ opencv_flann220d.dll
┃  ┣ opencv_contrib220.dll
┃  ┣ opencv_contrib220d.dll
┃  ┣ opencv_legacy220.dll
┃  ┣ opencv_legacy220d.dll
┃  ┣ opencv_gpu220.dll
┃  ┗ opencv_gpu220d.dll
┣ include
┃  ┣ opencv
┃  ┃ ┣ cv.h
┃  ┃ ┣ cv.hpp
┃  ┃ ┣ cxcore.h
┃  ┃ ┣ cxcore.hpp
┃  ┃ ┣ highgui.h
┃  ┃ ┗ ml.h
┃  ┣ opencv2
┃  ┃ ┣ opencv.hpp
┃  ┃ ┣ core
┃  ┃  ┃ ┣ core_c.h
┃  ┃  ┃ ┗ core.hpp
┃  ┃ ┣ imgproc
┃  ┃  ┃ ┣ imgproc_c.h
┃  ┃  ┃ ┗ imgproc.hpp
┃  ┃ ┣ highgui
┃  ┃  ┃ ┣ highgui_c.h
┃  ┃  ┃ ┗ highgui.hpp
┃  ┃ ┣ ml
┃  ┃  ┃ ┗ ml.hpp
┃  ┃ ┣ features2d
┃  ┃  ┃ ┗ features2d.hpp
┃  ┃ ┣ video
┃  ┃  ┃ ┣ background_segm.hpp
┃  ┃  ┃ ┗ tracking.hpp
┃  ┃ ┣ objdetect
┃  ┃  ┃ ┗ objdetect.hpp
┃  ┃ ┣ calib3d
┃  ┃  ┃ ┗ calib3d.hpp
┃  ┃ ┣ flann
┃  ┃  ┃ ┗ flann.hpp
┃  ┃ ┣ contrib
┃  ┃  ┃ ┗ contrib.hpp
┃  ┃ ┣ legacy
┃  ┃  ┃ ┗ legacy.hpp
┃  ┃ ┗ gpu
┃  ┃      ┗ gpu.hpp
┗ lib
┣ opencv_core220.lib
┣ opencv_core220d.lib
┣ opencv_imgproc220.lib
┣ opencv_imgproc220d.lib
┣ opencv_highgui220.lib
┣ opencv_highgui220d.lib
┣ opencv_ml220.lib
┣ opencv_ml220d.lib
┣ opencv_features2d220.lib
┣ opencv_features2d220d.lib
┣ opencv_video220.lib
┣ opencv_video220d.lib
┣ opencv_objdetect220.lib
┣ opencv_objdetect220d.lib
┣ opencv_calib3d220.lib
┣ opencv_calib3d220d.lib
┣ opencv_flann220.lib
┣ opencv_flann220d.lib
┣ opencv_contrib220.lib
┣ opencv_contrib220d.lib
┣ opencv_legacy220.lib
┣ opencv_legacy220d.lib
┣ opencv_gpu220.lib
┗ opencv_gpu220d.lib

 

C:\OpenCV2.2\include\opencv内のcv.hなどのファイルは使用可能ですが、
C:\OpenCV2.2\include\opencv2内のimgproc.hppなどを使うのを推奨とされています。

 

OpenCVへ戻る