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

プロフィール

Akira

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

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

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

07 | 2017/08 | 09
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 29 30 31 - -

趣味のブログ

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

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【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ブログユーザー)

現在の閲覧者数: / 合計