1. 程式人生 > >[Unity3d] 在Unity中使用c++ dll

[Unity3d] 在Unity中使用c++ dll


unity版本5.2.3f1,64bit

vs版本2013

雖然在unity中用c#寫dll更方便,在結構和資料型別上也犯不著再蛋疼。但出於某些特殊的原因,我必須挑戰下呼叫c++寫的dll。

這裡我用dll基本就是為了外部的程序能呼叫unity的輸出資料。

.h基本結構:

#ifndef _XX_DLL_H
#define _XX_DLL_H
#endif 
#include <stdio.h>

#if defined (EXPORTBUILD)  
# define _DLLExport __declspec (dllexport)  
# else  
# define _DLLExport __declspec (dllimport)  
#endif  

extern "C" {//在exter "C"中暴露介面

	typedef struct	{
		int x;
                int y;
                int z;
	}Data;
	void _DLLExport add(Data data);//unity輸入資料介面
	Data _DLLExport get();//外部程序獲得資料的介面
}
//下面一段是將dll的執行程序中資料定義為共享屬性,否則當外部程序呼叫時會先將資料複製,就不能同步雙方的資料了
#pragma data_seg("ShareSec")  
Data data= {0,0,0};//把data放入ShareSec段  
#pragma data_seg()  
#pragma comment(linker,"/SECTION:ShareSec,RWS")//為ShareSec段新增共享段讀寫屬性 

用vs編譯,將編譯後的dll檔案放到 Assets中Plugins裡,其實哪裡都行,但要養成好習慣哦(>_<)

然後出現error:……expected 64 bit architecture

其實就是unity的editor告訴你爺tm是64位的,你給老子32位的dll坑呢。

這裡在vs選單欄中:

選擇專案->最底下的屬性->右上角的配置管理器->把平臺改成x64

再編譯下就行

-----------------------------------------------------------------------------------------

如果你一定要作死用32位dll的話

換unity版本或者裝32位的editor,否則別無他法