この記事は2018年08月03日に投稿しました。
目次

C++/CLI & OpenCV画像処理GUIプログラミング―リッチなユーザーインターフェースを持つ画像処理プロ
- 作者: 北山洋幸
- 出版社/メーカー: カットシステム
- 発売日: 2013/03/01
- メディア: 単行本
- この商品を含むブログ (3件) を見る
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC++/CLIの話です。
過去の資産がDLLで提供されているシステムがありました。
そのDLLをC++/CLIで利用するためラッパークラスを作成して対応したので、その手順をまとめました。
2. DLLのラッパークラス
ラッパークラスはユーティリティクラス扱いのため、シングルントンで作成しました。
以下がDLLの関数のラッパーメソッドを用意する手順です。
- DLLの関数と同じ戻り値、引数の関数ポインタを定義します。
- 1で定義した関数ポインタの変数を用意します。
- LoadLibraryメソッドでDLLモジュールをロードし、そのハンドルを取得します。
LoadLibraryメソッドの引数には、DLLのファイル名を指定してください。 - DLLのハンドルのGetProcAddressメソッドを利用して、DLLの関数のアドレスを取得し、関数ポインタの変数に設定します。
- 関数ポインタを呼び出すラッパーメソッドを用意します。
他のクラスからは、このラッパーメソッドを呼び出すようにします。
SampleDLL.h namespace Sample { ref class SampleDLL { private: // 自分自身のインスタンス SampleDLL^ instance; // DLLモジュールのハンドル HMODULE hDll; // コンストラクタ SampleDLL(); // 1.関数ポインタを定義します。 typedef void(__stdcall *Func1)(void); typedef int(__stdcasll *Func2)(String^ str); // 2.関数ポインタの変数を用意します。 Func1 pFunc1; Func2 pFunc2; public: // インスタンスを返却します。 static SampleDLL^ GetInstance(); // DLLの関数1のラッパーメソッド void func1(); // DLLの関数2のラッパーメソッド int func2(String^ str); }; };
SampleDLL.cpp namespace Sample { // コンストラクタ SampleDLL::SampleDLL() { // 3.DLLモジュールのハンドルを取得します。 hDll = LoadLibrary("DLL名"); if (hDll == nullptr) { // 取得できない場合、終了します。 return; } // 4.DLLの関数のアドレスを取得します。 // GetProcAddressの第2引数には、DLLの関数名を指定します。 pFunc1 = (FUNC1)GetProcAddress(hModule, "func1"); pFunc2 = (FUNC2)GetProcAddress(hModule, "func2"); } // インスタンスを返却する。 SampleDLL^ SampleDLL::GetInstance() { if (instance == nullptr) { instance = gcnew SampleDLL(); } return instance; } // 5.ラッパーメソッド // DLLの関数1のラッパーメソッド void SampleDLL::func1(void) { pFunc1(); } // DLLの関数2のラッパーメソッド int SmapleDLL::func2(String^ str) { int result = pFunc2(str); return result; } };
API Reference
LoadLibraryメソッド
GetProcAddressメソッド
3. おわりに
手順自体は、同僚に教わりました。
今後も過去の資産のDLLを流用することがあれば、同様の手法で対応できると思います。
お仕事決まれば全額キャッシュバック!転職特化型Ruby実践研修【ポテパンキャンプ】

プロフェッショナル VISUAL C++ 2010 (MSDNプログラミングシリーズ)
- 作者: エディフィストラーニング株式会社,矢嶋聡
- 出版社/メーカー: 日経BP
- 発売日: 2012/07/05
- メディア: 単行本
- この商品を含むブログ (1件) を見る
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688