【发布时间】:2013-12-02 23:38:48
【问题描述】:
我是一名开发严肃游戏的游戏开发者。由于 MATLAB (Simulink) 模型,我进行了一些数据模拟,该模型是由现在离开团队的人创建的。所有这些数据模拟都会生成有用的数据,并允许我在需要时查询和检查变量。我需要使用此模型构建游戏。所以我使用 Simulink 代码生成器在 C++ 中为我的模型生成代码。这是本机 C++ 并且是程序性的。我重写它的代码量很大,因此我避免这样做。我需要在我正在开发游戏的引擎 Unity3d 中使用此代码。
长话短说。我需要在 Unity3d 中加载本机 C++ dll(由 Simulink 生成)。
我尝试了什么:
我尝试使用 Unity3d 的原生插件 API。我有专业版,它似乎没有检测到 dll,只是抛出异常。我正在使用 extern 关键字公开所需的变量,但仍然没有运气。
我尝试按照本教程 (http://blogs.abo.fi/alexeevpetr/2011/11/18/simplified-building-simulink-generated-c-code-in-visual-studio/) 进行操作,但它会引发错误并且无法构建,这可能是因为 MATLAB 的版本。
我也考虑过使用包装器,但这意味着我要重新重写大部分代码。
【问题讨论】:
-
我从未尝试过,但我的理解是 MATLAB 提供了
mex作为 MATLAB 运行时库和编译器之间的包装,因此使用mex生成的编译对象不仅包含标准 C++但它是“你的代码 + matlab 库”,它仍然需要 MATLAB 运行时库才能运行。此外,许可您的代码也可能存在问题,因为只有购买 MATLAB 的用户才能合法地运行您的代码。 -
我知道 MATLAB 提供了 mex,但是当我在 VS2010 中打开项目时,VS2010 并没有说该项目链接到任何 MATLAB 文件。 MATLAB 被许可在我的用户帐户上运行,所以我忽略了这一点。
-
Simulink Coder 生成独立代码,它不包含任何 MATLAB 库的链接,因此 @user2485710 的注释与此处无关。您正在使用什么代码生成目标?唯一自动生成 dll 的是 Embedded Coder 中的 ertdll 目标。您是使用它,还是仅使用标准 Simulink Coder 生成 C++ 代码,然后自己编译成 dll?
-
@PhilGoddard 我可以很容易地接受我在这方面错了的事实,但是,如果 SL 使用任何 C++ 标准生成 C++ 代码(显然没有来自 Mathworks 的话),那有什么意义呢?
mex? -
这里没有足够的篇幅来详细描述这些,但是:mex(MATLAB 可执行文件)是编译 C/C++/Fortran 代码的机制,因此可以从 MATLAB 中调用它; MATLAB Coder 是一个将 m 代码(不是 Simulink)转换为完全独立于 MATLAB 的 C 代码的工具; MATLAB Compiler 是将 m 代码(不是 Simulink)转换为完全依赖于 MATLAB 引擎的应用程序的工具; Simulunk Coder 是将 Simulink 模型(不是 MATLAB)转换为独立于 MATLAB 或 Simulink 的 C 代码的工具
标签: c++ dll unity3d native simulink