Unity3d 調用 C++ DLL之 DLL回調Unity3d (C++ DLL回調 C#函數)

來源:互聯網
上載者:User

標籤: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#函數)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.