【C++/CLI】 C++ / CLI ~ 入門編 / C# から C++ / CLI のDLL を呼び出す ~

■ はじめに

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();
    }
  }
}


関連記事

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