C# 构建C++;统一插件
尝试创建我的第一个插件。 cpp代码为: 标题:C# 构建C++;统一插件,c#,c++,unity3d,dll,C#,C++,Unity3d,Dll,尝试创建我的第一个插件。 cpp代码为: 标题: #pragma once #ifndef __MY_DLL_H #define __MY_DLL_H extern "C" int add_1(int number); #endif 资料来源: //FirstDLL.cpp #include "FirstDLL.h" extern "C" int add_1(int number) { return number + 1; } 然后我编译并将DLL放入Assets/Plugin
#pragma once
#ifndef __MY_DLL_H
#define __MY_DLL_H
extern "C" int add_1(int number);
#endif
资料来源:
//FirstDLL.cpp
#include "FirstDLL.h"
extern "C" int add_1(int number) {
return number + 1;
}
然后我编译并将DLL放入Assets/Plugins
文件夹,DLL文件是FirstDLL.DLL
。从unity方面来看,我有一个简单的组件C#脚本:
using UnityEngine;
public class MyBehaviour : MonoBehaviour {
// Use this for initialization
[Header("Nuts!")]
public int my_curr_val;
void Start () {
}
// Update is called once per frame
void Update () {
print(add_1(my_curr_val));
}
[DllImport("FirstDLL")]
public static extern int add_1(int number);
}
但当我尝试运行脚本时,会出现以下错误:
插件:加载“Assets/Plugins/FirstDLL.dll”失败,出现错误
'此操作仅在应用程序容器的上下文中有效。
'.
插件:加载“Assets/Plugins/FirstDLL.dll”失败,错误为“此操作仅在应用程序容器的上下文中有效”。
'.
DllNotFoundException:FirstDLL
mybehavior.Update()(位于Assets/mybehavior.cs:17)
文档似乎很差,有什么建议吗?
有,但不确定我做错了什么。我已经尝试创建了几个解决方案(windows universal platform、windows 8.1等)仍然不起作用。您试图在非UWP环境中加载UWP插件,这是因为您构建dll的方式
此篇文章描述了如何在Unity中创建、编译和编译C++插件。 用于此目的的软件版本(也适用于其他旧版本。仅在将来有更新和不同的UI时提及此信息):
- Microsoft Visual Studio 2015
- Unity 2017.2.0f3
<强> b。选择C++文件(.CPP),键入文件“FieldLL.CPP”的名称,然后单击Add。
示例C++测试源:
#include "FirstDLL.h"
int add(int num1, int num2)
{
return num1 + num2;
}
int multiply(int num1, int num2)
{
return num1 * num2;
}
int substract(int num1, int num2)
{
return num1 - num2;
}
int divide(int num1, int num2)
{
return num1 / num2;
}
A。创建头文件: 这应该放在头文件文件夹中。右键单击头文件-->添加-->新项目 B。选择头文件(.h),键入文件名“FirstDLL.h”,然后单击添加 对应标题的示例:
#ifndef FIRSTDLL_NATIVE_LIB_H
#define FIRSTDLL_NATIVE_LIB_H
#define DLLExport __declspec(dllexport)
extern "C"
{
DLLExport int add(int num1, int num2);
DLLExport int multiply(int num1, int num2);
DLLExport int substract(int num1, int num2);
DLLExport int divide(int num1, int num2);
}
#endif
就这样。现在可以在那里编写C++插件代码。
6。确保将构建设置为release,并将平台设置为64位
如果使用32位,请将平台设置为x86
7。构建插件:
转到构建-->构建解决方案
8。导入Unity:
PC、Mac和Linux单机版:
将64位dll文件放入Assets/Plugins
文件夹
如果您只想支持32位,请将插件放入Assets/Plugins/x86
如果您想支持universal(32位和64位平台),那么构建dll并将其放入Assets/Plugins/x86_64
文件夹中
安卓系统:
可以从构建
要从Visual Studio生成,请执行以下操作:
A。转到文件-->新建-->项目
B。转到安装->模板-> Visual C++,然后跨平台。点击安装Android支持C++(更新X)。然后按照说明安装
C。转到安装->模板-> Visual C++ ->跨平台。然后是安卓。选择Dynamic Shard Library(Android),然后键入项目名称并单击Ok。现在,您可以跳回步骤<强> 5×<强>继续在C++中进行编码。
将Android插件文件(不是dll)放入Assets/Plugins/Android
文件夹。
支持的C++插件扩展<代码>。所以 ./P>
注意:如果Android插件的名称是libFirstDLL lib.so
,那么从C#中引用它时,请删除lib
前缀和.so
。在这种情况下,它将是[DllImport(“FirstDLL”)]
,而不是#9中的
如果您同时拥有armeabi-v7a
和x86
Android。那么
插件将分别放入Assets\plugins\Android\libs\armeabi-v7a
和Assets\plugins\Android\libs\x86
文件夹中
iOS
可以从构建,也可以将源文件包含到Unity中。您也可以使用VisualStudio创建它。只需遵循Android的步骤,但使用安装iOS支持C++(更新X),而不是安装Android支持C++(更新X)。请注意,您需要Mac计算机为iOS构建或使用虚拟机。完成此操作后,请按照Microsoft说明完成安装,以便Visual Studio可以在Mac OS上进行通信并构建项目
将iOS插件文件(不是dll)放入Assets/Plugins/iOS
文件夹。支持的插件扩展有.a
,.m
,.mm
,.c
,.cpp
必须使用[DllImport(“\uu Internal”)]
而不是[DllImport(“PluginName”)]
或[DllImport(“FirstDLL”)]
,如下所示\9中
<强> 9 < /强>调用CUng+C函数:
C++函数 输出:10。插件错误疑难解答: 1。获取错误: DllNotFoundException: 解决方案1:
DllImport
中指定的DLL名称与DLL名称不匹配。通过重命名它们来确保它们匹配,然后重新启动Unity
[DllImport("FirstDLL")]
public static extern int add(int num1, int num2);
[DllImport("FirstDLL")]
public static extern int multiply(int num1, int num2);
[DllImport("FirstDLL")]
public static extern int substract(int num1, int num2);
[DllImport("FirstDLL")]
public static extern int divide(int num1, int num2);
void Start()
{
Debug.Log("Add: " + add(10, 2));
Debug.Log("Multiply: " + multiply(10, 2));
Debug.Log("Substract: " + substract(10, 2));
Debug.Log("Divide: " + divide(10, 2));
}