第一部分 MATLAB与C/C++混合程序设计基础 3
第1章 MATLAB M语言程序设计基础 3
1.1 本章导读 3
1.2 MATLAB环境 3
1.2.1 命令行窗口(Command Window) 4
1.2.2 代码编辑器(Editor) 6
1.2.3 工作空间窗口(Workspace) 9
1.2.4 历史命令窗口(Command History) 9
1.2.5 历史命令保存指令(diary) 12
1.2.6 使用MATLAB环境的图形界面完成操作 12
1.2.7 MATLAB帮助 16
1.2.8 代码输入提示 17
1.3 MATLAB M语言基础 18
1.3.1 MATLAB脚本文件(Script文件) 18
1.3.2 MATLAB运算符与表达式 20
1.3.3 MATLAB函数 24
1.3.4 MATLAB M语言中的向量运算 26
1.3.5 MATLAB的程序控制 32
1.3.6 MATLAB程序异常处理 36
1.3.7 面向对象的程序设计 37
1.4 MATLAB常用的数据类型 41
1.4.1 数值阵列 42
1.4.2 字符阵列 45
1.4.3 逻辑阵列 46
1.4.4 元组阵列 47
1.4.5 结构体阵列 50
1.4.6 函数句柄阵列 52
1.5 MATLAB常用数据可视化功能 54
1.5.1 使用figure函数创建图形窗口 54
1.5.2 绘制曲线 55
1.5.3 使用area函数绘制面积图 61
1.5.4 使用quiver或quiver3函数绘制向量图 66
1.5.5 显示图像数据 68
1.5.6 显示三维曲面数据 69
第2章 C语言和C++语言程序设计基础 71
2.1 本章导读 71
2.2 编译环境 71
2.3 编辑器 72
2.4 注释 73
2.5 文件包含(include) 74
2.6 定义和声明 74
2.7 第一个C/C++语言程序 75
2.8 编译和运行 77
2.9 数据类型 78
2.9.1 常量 78
2.9.2 变量 78
2.9.3 指针 79
2.9.4 内存的分配与释放 82
2.9.5 数组 82
2.9.6 字符串 84
2.9.7 枚举类型 86
2.9.8 结构体 87
2.10 操作符 88
2.11 程序结构 91
2.12 类与对象 97
2.13 函数模板和类模板 104
2.14 C++/CLI 114
第3章 MATLAB与C/C++语言对照 117
3.1 本章导读 117
3.2 MATLAB语言 117
3.3 C语言 122
3.4 C++语言 130
3.5 MATLAB语言、C语言和C++语言实现矩阵操作的比较 139
第4章 动态链接库基础 142
4.1 本章导读 142
4.2 为什么使用动态链接库 142
4.3 C/C++语言实现动态链接库 143
4.4 C语言与C++语言动态链接库的差异 147
4.5 动态链接库的调用方式 147
4.5.1 隐式链接 147
4.5.2 显式链接 149
4.6 在MATLAB环境下创建动态链接库 152
第5章 开发与调试环境说明 154
5.1 本章导读 154
5.2 MATLAB环境 154
5.3 MATLAB Coder图形界面 155
5.4 MATLAB编译器 155
5.5 mex命令 156
5.6 mbuild命令 158
5.7 C/C++语言集成开发环境 160
5.8 Dependency工具 163
第二部分 在MATLAB中调用C/C++程序 167
第6章 MATLAB通过MEX文件调用C/C++程序 167
6.1 本章导读 167
6.2 MEX文件 167
6.3 MEX文件与M文件的关系 168
6.4 MEX文件实例 168
6.5 MEX文件结构 170
6.6 编译MEX文件 171
6.7 采用C++语言创建MEX文件 172
6.8 在MEX文件中实现图形界面功能 173
6.9 在Visual C++中调试MEX文件 179
6.9.1 利用Visual C++6.0调试MEX文件 179
6.9.2 利用Visual C++2010调试MEX文件 184
第7章 MATLAB通过动态链接库调用C/C++程序 188
7.1 本章导读 188
7.2 动态链接库 188
7.3 MATLAB动态链接库的基本操作 189
7.3.1 加载动态链接库 189
7.3.2 查看动态链接库信息 190
7.3.3 利用mbuild生成动态链接库 191
7.3.4 调用动态链接库中包含的函数 194
7.4 MATLAB动态链接库的操作函数 195
7.4.1 loadlibrary 195
7.4.2 unloadlibrary 197
7.4.3 libfunctions 197
7.4.4 libfunctionsview 198
7.4.5 libisloaded 198
7.4.6 calllib 198
7.4.7 libpointer 199
7.4.8 libstruct 199
7.5 MATLAB与动态链接库的参数传递和转换 200
7.5.1 MATLAB与C/C++语言数据类型的对照关系 200
7.5.2 MATLAB与动态链接库基本参数的直接传递 201
7.5.3 利用libpointer传递指针参数 203
7.5.4 传递MATLAB阵列类型数据 208
7.5.5 利用libstruct传递结构体参数 210
7.5.6 传递枚举类型参数 212
7.6 实例1:调用第三方提供的动态链接库完成文件读取 213
7.7 实例2:用户创建动态链接库完成文件操作 215
第8章 MATLAB通过可执行程序调用C/C++程序 221
8.1 本章导读 221
8.2 在MATLAB中执行外部程序 221
8.3 实例1:通过外部程序返回文件信息 222
8.4 实例2:通过外部程序转换文件格式 227
第9章 MATLAB通过ActiveX调用C/C++程序 233
9.1 本章导读 233
9.2 ActiveX简介 233
9.3 MATLAB调用ActiveX组件 234
9.4 实例:调用ActiveX打开文件 239
第三部分 MATLAB与C/C++语言的数据和函数接口 245
第10章 MATLAB与C/C++语言混合编程常用的数据类型 245
10.1 本章导读 245
10.2 size_t类型 245
10.3 mwIndex,mwSignedIndex和mwSize类型 245
10.4 mxChar和mxLogical类型 246
10.5 mxClassID类型 246
10.6 mxComplexity类型 247
10.7 mxArray类型 248
10.8 特殊常量 248
10.9 mwArray类 250
10.9.1 mwArray类的基本操作 251
10.9.2 mwArray类操作的详细说明 252
10.10 mwString类 258
第11章 在C/C++语言中操作MATLAB阵列的函数 260
11.1 本章导读 260
11.2 数值阵列操作函数 260
11.2.1 创建数值阵列 260
11.2.2 数值阵列的数据操作 262
11.2.3 标量数据的操作 264
11.3 字符串阵列操作函数 264
11.3.1 创建字符串阵列 264
11.3.2 字符串阵列转换为C语言字符串 266
11.3.3 获取字符阵列的数据 269
11.4 逻辑型阵列操作函数 269
11.5 稀疏矩阵操作函数 270
11.5.1 创建稀疏矩阵的操作函数 271
11.5.2 稀疏矩阵索引的操作函数 271
11.6 结构体操作函数 273
11.6.1 创建结构体 273
11.6.2 结构体域的操作 274
11.7 元组阵列操作函数 276
11.8 类对象阵列属性操作函数 278
11.9 内存操作函数 281
11.9.1 内存分配操作函数 281
11.9.2 内存释放操作函数 282
11.9.3 阵列复制操作函数 283
11.9.4 MATLAB内存操作函数与C语言内存操作函数对比 283
11.10 索引、维数和元素个数操作函数 285
11.10.1 线性索引函数 285
11.10.2 维数和元素个数操作函数 286
11.11 MATLAB阵列验证函数(Is函数) 288
11.11.1 判断MATLAB阵列类型 288
11.11.2 其他Is函数 290
11.12 其他操作函数 291
第12章 在C/C++语言中操作MATLAB阵列的方法 293
12.1 本章导读 293
12.2 MATLAB普通数值阵列的操作 293
12.3 稀疏数组阵列(Sparse Array)的操作 295
12.4 MATLAB字符阵列的操作 299
12.5 MATLAB元组阵列的操作 300
12.6 MATLAB结构体阵列的操作 302
12.7 更改MATLAB数值阵列的维数 305
12.8 分析并显示MATLAB阵列的内容 309
第13章 C/C++语言在MEX程序中的专用接口函数 320
13.1 本章导读 320
13.2 工作区变量操作函数 320
13.3 输出警告和错误信息函数 327
13.4 调用MATLAB函数和执行MATLAB命令的函数 328
13.5 操作MEX文件函数 331
第14章 在C/C++程序中操作MATLAB MAT文件 335
14.1 本章导读 335
14.2 MAT文件概要介绍 335
14.3 MAT文件格式 336
14.4 操作MAT文件的mat-API函数 339
14.4.1 MAT文件打开和关闭等操作函数 340
14.4.2 循环获取MAT文件中的变量及其信息 341
14.4.3 获取MAT文件中的变量目录和变量及其信息 342
14.4.4 将阵列写入MAT文件或删除MAT文件中的变量 342
14.5 MAT文件操作方法 343
14.5.1 向MAT文件中写入mxArray变量 343
14.5.2 从MAT文件中读取mxArray变量 348
14.5.3 查看MAT文件中的阵列变量列表 352
14.5.4 遍历MAT文件中的所有阵列变量 354
第四部分 MATLAB编译器的工作原理、发展历程和应用技巧 359
第15章 MATLAB编译器 359
15.1 本章导读 359
15.2 MATLAB编译器的工作原理 359
15.3 MATLAB编译器的发展历程 360
15.4 使用MATLAB编译器的准备工作 362
15.5 mcc编译器的典型应用:独立可执行文件 363
15.5.1 编译过程 363
15.5.2 编译过程详细分析 366
15.5.3 img.ctf文件 367
15.5.4 img_main.c文件 368
15.5.5 使用-m选项 373
15.6 C语言动态链接库 374
15.6.1 编译过程 374
15.6.2 编译过程详细分析 374
15.7 C++语言动态链接库 376
15.7.1 编译过程 376
15.7.2 编译过程详细分析 376
15.8 C语言与C++语言动态链接库的差异 378
15.9 调用MATLAB编译器生成的C/C++语言动态链接库时常用的接口函数 379
15.10 mcc命令选项、宏及捆绑命令文件 381
15.10.1 mcc常用命令选项 381
15.10.2 mcc宏选项 383
15.10.3 捆绑命令文件(bundle file) 384
15.11 MATLAB编译器应用中的常见问题 385
15.11.1 编译Script文件 385
15.11.2 MATLAB编译器关联分析失效的情况 385
15.11.3 在C/C++程序中调用MATLAB内置函数(built-in function) 388
15.11.4 可变参数传递(varargin,varargout) 388
15.11.5 在MATLAB环境下执行与通过MCR执行时的差异 390
15.11.6 获取CTF文件的目录 391
15.11.7 屏幕打印和错误信息显示函数 391
15.12 MATLAB配置工具(Deployment Tool) 396
15.12.1 Deployment Tool工具简介 396
15.12.2 利用MATLAB配置工具编译独立可执行文件 397
15.13 程序发布 399
15.13.1 MCR版本 399
15.13.2 安装MCR 399
15.13.3 独立可执行文件发布需要附加的文件 400
15.13.4 动态链接库发布需要附加的文件 400
第五部分 在C/C++程序中调用MATLAB程序 403
第16章 生成可独立运行的MATLAB程序 403
16.1 本章导读 403
16.2 MATLAB环境下编译独立可执行文件 403
16.2.1 直接编译M文件 403
16.2.2 在MATLAB M文件中调用C/C++函数 404
16.2.3 在C/C++语言中调用由MATLAB *.m文件生成的函数 407
16.3 Visual C++环境下编译独立可执行文件 413
16.3.1 趣味弹球MATLAB M程序 414
16.3.2 去除控制台窗口 418
16.3.3 去除控制台窗口的另一种方法 426
16.3.4 将输出改到Windows窗口上 433
第17章 C/C++程序通过引擎和动态链接库调用MATLAB程序 447
17.1 本章导读 447
17.2 在C++程序中调用MATLAB引擎 447
17.2.1 API函数介绍 447
17.2.2 Visual C++调用MATLAB引擎的实例 448
17.3 Visual C++中调用MATLAB M函数编译后的动态链接库 458
第18章 C/C++程序通过COM组件调用MATLAB程序 471
18.1 本章导读 471
18.2 COM基础知识 471
18.2.1 COM组件 471
18.2.2 对象和接口 472
18.2.3 COM在Windows平台下的实现方式 473
18.3 在Visual C++中调用COM组件 475
18.3.1 COM组件与HRESULT类型 475
18.3.2 COM组件与字符串 476
18.3.3 CLSID和ProgID的相互转换 476
18.3.4 AddRef(),Release(),QueryInterface()接口函数 476
18.3.5 在Visual C++中调用COM组件的步骤 477
18.4 MATLAB编译COM组件的基础知识 479
18.4.1 配置MATLAB C/C++语言编译器 479
18.4.2 使用MATLAB的Deployment Tool工具 479
18.4.3 实现COM组件的方法 480
18.4.4 实现COM组件的属性 481
18.4.5 编译COM组件 481
18.5 C/C++程序调用由Deployment Tool生成的组件 482
18.6 MATLAB COM组件与C/C++程序之间的数据转换 489
18.6.1 VARIANT数据类型 489
18.6.2 COleVariant和_variant_t类 491
18.6.3 SAFEARRAY数据类型 492
18.6.4 SAFEARRAY的创建函数 493
18.6.5 MATLAB数据类型的VARIANT类型表示 494
18.6.6 VARIANT变量与MATLAB阵列的转换规则 495
18.6.7 阵列格式标志(array formatting flags) 498
18.6.8 数据转换标志(data conversion flags) 498
18.7 MATLAB COM工具库 500
18.7.1 简介 500
18.7.2 MWUtil类 500
18.7.3 MWFlags类 501
18.7.4 MWStruct类 502
18.7.5 MWField类 505
18.7.6 MWComplex类 506
18.7.7 MWSparse类 506
18.7.8 MWArg类 507
18.7.9 MATLAB MWComUtil的枚举类型 507
18.8 安装和发布MATLAB COM组件 509
18.9 综合实例 510
18.9.1 实例1:数据转换及数组格式标志的使用 510
18.9.2 实例2:采用MWUtil处理varargin输入和varargout输出 514
18.9.3 实例3:MWStruct和MWField的操作实例 519
18.9.4 实例4:MWComplex操作实例 528
18.9.5 实例5:MWSParse操作实例 532
第19章 C/C++程序通过.NET配件调用MATLAB程序 536
19.1 本章导读 536
19.2 将MATLAB程序编译为.NET配件 536
19.3 在Visual C+++2010中调用.NET配件 537
19.4 Visual C++与MATLAB之间的数据转换 539
19.5 使用MWNumericArray操作数值阵列 540
19.5.1 数值阵列的类型 540
19.5.2 C++索引与MATLAB阵列索引 541
19.5.3 实型阵列和复型阵列 541
19.5.4 创建标量 542
19.5.5 创建矢量 543
19.5.6 创建矩阵 545
19.5.7 创建任意维数的数值阵列 547
19.6 使用MWCharArray操作字符阵列 549
19.7 使用MWLogicalArray操作逻辑阵列 551
19.8 使用MWStructArray操作结构体阵列 552
19.9 使用MWCellArray操作元组阵列 553
第20章 将MATLAB M程序转换为C/C++程序 555
20.1 本章导读 555
20.2 MATLAB Coder的功能 555
20.3 MATLAB Coder对MATLAB M语言代码的约束 556
20.4 第一个实例 557
20.4.1 实例说明 557
20.4.2 基本原理 558
20.4.3 代码实现 559
20.4.4 实例执行结果 567
20.4.5 生成C/C++代码 569
20.5 MATLAB Coder图形界面 569
20.6 codegen命令 571
20.7 MATLAB Coder的典型应用 573
20.7.1 将MATLAB M程序转换为C/C++代码 573
20.7.2 将MATLAB M程序转换为MEX文件 575
20.7.3 将MATLAB M程序编译为可执行文件 575
20.7.4 将MATLAB M程序编译为动态链接库 576
20.8 用MATLAB Coder转换后的C/C++代码中的数据类型 576
20.8.1 变量类型定义 577
20.8.2 强制类型转换 577
20.8.3 基本类型定义 578
20.8.4 复数类型 580
20.8.5 固定长度变量与可变长度变量 582
20.8.6 结构体类型 587
第六部分 与MATLAB相关的数学库 593
第21章 C/C++程序调用Matcom矩阵库 593
21.1 本章导读 593
21.2 Matcom与MATLAB 593
21.3 安装Matcom 593
21.4 在Visual C++中使用Matcom C++矩阵库 595
21.5 使用Matcom C++矩阵库的矩阵类Mm 601
21.5.1 创建数值矩阵 601
21.5.2 创建字符矩阵 602
21.5.3 利用下标访问矩阵的元素 603
21.5.4 获取矩阵数据的指针 603
21.5.5 Mm矩阵对象的初始化 604
21.5.6 Mm矩阵类的几个常用函数 605
21.5.7 Matcom C++矩阵库常量 607
21.5.8 调用系统函数 607
21.6 Matcom矩阵库的图形和图像显示功能 609
21.7 Matcom用于图形显示的常用函数 610
21.8 Matcom用于图像显示的常用函数 611
21.9 Matcom的应用实例 612
21.9.1 实例1:Matcom Mm矩阵类的创建及使用 612
21.9.2 实例2:图形绘制的基本功能演示 616
21.9.3 实例3:利用Matcom绘制动态曲线 621
21.9.4 实例4:利用Matcom进行图像显示 633
21.9.5 实例5:Matcom二维和三维曲线绘制综合应用 646
第22章 C/C++程序调用MATLAB C++数学库 660
22.1 本章导读 660
22.2 MATLAB C++数学库 660
22.3 在Visual C++工程中调用MATLAB C++数学库 660
22.4 MATLAB C++数学库的使用 663
22.5 输入和输出MATLAB阵列 663
22.5.1 直接输出到屏幕 663
22.5.2 MATLAB mwArray阵列数据的输入和输出的其他方式 664
22.6 操作MATLAB mwArray阵列 668
22.6.1 创建MATLAB mwArray阵列的操作 668
22.6.2 采用MATLAB C++数学库操作稀疏矩阵 671
22.6.3 MATLAB C++数学库对字符阵列的操作 676
22.6.4 MATLAB C++数学库对元组阵列的操作 679
22.6.5 MATLAB C++数学库对结构体阵列的操作 682
22.6.6 访问mwArray类中的数据 684
22.6.7 MATLAB C++数学库对MATLAB阵列操作常用的小技巧 687
22.6.8 调用系统函数 691
参考文献 695