主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

调用约定

生成 COM 类

生成 COM 类需要生成

  • 接口描述语言 (IDL) 中的类定义文件

  • 一个或多个关联的 C++ 类定义/实现文件

MATLAB® Compiler SDK™ 自动生成构建组件中每个 COM 类所需的 IDL 和 C/C++ 代码。当您使用编译器生成 COM 组件时,这个过程通常对您来说是透明的;而当 COM 组件的用户使用该组件进行编程时,这个过程对于他们来说也是透明的。

有关构建 COM 对象以及映射到其他语言的 IDL 和 C++ 编码规则的信息,请参阅 MSDN 库中的文章。

下表显示了通用 MATLAB 函数到 IDL 代码和 Microsoft® Visual Basic® 的映射。

代码采样
通用 MATLAB 代码
function [Y1, Y2, ..., varargout] = foo(X1, X2, ..., varargin)
IDL 代码
HRESULT foo([in] long nargout,
            [in,out] VARIANT* Y1,
            [in,out] VARIANT* Y2,
            .
            .
            [in,out] VARIANT* varargout,
            [in] VARIANT X1,
            [in] VARIANT X2,
            .
            .
            [in] VARIANT varargin);
Visual Basic 代码
Sub foo(nargout As Long, _
        Y1 As Variant, _
        Y2 As Variant, _
        .
        .
        varargout As Variant, _
        X1 As Variant, _
        X2 As Variant, _
        .
        .
        varargin As Variant)

IDL 映射

IDL 函数定义是通过生成一个与原始 MATLAB 函数同名的函数以及一个包含原始函数的所有输入和输出以及一个附加参数 nargout 的参量列表来生成的。

当存在时,nargout 参数是 [in] 类型的 long 参数。它始终是列表中的第一个参量。此参数允许将 MATLAB nargout 参数正确传递到编译的 MATLAB 代码。如果封装不包含输出的 MATLAB 函数,则不会生成 nargout 参数。

nargout 参数之后,输出按照它们在 MATLAB 函数左侧出现的顺序列出,并标记为 [in,out],这意味着它们在两个方向上传递。

函数输入列于接下来,其出现顺序与原始函数右侧的顺序相同。所有输入均标记为 [in] 参数。

当存在时,可选的 varargin / varargout 参数始终列为最后的输入参数和最后的输出参数。除 nargout 之外的所有参数都作为 COM VARIANT 类型传递。有关 MATLAB 数组和 COM VARIANT 之间转换的规则列表,请参阅数据转换

Microsoft Visual Basic 映射

Microsoft Visual Basic 为具有 Variant 类型的 COM Variant 提供了本机支持,并且提供了所有 Visual Basic 基本类型与 Variant 之间的隐式转换。一般而言,任何 Visual Basic 基本类型的数组/标量以及变体类型的数组/标量都可以作为参量传递。

MATLAB Compiler SDK COM 组件还直接支持 Excel® Range 对象,Visual Basic for Applications 使用该对象来表示 Excel 工作表中的单元格范围。

有关 Visual Basic 数据类型的更多信息,请参阅 Microsoft Excel 附带的 Visual Basic for Applications 文档。

有关 Visual Basic 和 ExcelRange 操作的更多信息,请参阅 MSDN 库