Main Content

Microsoft Visual Studio 项目中使用动态库

此示例说明如何创建和配置一个简单的 Microsoft® Visual Studio® 项目,调用由 MATLAB® Coder™ 生成的动态库 (DLL)。该示例使用 Microsoft Visual Studio 2017。在 Microsoft Visual Studio 的其他版本中,所用过程可能有所不同。

生成 C 动态库

  1. 创建一个 MATLAB 函数 foo

    function c = foo(a) 
    %#codegen
      c = sqrt(a);
    end
    
  2. foo.m 的形式将其保存在本地可写文件夹中,例如 C:\dll_test

  3. 使用同一编译器的同一版本来生成用于编译 Microsoft Visual Studio 项目的 DLL。否则,您可能会遇到链接错误。

    对于此示例,请使用 Microsoft Visual Studio 2017 编译器。要选择代码生成器使用的编译器,请在命令行中输入 mex -setup。有关详细信息,请参阅支持和兼容的编译器

  4. 为 MATLAB 函数 foo 生成 DLL。-args 选项指定输入 a 为双精度实数。

    codegen -config:dll foo -args {0} -report

    在 Microsoft Windows® 系统上,codegen 在默认文件夹 C:\dll_test\codegen\dll\foo 下生成一个 C 动态库 foo.dll 以及支持文件。

创建 Microsoft Visual Studio 项目

Microsoft Visual Studio 中,创建一个空项目:

  1. 选择文件 > 新建 > 项目

  2. 选择已安装 > Visual C++ > 常规,然后选择空项目。输入项目名称。

  3. 点击确定

创建使用该库的 main.c 文件

编写一个使用 foo.dllmain.c 文件。main.c 函数必须:

  • 包括生成的头文件,头文件包含库函数的函数原型。

  • 在最后一次调用库函数后调用终止函数。

默认情况下,代码生成器会在生成的 C/C++ 入口函数开始处包含一个对初始化函数的调用。因此,您不需要从 main.c 中调用初始化函数。请参阅Use Generated Initialize and Terminate Functions

要创建该文件,请执行下列操作:

  1. 解决方案资源管理器中,右键点击源文件文件夹,然后选择添加 > 新项目

  2. 选择 C++ 文件 (.cpp)。在名称字段中,输入 main.c

  3. 点击添加

  4. 输入代码:

    #include "foo.h"
    #include "foo_terminate.h"
    #include <stdio.h>
    
    int main()
    {
      printf("%f\n", foo(26));
      foo_terminate();
      getchar();
      return 0;
    }

配置平台

MATLAB Coder 自动使用配置为编译 64 位 DLL 的工具链。默认情况下,Microsoft Visual Studio 配置为针对 Win32 平台进行编译。您必须将编译平台更改为 x64 以匹配生成的 64 位 DLL。在 Microsoft Visual Studio 中:

  1. 选择编译 > 配置管理器

  2. 活动解决方案平台设置为 x64

如果要在 64 位平台上编译 32 位 DLL,必须使用 32 位工具链定义。请参阅使用 MSVC 工具链在 64 位 Windows® 平台上编译 32 位 DLL

指定外部依赖项

要编译您的项目,编译器需要相关联的头文件。链接器需要生成的 .lib 文件。

  1. 解决方案资源管理器中突出显示您的项目,然后选择项目 > 属性

  2. 代码生成器在文件 rtwtypes.h 中生成类型,该文件包括文件 tmwtypes.h。此文件存储在 matlabroot\extern\include 中,其中 matlabroot 是 MATLAB 安装的根目录。要返回根目录,请在命令行窗口中输入 matlabroot

    配置属性 > C/C++ > 常规下,将文件夹 C:\dll_test\codegen\dll\foomatlabroot\extern\include 添加到附加包含目录。用分号分隔条目。

  3. 配置属性 > 链接器 > 输入下,将 foo.lib 添加到附加依赖项

  4. 配置属性 > 链接器 > 常规下,将文件夹 C:\dll_test\codegen\dll\foo 添加到附加库目录

编译并运行可执行文件

  1. 编译可执行文件。选择编译 > 生成解决方案

  2. 使 DLL 可供可执行文件访问。将 foo.dll 复制到包含可执行文件的文件夹中,或将包含 foo.dll 的文件夹添加到您的路径中。

  3. 运行可执行文件。验证输出是否与预期相符。

相关主题