画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

ブログ内検索


カテゴリ

最近のコメント

カレンダー

01 | 2013/02 | 03
S M T W T F S
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 - -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

プロフィール

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

最近の記事
(02/04)  ご迷惑おかけしました。
(01/04)  リブセンス 25歳の最年少上場社長 村上太一の人を幸せにする仕事
(12/18)  2012年11月人気記事Top5
(11/18)  2012年10月人気記事Top5
(10/16)  2012年9月人気記事Top5
(09/16)  2012年7月人気記
(08/16)  2012年7月人気記事Top5
(07/16)  2012年6月人気記事Top5
(04/06)  ユニークアクセス100万達成!
(03/21)  ブログを引っ越します。
(02/19)  【C#】マウスホイールで画像の拡大縮小
(02/19)  【C#】マウスホイールイベントの追加方法
(02/11)  【.NET】Graphicsオブジェクトのアフィン変換(グローバル変換)
(02/07)  アフィン変換
(01/29)  画像処理ソリューションWeb版を公開しました。
(01/07)  アメトーク(2011.01.07)の家電芸人スペシャルで紹介されていた製品
(12/20)  【OpenCV2.2】Windows7(64bit)でUSBカメラが動作せず
(12/19)  【C++/CLI】矢印の大きさ変更、任意形状の指定方法
(12/13)  Windowsドライバの削除方法
(12/12)  【OpenCV2.2】新規プロジェクトの作成方法
(12/11)  OpenCV2.2の入手、ダウンロード、インストール、環境設定
(12/11)  国際画像機器展2010に出展しました。
(12/06)  【OpenCV2.2】ライブラリ構成(*.lib,*.hなど)
(12/06)  OpenCV2.2が公開されました。
(11/29)  Kinectの測定例
(11/27)  C#とOpenCVの融合プログラミング
(11/23)  【展示会情報】国際画像機器展2010に出展します。
(11/22)  Kinectサンプルプログラムの実行
(11/22)  Kinectドライバの入手、設定方法
(11/22)  Kinect購入

【C++/CLI】.NETクラスライブラリの作成、使用方法

メインページC++/CLI プログラミング

