12
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unity(C#)でC++で作成されたDLLを使用する基本的な方法

Last updated at Posted at 2018-01-21

前提

開発環境:Unity 2017 + Visual Studio Community 2017
言語:Unity C#, C++

DLLを作成するためのVisual Studioプロジェクトを作成する

今回はC++を使用してDLLを作成するため、
「ファイル」「新規作成」「プロジェクト」ででてくるウィンドウの「ダイナミックリンクライブラリ(DLL)」
を選択する。
自身の環境ではDllForDebugというプロジェクト名で行いました(名前やソリューション等の説明は割愛)。

ソースファイルの編集

「プロジェクト名.cpp」というファイルがソリューションエクスプローラにて確認できるので、そこに必要な関数を書き込む。
自身のソースファイルを一部抽出したので不自然な関数ですが、int型の4を返す関数「add_b」を定義しています。

DllForDebug.cpp
#include "stdafx.h"
#include "iostream"

// 後述するヘッダーファイル
#include "DLLForDebug.h"

// 4を返す関数
int add_b()
{
    int b = 4;
    return b;
}

ヘッダーファイルの設定

ヘッダーファイルを新規作成し、以下のように記述する。
今回はプロジェクト名と同じファイル名にしています。

DLLForDebug.h
extern "C"
{
    __declspec(dllexport) int add_b();
}

ビルド

プロジェクトのプロパティ、もしくはデフォルトの場合上部にプラットフォームを選択する場所があるので、64bitにしてビルドする。
ここはUnityの環境に合わせる必要がある。

Unity側の設定

今回Unityで簡単に動かすためのプロジェクトを新規作成する。
AssetsフォルダにビルドしたDLLとC#スクリプトを作成する。
SceneにObjectを作成(自分の場合Empty)し、先述のC#スクリプトを追加して実行時に走るようにする。
自身の環境の場合、「RunDLL.cs」という名前にしました。

RunDLL.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// IntPtr型を使用するのに必要
using System;

// Dllの読み込みに必要
using System.Runtime.InteropServices;

public class RunDll : MonoBehaviour
{
    // Dll内の関数を宣言
    [DllImport("DllForDebug")]
    private extern static int add_b();

    // Use this for initialization
    void Start()
    {
      Debug.Log(add_b())
    }

    // Update is called once per frame
    void Update()
    {

    }
}

結果

Consoleの場所に4というログが出ているはずです。

12
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?