|
●概要 市販の参考書には殆ど載っていなく、MSDNにてサンプルを見つけ、それを突破口にして開始できた。C、C++については、必要に応じて習得して行く方式とする。筆者としては、DLLができ、それをVBで使えれば、途中経過やスマートさは気にしない。 ●開発環境 Visual Studio 2005 にて開発できる。VC++ 2005 でも同じ。無料ソフトのExpress版では、PlatformSDK(無料)を導入し、ある手続きを行えば開発できるようになるらしい。 →その後、分かったこと:無料ソフトのExpress版で、PlatformSDK(無料)を導入するのは、設定ウィザードにDLL指定を表示させるためで、標準では、DLL を指定できないようになっている。導入なしでExpress版で、C++ネイティブDLLを開発するには、 Visual C 2005 → 新しいプロジェクト → Visual C++ Win32コンソールアプリケーション とし、表示されたウィザードでは、取りあえず、コンソールアプリケーションと、空のプロジェクトを選ぶ。 次に、プロジェクトのプロパティを表示すると、下図が表示される。 ここで、構成プロパティの全般にて、構成の種類を、ダイナミックライブラリ(dll) とすれば良い。あとは、以下の説明と同じ。 ●手順 ○環境準備 Visual Studio 2005 → 新しいプロジェクト → Visual C++ Win32コンソールアプリケーション とし、ウィザード(下図)にて、DLL を選択、追加オプションで空のプロジェクトをチェックする(これをしないと余計なものが山ほど生成される)。
この状態では、一切のファイルは生成されていない。 以下に、二つの方法を示す。 ○C++Export法 これは、オーバーロード可能なエクスポート法であるが、このため参照すべき関数名は判じ物(名前修飾される)になる。 ・ヘッダーファイル生成 プロジェクト → 新しい項目の追加 → ヘッダーファイル(h) とし、適当な名称を指定すると、空白のファイルが準備される。 例えば、以下のようにプロトタイブ宣言などを記述する。 namespace ImageProcessing VC++なので、名前空間、クラス名を定義する。 外部に公開するので、public とし、共有関数なので、static とする。 エクスポートは、__declspec(dllexport) とする。但し、この方法は、C++形式なので、オーバーロードに対応するため、内部名称は、コンパイラが、適度な情報にて自動生成した部分が付加される(これを名前修飾と言うらしい)。 ・C++ファイル生成 プロジェクト → 新しい項目の追加 → C++ ファイル(cpp) とし、適当な名称を指定すると、空白のファイルが準備される。 例えば、以下のようにコードを記述する。 #include "ImageProcess.h" #include <stdexcept> using namespace std; namespace ImageProcessing } ・コンパイル これをコンパイルすれば、dll が生成される。これで終わり。 ○DEFファイル法 この方法はDEFファイルを必要とするが、関数名はそのままでVBから参照できる。 ・C++ファイル生成 プロジェクト → 新しい項目の追加 → C++ ファイル(cpp) とし、適当な名称を指定すると、空白のファイルが準備される。 例えば、以下のようにコードを記述する。 #include <stdexcept> using namespace std; __declspec (dllexport) void
__stdcall YYYYYYY(・・・・・・・) ・DEFファイル生成 プロジェクト → 新しい項目の追加 → モジュール定義ファイル(def) とし、適当な名称を指定すると、空白のファイルが準備される。 例えば、以下のようにコードを記述する。 LIBRARY "XXXXXXXXXXXX" //この部分は自動記述 YYYYYYY は、関数名。以降羅列すれば良い。この部分は、自分で保守する必要がある。 ・コンパイル これをコンパイルすれば、dll が生成される。これで終わり。ヘッダーファイルはなくとも良い。
|