13,005
回編集
編集の要約なし |
|||
19行目: | 19行目: | ||
<br> | <br> | ||
上記の表1において、C++/CLIを使う方法とC# DLL側で関数をエクスポートする方法、C++/CLIのラッパープロジェクトを作成する方法を<br> | 上記の表1において、C++/CLIを使う方法とC# DLL側で関数をエクスポートする方法、C++/CLIのラッパープロジェクトを作成する方法を<br> | ||
下記にて紹介する。<br><br> | 下記にて紹介する。<br> | ||
<br><br> | |||
== C++/CLIを使う方法 == | == C++/CLIを使う方法 == | ||
< | <syntaxhighlight lang="c#"> | ||
// SampleDLL.cs | // SampleDLL.cs | ||
namespace SampleDLL | namespace SampleDLL | ||
34行目: | 35行目: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
Visual C++のプロジェクト設定を開いて、[共通言語ランタイム サポート (/clr)]に変更する。<br> | Visual C++のプロジェクト設定を開いて、[共通言語ランタイム サポート (/clr)]に変更する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// SampleEXE.cpp | // SampleEXE.cpp | ||
#include <Windows.h> | #include <Windows.h> | ||
49行目: | 50行目: | ||
return 0; | return 0; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
== C# DLL側で関数をエクスポートする方法 == | == C# DLL側で関数をエクスポートする方法 == | ||
まず、プロジェクトを作成してソースコードを記述する。<br> | まず、プロジェクトを作成してソースコードを記述する。<br> | ||
< | <syntaxhighlight lang="c#"> | ||
// SampleDLL.cs | // SampleDLL.cs | ||
namespace SampleDLL | namespace SampleDLL | ||
67行目: | 68行目: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | |||
< | <syntaxhighlight lang="c++"> | ||
// SampleEXE.cpp | // SampleEXE.cpp | ||
#include <Windows.h> | #include <Windows.h> | ||
83行目: | 84行目: | ||
return 0; | return 0; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
次に、[https://github.com/3F/DllExport/releases DllExport.batをダウンロード]して、DllExport.batをC# DLLのslnファイルと同じ階層に配置する。<br><br> | 次に、[https://github.com/3F/DllExport/releases DllExport.batをダウンロード]して、DllExport.batをC# DLLのslnファイルと同じ階層に配置する。<br><br> | ||
94行目: | 95行目: | ||
== C++/CLIのラッパープロジェクトを使用する方法 == | == C++/CLIのラッパープロジェクトを使用する方法 == | ||
< | <syntaxhighlight lang="c#"> | ||
// CSharpDLL.cs | // CSharpDLL.cs | ||
namespace CSharpDLL | namespace CSharpDLL | ||
115行目: | 116行目: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
[参照の追加]にて上記のDLLを追加する。<br> | [参照の追加]にて上記のDLLを追加する。<br> | ||
Visual C++のプロジェクト設定を開いて、[構成プロパティ] - [全般] - [共通言語ランタイム サポート (/clr)]に変更する。<br> | Visual C++のプロジェクト設定を開いて、[構成プロパティ] - [全般] - [共通言語ランタイム サポート (/clr)]に変更する。<br> | ||
同様に、[構成プロパティ] - [C/C++] - [プリプロセッサ] - [プリプロセッサの定義]項目に、DLLを追加する。<br> | 同様に、[構成プロパティ] - [C/C++] - [プリプロセッサ] - [プリプロセッサの定義]項目に、DLLを追加する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// CppCLIDLL.cpp | // CppCLIDLL.cpp | ||
#include "stdafx.h" | #include "stdafx.h" | ||
146行目: | 147行目: | ||
clsCLI.ShowCSharpMessageBox(value); | clsCLI.ShowCSharpMessageBox(value); | ||
} | } | ||
</ | </syntaxhighlight> | ||
< | <br> | ||
<syntaxhighlight lang="c++"> | |||
// CppCLIDLL.h | // CppCLIDLL.h | ||
#pragma once | #pragma once | ||
156行目: | 158行目: | ||
__declspec(dllimport) void ShowMessageBox(int *value); | __declspec(dllimport) void ShowMessageBox(int *value); | ||
#endif | #endif | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
Visual C++のプロジェクト設定を開いて、[構成プロパティ] - [C/C++] - [全般] - [追加のインクルードディレクトリ]項目に、<br> | Visual C++のプロジェクト設定を開いて、[構成プロパティ] - [C/C++] - [全般] - [追加のインクルードディレクトリ]項目に、<br> | ||
162行目: | 164行目: | ||
同様に、[構成プロパティ] - [リンカー] - [全般] - [追加のライブラリディレクトリ]項目に、CppCLIDLL.libが存在するディレクトリを追加する。<br> | 同様に、[構成プロパティ] - [リンカー] - [全般] - [追加のライブラリディレクトリ]項目に、CppCLIDLL.libが存在するディレクトリを追加する。<br> | ||
更に、[構成プロパティ] - [リンカー] - [入力] - [追加の依存ファイル]項目に、CppCLIDLL.libを追加する。<br> | 更に、[構成プロパティ] - [リンカー] - [入力] - [追加の依存ファイル]項目に、CppCLIDLL.libを追加する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// CppEXE.cpp | // CppEXE.cpp | ||
#include "stdafx.h" | #include "stdafx.h" | ||
193行目: | 195行目: | ||
return 0; | return 0; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br><br> | <br><br> | ||