こんにちは、Unityエンジニアのオオバです。
C#とC++間のデータやりとりを
実装したことありますか?
Unityが提供する機能を普通に使っているだけだと、
あまり出てこないシチュエーションかも知れません。
Unityが提供していない機能にアクセス といった
Unityの外へ一歩出ようとすると
C++や別の言語が必要になります。
今回はC#とC++間のデータのやり取りシリーズ2回目。
C#からC++に対して int型 を渡してみます。
環境構築は前回記事を参考にどうぞ。
C#からC++に文字列を渡す方法
C++はint型で受け取り可能
C++へのint型の送信はシンプルです。
C#からC++へそのまま渡すことができます。
なぜならint型などのプリミティブ型変数を保持するメモリは
C++側と同じアンマネージドメモリだからです。
つまり値を変換する必要がないのです。
- float
- double
- long
このようなプリミティブ型は
int型同様そのままC++へ渡せます。
では具体的な処理を解説していきます。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
C++はint型で受け取るメソッド定義
C#と同じint型で受け取れるため
C++のコードはとてもシンプルです。
C++側のコードから見ていきましょう。
💻ソースコード : TestDll.cpp
#include "stdafx.h"
#include <iostream>
// C#から実行される関数の定義
DllExport void TestInt(const int value);
void TestInt(const int value)
{
std::cout << value << std::endl;
}
前回の文字列を渡す際はポインタで受け取っていましたが、
今回はint型、プリミティブ型です。
C#からプリミティブ型を渡す際は、
ポインタではなく値型でそのまま受け取れます。
C#からint型をそのまま送信する
C#のコードを見ていきましょう。
[DllImport("TestDll.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void TestInt(int value);
static void Main()
{
TestInt(999);
}
int型の値をそのまま送るだけ です。
特に説明はありません。
他のプリミティブ型
プリミティブ型はint型問わず
そのままC++へ値を送信できます。
以下は浮動小数点float型の送信例です。
C++の処理
💻ソースコード : TestDll.cpp
#include "stdafx.h"
#include <float.h>
#include <iostream>
// C#から実行される関数の定義
DllExport void TestFloat(const float value);
void TestInt(const float value)
{
std::cout << value << std::endl;
}
C#の処理
[DllImport("TestDll.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void TestInt(int value);
static void Main()
{
TestFloat(100.5f);
}
このようにfloat型をC#からC++に送信できます。
まとめ : C#からC++にintを渡す方法
C#とC++間でのint型やり取りは、
とくに意識することはありません。
- C#、C++ともに
int
型を定義 - int型の値をそのまま送信
- プリミティブ型はそのまま送信可
C#/C++間でやり取りする独特な記述に慣れていきましょう。
この記事が気に入ったらフォローしよう
- VisualStudioCommunity2017 v15.9.8
- Windows10