DLLの作成
■プロジェクトについて
A:「Win32コンソールアプリケーション」「DLL」(追加オプションなし)
B:「Win32コンソールアプリケーション」「DLL」(シンボルをエクスポート)
ファイルはAと同じだが、CPP,HにEXPORTS文あり。
C:「Win32コンソールアプリケーション」「DLL」(空のプロジェクト)
ソースファイル等一切なし。
なお、選択は「Win32プロジェクト」からもできるが、結果は「Win32コンソールアプリケーション」と変わらない。
要は空のプロジェクトにするとファイルは何も作成されず、ここにチェックを入れないでおくとcpp,ファイル等が作成される。hファイルは作成されない。シンボルをエクスポートすると作成されたファイルに何やら書かれるということ。
空のプロジェクトとはせずに、シンボルをエクスポートしないのがやりやすそう。
■DLLの作成(この例では「TDll」がプロジェクト名)
[ファイル]-[新規作成]-[プロジェクト]で、「新しいプロジェクト」画面を起動。
その画面の[テンプレート]で、[Win32 プロジェクト]を選択。
同画面の[プロジェクト名]で、作成プログラムに名付ける任意の名前を入力。
[OK]ボタンを押す。
「Win32 アプリケーション ウィザード」画面が起動。
[次へ]をクリックし、その画面の[アプリケーションの種類]で、DLLを選択し、[完了]ボタンをクリック。
cppファイルにコードを記述。(そのファイルに既に書かれているコードはそのまま)
その下に必要な関数を記述。
ここでは、足し算関数。
int __stdcall TestFunc(int x, int y)
{
return x + y;
}
DEFファイルに、エクスポート(外部公開)する関数の名前を提示。
DEFファイルの組み込みは、[プロジェクト]-[新しい項目の追加]で、[モジュール定義ファイル(def)]を選択。、ファイル名を入力し、[追加]ボタンをクリック。(ファイル名は、何でも良く、プロジェクト名と同じ名でも可能)
作成されたDEFファイルの一番下に EXPORTS と記述。
EXPORTS の下方に、エクスポート(外部公開)する各種関数の名前を、行単位で記述。
例えば、
int TestFunc(int x, int y)の関数をエクスポートする場合は、
LIBRARY
EXPORTS
TestFunc
[ビルド]-[ソリューションのビルド]で、Debugフォルダ内にDLLが作成される。
■C#から利用
DllImport(“TDll.dll”, EntryPoint = “TestFunc”)]
public static extern int TestFunc(int x, int y);
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = TestFunc(9, 6).ToString();
}