一言でライブラリと言っても、従来のC言語で作成されたライブラリと.NET環境(VB.NET、C#、C++/CLI)で作成されたライブラリとがあります。
どちらもファイル形式は*.dllなので、見分けが付きにくいのですが、.NETで作られたライブラリでは.NETのどの言語(VB.NET、C#、C++/CLI)からも使う事ができ、使い方も簡単です。
(C++/CLIで作成したライブラリは引数にポインタなどを用いると互換が取れない場合があります。)

.NETクラスライブラリの作成方法

ファイル→新規作成→プロジェクトで Visual C++→CLRクラスライブラリを選択しプロジェクト名を記入しOKボタンをクリックします。
.NETクラスライブラリの作成方法、使用方法

すると、以下のようにcppファイルhファイルが作成されます。

【DotNetClassLibrary.cpp】ファイル
// これは メイン DLL ファイルです。

#include "stdafx.h"

#include "DotNetClassLibrary.h"

【DotNetClassLibrary.h】ファイル
// DotNetClassLibrary.h

#pragma once

using namespace System;

namespace DotNetClassLibrary {

    public ref class Class1
    {
        // TODO: このクラスの、ユーザーのメソッドをここに追加してください。
    };
}

Class1というクラス名はあまりにも...なので、クラス名を Calc に変更し、簡単な足し算のメソッドを追加したものが、以下の通りとなります。

【DotNetClassLibrary.cpp】ファイル
// これは メイン DLL ファイルです。

#include "stdafx.h"

#include "DotNetClassLibrary.h"


using namespace DotNetClassLibrary;

double Calc::Add(double a, double b)
{
    return (a + b);
}


【DotNetClassLibrary.h】ファイル
// DotNetClassLibrary.h

#pragma once

using namespace System;

namespace DotNetClassLibrary {

    public ref class Calc
    {
        // TODO: このクラスの、ユーザーのメソッドをここに追加してください。
        public:
                double Add(double a, double b);
    };
}

これでプロジェクトをビルドすると、DotNetCladdLibrary.dllというファイルが作成され、DotNetCladdLibrary::CalcクラスAddメソッドをメンバにもつクラスが作成されます。

これで、.NETクラスライブラリの作成は完了です。

.NETクラスライブラリの使用方法(ライブラリをデバッグする場合)

まずは、ライブラリを評価するための簡単なプロジェクトを現在のソリューション(*.sln)に追加作成します。

今回は評価用のプログラムなので ファイル→追加→新しいプロジェクトで Visual C++→CLRクWindowsフォームアプリケーションを選択しプロジェクト名を記入しOKボタンをクリックします。
(今回はTestSampleという名前のプロジェクトを作成しました。)
.NETクラスライブラリの作成方法、使用方法

作成した評価用のプロジェクトから、.NETクラスライブラリをデバッグできるようにするためには、.NETクラスライブラリのプロジェクトを参照設定する必要があります。

参照設定方法は、プロジェクト名右クリック→参照 とクリックします。
.NETクラスライブラリの作成方法、使用方法

すると以下のようなウィンドウが表示されるので、『新しい参照の追加』ボタンをクリックします。
.NETクラスライブラリの作成方法、使用方法
表示されたウィンドウの『プロジェクト』のタブを選択し、参照するプロジェクトを選択OKボタンをクリックします。
.NETクラスライブラリの作成方法、使用方法
これで、作成したDotNetClassLibraryという.NETクラスライブラリを使用する準備ができました。
.NETクラスライブラリの作成方法、使用方法

次に、評価用のプロジェクトと.NETクラスライブラリのプロジェクトをデバッグするには、評価用のプロジェクトから起動し、.NETクラスライブラリを参照するような順番で起動して欲しいので、最初に起動するプロジェクトの設定を行います。

最初に起動するプロジェクトの設定方法は、プロジェクト名右クリック→スタートアッププロジェクトに設定クリックで設定ができます。

.NETクラスライブラリの作成方法、使用方法

実際に作成したAddメソッドの使用例は以下の通りです。

DotNetClassLibrary::Calc^ func = gcnew DotNetClassLibrary::Calc();

double x = func->Add(36.0, 24.0);

これで、デバッグ実行が可能となります。

ただ、今回作成したメソッドのように、ただ、足し算をするだけなのに、いちいちgcnewをするのは面倒だと思ったりしますよね?
そんな時には、.NETクラスライブラリのメソッド定義部分(ヘッダファイル(*.h))の先頭にstaticを付ける事でgcnewする事なく直接メソッドを呼び出す事が可能となります。

【DotNetClassLibrary.h】ファイル
// DotNetClassLibrary.h

#pragma once

using namespace System;

namespace DotNetClassLibrary {

    public ref class Calc
    {
        // TODO: このクラスの、ユーザーのメソッドをここに追加してください。
        public:
       
        static double Add(double a, double b);
    };
}

staticを付けた場合のAddメソッドの使用例は以下の通りです。

double x = DotNetClassLibrary::Calc::Add(36.0, 24.0);

.NETクラスライブラリの使用方法(ライブラリを使うだけの場合)

ライブラリをデバッグする時は、プロジェクト名右クリック→参照 とクリックし『プロジェクト』のタブを選択しましたが、今回は『参照』のタブを選択します。

次に作成した.NETクラスライブラリのファイルの場所を選択し、.NETクラスライブラリファイルを選択しOKボタンをクリックします。
.NETクラスライブラリの作成方法、使用方法
.NETのライブラリの場合は、ただ、この設定だけでライブラリを使用する事が可能となります。
(*.libや*.hファイルは必要ありません。)

本当は、次に作成したライブラリをC:\Windows\assemblyへインストールして・・・、マニフェストが・・・という話もあるかと思いますが、あまり分かっていないので、今回はここまでで...


Loading...

この記事に対するコメント

コメント頂きありがとうございます。
ランタイムライブラリの設定の部分ですが、デフォルトで
「マルチスレッドDLL」「マルチスレッドデバッグDLL」
の設定になりませんでしたか?

あと、直接関係ありませんが、cppファイルの部分でusing namespaceの部分が抜けていたので、記事を修正しました。
【2012/05/29 21:31】 URL | Akira #- [ 編集]


C++/CLIでDLLを作成するときに
「マルチスレッドデバッグ」
「マルチスレッド」になっているとビルドに失敗します。

「マルチスレッドDLL」「マルチスレッドデバッグDLL」にしましょう。
【2012/05/29 20:26】 URL | naohiro19 #- [ 編集]


補足説明ありがとうございます。

ただ、このブログ内では、あまり名前空間を省略しないように書いている?と思います。
省略すると、公開しているコードの一部分をコピーしてエラーになる人が出てきたり、名前解決が出来ない場合があったり、名前空間が分かりづらくなったりする恐れがありそうなので...初心者ができるだけ、ハマらないように。
もちろん、慣れている人はusingやImportsなどを使って頂いて構いませんが。
【2011/04/28 07:37】 URL | Akira #- [ 編集]


この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://imagingsolution.blog107.fc2.com/tb.php/263-19ef4830
この記事にトラックバックする(FC2ブログユーザー)

現在の閲覧者数: / 合計