Unityで利用する c++ のDLLを作成する。(Visual Studio 2017)
基本的に、以下のページにある手順で進めればNative Plugin を作成できるのですが 解説が、VS2013ベースになっているので、Visuai Studio 2017で実施した場合に ハマッた部分を、忘れないうちにスクショ付きでまとめました。
部分的にしか解説してないので、全体は以下のページを参照してください。
- Visual Studio Community 2017
- Unity 2017.3.0f3
- Windows 10 Fall creator update
でやりました。
DLLビルド用のVSプロジェクトの準備
- 既存のソリューションに、DLL作成用のプロジェクトを追加する場合はこんな感じでスタート
2018/8/17追記 VS2017 update 3 ではこの部分がまた変更になっています。 * Visual Studio 2017 Update 3 以降で Win32 プロジェクトが作成できなくなった時の対処法 - Qiita
DLLを作るのですが、この画面では、「c++ のWin32コンソールアプリケーション」を選択。
次に表示されるこの画面で「アプリケーション設定」をクリックして、DLLを選択します。 シンボルのエクスポートも忘れないように。
Unityに出力するなら「SDLのチェック」は外さないといけないらしいです。
で、コードを書く。ここは省略します。
exe形式で実行テスト
同一ソリューション内で、テストのためのexe用プロジェクトを作成したのであれば、 「参照の追加」を行うのが、手っ取り早いです。
ただし、既存の外部DLLやlibを使う場合はこれではダメです。 そのような場合は、以下の3つを設定します。
リンカ >全般>追加のライブラリディレクトリ libフォルダを指定
リンカ >入力 >追加の依存ファイル libファイルを指定
作成したDLLをUnity上で実行する
Unityからは
[DllImport("sample-opencv-dll")] private static extern int CountUp();
Debug.Log(CountUp()); Debug.Log(CountUp()); Debug.Log(CountUp());
のような感じで呼びだすことができます。 「DllImport」にファイル名を書くときは拡張子 (.dll)を含めるとエラーになるので含めません。
libで追加ライブラリを指定した場合は、そのdllもPlugins内に配置しておかないと、
Plugins: Failed to load 'Assets/Plugins/x86_64/xxxxxxxx.dll' with error '指定されたモジュールが見つかりません。 '.
という警告や
DllNotFoundException: Failure has occurred while loading a type.
という例外エラーが発生するので、関連DLLの配置もお忘れなく。
おまけ 既存DLL ( or lib ) の中身を解析する方法
スタートメニューから[開発者コマンド プロンプト for VS2015]を起動する
- DLLのインターフェースを確認する
cd (DLLの場所) dumpbin /exports xxxxx.dll
- dllが32bitか64bitか確認する。
dumpbin /HEADERS xxxxx.dll | findstr machine
Visual Studio 2017のみでdumpbin を使う。(追記2018.12.28)
[開発者コマンド プロンプト for VS2015]は、Visual Studio 2017 のみインストールしていると、スタートメニューに表示されない。
利用するにはコマンドから起動する必要がある。
Win +R を押して
cmd /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\tools\VsDevCmd.bat"
で起動できる。 ちなみに、dumpbin.exe自体は
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64\dumpbin.exe
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\x86\dumpbin.exe
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX86\x64\dumpbin.exe
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX86\x86\dumpbin.exe
この辺りにある。
参考: If you have Visual Studio 2017 installed then you can use dumpbin to dump the PE... | Hacker News