[Unity3d] 在Unity中使用c++ dll
阿新 • • 發佈:2019-02-17
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,否則別無他法