从DLL文件调用MATLAB

时间:2019-06-27 21:15:32

标签: matlab visual-c++ dll matlab-engine traffic-simulation

我知道这已经发布过,但是没有答案对我有用。

我正在使用VISSIM v10,并制作了一个DLL文件来制作外部驱动程序模型。这运作良好。 但是我想要的是改为在MATLAB中实现算法,并使DLL文件将数据发送到Matlab,然后Matlab计算更新值并将它们发送回DLL。然后,DLL将值发送回VISSIM。

因此,连同VISSIM提供的.vcproj,.h和.cpp文件来创建DLL文件(使用Microsoft Visual Studio 19创建),我在同一项目文件中添加了engine.h文件,以便能够使用引擎例程,但它会为engOpen和engEvalString提供“无法解析的外部符号”错误。我在一个新的.cpp文件中尝试了同样的方法,它可以工作,但是如何将其链接到VISSIM。

我已经添加了所有库,并在属性和配置类型中将目录包含为.dll。

Tettamanti和Varga(2012)提到,这是做到这一点的方法。但这暂时不适合我。帮助吗?

1 个答案:

答案 0 :(得分:0)

要从INSIDE的Vissim外部驱动程序模块DLL中调用MATLAB算法,您可以使用以下选项:

  1. 使用MATLAB Compiler SDK for C/C++-此SDK可帮助将MATLAB算法包装到单独的免版税DLL中,您可以将其与Vissim外部驱动程序模块DLL链接。
    • 这将为您提供与MATLAB运行时最计算效率最高且开销最小的互操作性。
    • 必须具有良好的C / C ++命令,因为您必须自己弄清很多事情;
    • 您需要此功能的MATLAB附加许可证;
    • 您可以将MATLAB DLL免版税(连同MATLAB运行时库一起)分发给没有MATLAB许可证的第三方;
  2. 直接将MATLAB 用作COM自动化服务器在Vissim外部驱动程序模块DLL内-您只需要自己将MATLAB作为进程外COM自动化服务器进行管理,并认真做家务;
    • 这不需要MATLAB附加许可证;
    • 它需要与Vissim安装在同一台计算机上的本地许可MATLAB;
    • 您也需要自己弄清很多事情。
  3. 使用MATLAB External Engine API in C/C++,它实际上是MATLAB进程外COM对象的复杂包装,但是具有现代C ++风格;
    • 这为您节省了自己管理MATLAB COM对象的麻烦,但又需要您精通MODERN C ++(即C ++ 11 / C ++ 14 / C ++ 17)功能。
    • li>
    • 无需其他MATLAB附加许可证;
    • 它需要与Vissim安装在同一台计算机上的本地许可MATLAB。

我看不到存在将Vissim外部驱动程序模块DLL直接与MATLAB集成的简便方法。所有这些都需要非琐碎的C ++和COM知识和技能。

如果您擅长使用现代C ++,我建议您选择选项1-它提供最佳性能。