■ はじめに
https://blogs.yahoo.co.jp/dk521123/38070421.htmlに記載したが、C++のDLLファイルを参照追加した際に エラー「' XXX.dll' への参照を追加できませんでした。・・・」が表示された。 対応するために、C++ / CLI が必要そうだったので、調べてみる。
■ C++ / CLI
CLI : Common Language Infrastructure (共通言語基盤)* .NET Frameworkの CLI 上で実行するC++を拡張したプログラミング言語
■ 作成方法
作成環境例
* OS : Windows10 * VS : Microsoft Visual Studio Community 2017
作成手順
[1] Visual Studio を立ち上げて、[ファイル]-[新規作成]-[プロジェクト]を選択 [2] [Visual C++]-[その他]-[空のプロジェクト] を選択し、 名前欄にプロジェクト名(ここでは「SampleCPlusPlus」)を入力し、「OK」ボタン押下 [3] プロジェクト名を右クリックし、[プロパティ]を選択 [4] [全般]を選択し、以下を選択 + 構成の種類:ダイナミック ライブラリ (.dll) + 共通言語ランタイムサポート:共通言語ランタイム サポート (/clr) [5] プログラムを作成する(以下の「■ サンプル」を参照) [6] ビルドして、DLLファイルを作成する
■ サンプル
* C# => CLI/C++ を使う
C++ / CLI
Person.h#pragma once namespace SampleDemo { public ref class Person { private: System::String^ name; public: // コンストラクタ Person(System::String^ name); System::String^ SayHello(); }; }Person.cpp
#include "Person.h" SampleDemo::Person::Person(System::String ^ name) { this->name = name; } System::String ^ SampleDemo::Person::SayHello() { return "Hello, " + this->name + "!!"; }
C#
* C++ をビルドし、DLLファイルを作成し、参照追加をしておく * プロジェクトを右クリックし、[ビルド]で「プラットフォームターゲット:x64」を選択Form.cs
using SampleDemo; using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Person person = new Person("Mike"); this.Text = person.SayHello(); } } }
参考文献
http://www.wisdomsoft.jp/371.htmlhttps://ambiesoft.fam.cx/cppcli/
C++、C++/CLI、C# 3つの言語の比較
https://so-zou.jp/software/tech/programming/language-comparison/
関連記事
C++/CLI
【C++】【C++/CLI】文字列の扱いhttps://blogs.yahoo.co.jp/dk521123/32892075.html
その他
C# から C++ のDLL を呼び出す際のトラブルシュートhttps://blogs.yahoo.co.jp/dk521123/38070421.html
C# から C++ のDLL を呼び出す (C# => C++)
https://blogs.yahoo.co.jp/dk521123/37078399.html