t13801206 / UseNativeCppFuncInCsProject

C#からC++ネイティブを使う方法

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

UseNativeCppFuncInCsProject

C#からC++ネイティブ関数をコールする2つの方法

  • 方法1: C++/CLIラッパー
  • 方法2: DllImport

概要

  • C++はOpenCV 4.3.0を使う
  • C#はx86/x64の2つの構成に対応する

対象プラットフォームごとの出力先

プロジェクト フレームワーク ビルド 出力先
CsMainUser .NET Framework 4.6.1 AnyCpu/x86 UseNativeCppFuncInCsProject\Debug
CsMainUser .NET Framework 4.6.1 x64 UseNativeCppFuncInCsProject\x64\Debug
CppUserConsole_dotnetdore31 .NET Core 3.1 x86 UseNativeCppFuncInCsProject\Debug\netcoreapp3.1
CppUserConsole_dotnetdore31 .NET Core 3.1 AnyCpu/x64 UseNativeCppFuncInCsProject\x64\Debug\netcoreapp3.1

.NET Core 3.1プロジェクトのAnyCpuは「32bitを選ぶ(優先する)」にチェックは入れていない

ビルドの依存関係

  • CsMainUser → WrapperClass → NativeFunc
  • CppUserConsole_dotnetdore31 → CppNativeForDotnetCore31

追加の依存ファイル

リンカー/入力/追加の依存ファイル

opencv_calib3d430d.lib
opencv_core430d.lib
opencv_dnn430d.lib
opencv_features2d430d.lib
opencv_flann430d.lib
opencv_gapi430d.lib
opencv_highgui430d.lib
opencv_imgcodecs430d.lib
opencv_imgproc430d.lib
opencv_ml430d.lib
opencv_objdetect430d.lib
opencv_photo430d.lib
opencv_stitching430d.lib
opencv_video430d.lib
opencv_videoio430d.lib

追加のライブラリディレクトリ

リンカー/全般/追加のライブラリディレクトリ

プラットフォーム 追加のライブラリディレクトリ
Win32 opencv-4.3.0\build32bit\install\x86\vc14\lib
x64 opencv-4.3.0\build\install\x64\vc15\lib

追加のインクルードディレクトリ

C/C++/全般/追加のインクルードディレクトリ

プラットフォーム 追加のライブラリディレクトリ
Win32 opencv-4.3.0\build32bit\install\include
x64 opencv-4.3.0\build\install\include

システム環境変数

.dllファイルが格納されているフォルダーにパスを通す

システム環境変数の変更を反映するために、OSを再起動する

  • \opencv-4.3.0\build32bit\install\x86\vc14\bin
    • 32bit
    • build by Visual Studio 2015 Community
  • \opencv-4.3.0\build\install\x64\vc15\bin
    • 64bit
    • build by Visual Studio 2017 Community

トラブルシューティング

エラー発生タイミング エラーメッセージ 対応
ビルド時 外部シンボル XXX は未解決です リンカー/入力/追加の依存ファイルが不足している
実行時 xxxxx.dll'、またはその依存関係の一つが読み込めませんでした 環境変数に.dllのパスを通す
実行時 間違ったフォーマットのプログラムを読み込もうとしました AnyCpu,x64/x86それぞれの構成が正しいことを確認する。また実行ファイル.exe/.dllの出力先が正しいことを確認する

参考サイト

About

C#からC++ネイティブを使う方法


Languages

Language:C++ 49.0%Language:C# 34.2%Language:C 16.7%