如何构建在unity/c#中导入的c++ dll
Posted
技术标签:
【中文标题】如何构建在unity/c#中导入的c++ dll【英文标题】:How to build a c++ dll imported in unity/c# 【发布时间】:2021-05-30 16:25:44 【问题描述】:我想构建一个 c++ dll,但我发现我的 dll 可能有问题。我刚刚为 ARM64 构建了一个简单的函数,将其部署到 Hololens2 中。 头文件.h文件:
#include "pch.h"
#ifdef MYRESEARCHMODE_EXPORTS
#define DllExport __declspec(dllexport)
#else
#define DllExport _declspec(dllimport)
#endif
#ifdef _cplusplus
extern "C"
#endif
class DllExports
public:
DllExport static int __stdcall DOUT();
;
#ifdef _cplusplus
#endif
The .cpp file like this:
#define MYRESEARCHMODE_EXPORTS
#include "pch.h"
#include"myResearchMode.h"
int __stdcall DllExports::DOUT()
return 123;
并且我使用了Dumpbin来测试它是否构建成功。 然后我在 Unity/Plugin 中导入它
[DllImport("myResearchMode.dll", EntryPoint = "?DOUT@DllExports@@SAHXZ ", CallingConvention = CallingConvention.Cdecl)]
public static extern int DOUT();
但我发现结果未能显示。我想我的 dll 有问题,我忘记设置一些设置了吗?或者错误在哪里?
【问题讨论】:
docs.unity3d.com/Manual/NativePlugins.html 我建议您先看看您是否可以在本地运行您的 DLL 的 windows\linux 变体。然后在您的目标设备上尝试官方示例:github.com/Unity-Technologies/NativeRenderingPlugin 一旦两者都有效,您可以调查您可能缺少什么的差异。 【参考方案1】:您是如何创建 C++ DLL 的?在 Visual Studio 中开始创建 C++ DLL 时,您选择了哪个项目模板作为脚手架?如果您将 C++ DLL 创建为 Win32 二进制文件,它会在 HoloLens2 上运行时引发异常,因为 Unity 在构建 WSA 项目时不会包含标准 Win32 二进制文件。因此,建议重新创建或移植本机 win32 DLL 到 UWP DLL,请参阅此处的指导:To port a native DLL to the UWP without creating a new project
【讨论】:
以上是关于如何构建在unity/c#中导入的c++ dll的主要内容,如果未能解决你的问题,请参考以下文章