【寒江雪】Unity中调用C++的函数和类

  这几天一直在搜Unity怎么使用C++写的类,百度出来的都是如何在C++中调C++写的Add方法,很苦恼,然后google第一条就找到了国外网友的答案

  先给出在Unity中怎么调C++写的Add方法的示例,这个示例已经是全网传遍了的。

//	Add.cpp
extern "C" _declspec(dllexport) int Add(int x, int y);

int Add(int x, int y) {
	return x + y;
}
public class CallCpp : MonoBehaviour {

	[DllImport("UnityCall", EntryPoint = "Add")]
	public static extern int Add(int x,int y);
    
    void Start () {
		Debug.Log(Add(1,2));
	}
}

  然后是如何在Unity中使用C++写的类,直接导出是不行的,而某外国网友提供的方法中,是使用函数来代替类的相关方法,类还是那个类,这是改用函数来是用来了,思路就像是用C来实现面向对象,实现比较简单,也很巧妙。

  首先随便定义一个类

//	Echo.h
#pragma once
class Echo {
public:
	Echo(float xx = 0.0f);
	~Echo();
	float x;
	void setX(float);
	float getX();
};
//	Echo.cpp

#include "Echo.h"

Echo::Echo(float xx) {
	this->x = xx;
}

Echo::~Echo() {

}

void Echo::setX(float xx) {
	this->x = xx;
}

float Echo::getX() {
	return this->x;
}

  然后写相关函数来操作类的指针,还包括指针的回收

#include "Echo.h"
extern "C" {
	_declspec(dllexport) Echo* GenerateEcho(float x);
	_declspec(dllexport) void setX(Echo* echo, float x);
	_declspec(dllexport) float getX(Echo* echo);
	_declspec(dllexport) void ReleaseEcho(Echo *echo);

	Echo * GenerateEcho(float x)
	{
		return new Echo(x);
	}

	void setX(Echo * echo, float x)
	{
		echo->setX(x);
	}

	float getX(Echo * echo)
	{
		return echo->getX();
	}

	void ReleaseEcho(Echo * echo)
	{
		echo->~Echo();
		delete echo;
	}

}

  在Unity中导入这些函数使用就行了,这也暗示了可以使用C#来封装这些函数,写成相应的同名类。

public class CallCpp : MonoBehaviour {
    [DllImport("UnityCall")]
	public static extern IntPtr GenerateEcho(float x);
	
	[DllImport("UnityCall")]
	public static extern void setX(IntPtr echo,float x);
	
	[DllImport("UnityCall")]
	public static extern float getX(IntPtr echo);
	
	[DllImport("UnityCall")]
	public static extern void ReleaseEcho(IntPtr echo);
    
    private IntPtr echo;
    
    // Use this for initialization
	void Start () {
		this.echo = GenerateEcho(3.0f);
		Debug.Log(getX(echo));
		setX(echo,2.5f);
		Debug.Log(getX(echo));
		ReleaseEcho(echo);
	}
}
寒江雪
Date:2019.4.19
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值