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

时间:2022-05-19 19:02:49


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,否则别无他法