この記事は2020年07月01日に投稿しました。
目次
リンク
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC#からC++の関数を呼び出す方法についてです。
2. C#からC++の関数を呼び出す
C#からC++の関数を呼び出すには以下のような実装にします。
- C++の関数は「extern "C" __declspec(dllexport) ~」で定義します。
- C#側は[DllImport("<DLL名>", CallingConvention = CallingConvention。Cdec)]で使用するC++のDLLを指定します。
- C++の関数のシグネチャを「static extern~」で定義します。
実装例
CPPDll.h
#pragma once // C++の関数は、extern "C" __declspec(dllexport)~ で定義します。 extern "C" __declspec(dllexport) void func();
CPPDll.cpp
#include "CPPDll.h" #include <iostream> void func() { std::cout << "Hello world!" << std::endl; }
Program.cs
using System; using System.Runtime.InteropServices; namespace CSharpDllImport { class Program { // C++のDLLをインポートします。 // CallingConvention = CallingConvention.Cdeclを指定します。 [DllImport("CPPDll.dll", CallingConvention = CallingConvention.Cdecl)] // 呼び出すC++関数のシグネチャをstatic externを付けて定義します。 static extern void func(); static void Main(string[] args) { // C++の関数を呼び出します。 func(); Console.ReadKey(); } } }
実行結果
Hello world!
3. おわりに
アプリケーションはC#で作成する予定ですが、C++の資産を流用するため、C#からC++の関数の呼び出し方法を調べてみました。
リンク
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688