標籤:unity3d callback c++
上篇 Unity3d 調用C++ DLL (Win平台) 介紹了簡單的 Unity3d 調用 C++ DLL的方法,但是這樣是不夠的,這裡再講下通過函數指標讓 C++ DLL中回調 Unity3d 的方式。
轉自http://blog.csdn.net/huutu 星環遊戲 http://www.thisisgame.com.cn
建立DLL 以及在 Unity3d 中調用 DLL 中函數在上篇中介紹了。
首先,在C#中是沒有函數指標的,我們使用 Delegate 。
轉自http://blog.csdn.net/huutu 星環遊戲 http://www.thisisgame.com.cn
我們來建立 DLL
在上篇的工程中修改。
Calculate.h
# define _DLLExport __declspec (dllexport) //標記為匯出函數;//定義函數指標;typedef void (__stdcall *CPPCallback)(int tick);extern "C" void _DLLExport SetCallback(CPPCallback callback);extern "C" long long _DLLExport dlltest();
Calculate.cpp
#include "Calculate.h"long long dlltest(){long long a = 1;int b = 0;while(b<1000000000){a=a+b;b++;}return a;}void SetCallback(CPPCallback callback){int tick=1223;callback(tick);}
在DLL中定義函數SetCallback() 來設定回呼函數。
轉自http://blog.csdn.net/huutu 星環遊戲 http://www.thisisgame.com.cn
在Unity3d 中使用DLL
using UnityEngine;using System.Collections;using System.Runtime.InteropServices;public class NewBehaviourScript : MonoBehaviour {[DllImport ("TestDLL")]private static extern long dlltest();[DllImport ("TestDLL")]private static extern void SetCallback(CSCallback callback);public delegate void CSCallback(int tick);static CSCallback callback;// Use this for initializationvoid Start () {callback = CSCallbackFuction;}static void CSCallbackFuction(int tick){Debug.Log ("CSCallbackFuction "+tick.ToString());}void OnGUI(){if(GUI.Button(new Rect(100,100,200,200),"Test DLL")){long before=System.DateTime.Now.Ticks;Debug.Log("dlltest="+ dlltest());Debug.Log("take "+(System.DateTime.Now.Ticks-before));}if(GUI.Button(new Rect(100,300,200,200),"SetCallback")){long before=System.DateTime.Now.Ticks;SetCallback(callback);Debug.Log("take "+(System.DateTime.Now.Ticks-before));}if(GUI.Button(new Rect(300,300,200,200),"Test Mono")){long before=System.DateTime.Now.Ticks;Debug.Log("monotest="+ monotest());Debug.Log("take "+(System.DateTime.Now.Ticks-before));}}// Update is called once per framevoid Update () {}long monotest(){long a = 1;int b = 0;while(b<1000000000){a=a+b;b++;}return a;}}
轉自http://blog.csdn.net/huutu 星環遊戲 http://www.thisisgame.com.cn
運行成功
轉自http://blog.csdn.net/huutu 星環遊戲 http://www.thisisgame.com.cn
樣本工程下載:
http://pan.baidu.com/s/1jG499HW
轉自http://blog.csdn.net/huutu 星環遊戲 http://www.thisisgame.com.cn
Unity3d 調用 C++ DLL之 DLL回調Unity3d (C++ DLL回調 C#函數)