文件

开发外部C / C ++代码的接口

您可以使用基类开发到外部代码的接口编码器.ExternalDependency.。使用类用于外部代码可以提供某些优点。你可以:

  • 将相关的功能放入单个包中,而不将它们暴露给用户(封装)。

  • 创建可在项目中共享的可扩展界面。

  • 定义自定义构建配置设置,以便构建信息预配置。

创建一个类编码器.ExternalDependency.

实例化从抽象类中派生的课程编码器.ExternalDependency.,您必须定义方法getDescriptivenEname.is金宝appsupportedcontext., 和UpdateBuildInfo.。这些方法地址出现错误报告,构建支持和构建配置。金宝app

考虑调用子类的示例myexternalmathapi.衍生自编码器.ExternalDependency.。此子类假定您拥有当前工作文件夹中包含的所有所需的源和标头文件,没有其他依赖项。如果您有其他依赖项,例如源,库或标头文件,则可以重新定义UpdateBuildInfo.,或从中获得子类myexternalmathapi.它超载了UpdateBuildInfo.方法必要时并将新方法添加到界面。要帮助构建配置,您可以使用构建信息和构建中的上下文对象来访问UpdateBuildInfo.方法。

Classdef.myexternalmathapi %#codegen.方法(静止的)%提供错误消息的名称功能bname = getDescriptiveneame(〜)bname ='myexternalmathapi';结尾如果不支持构建上下文,则%错误金宝app功能金宝app支持= issupportedcontext(buildcontext)mytarget = {'mex''RTW'};如果BuildContext.iscodegentarget(mytarget)支金宝app持= true;别的错误('API仅支持MEX金宝app,LIB,EXE,DLL');结尾结尾%在此示例中配置简单构建%重新定义方法,因为您的依赖项是必要的功能UpdateBuildInfo(BuildInfo,BuildContext)SRC = {'extadd.c''extsub.c''extdiv.c'};buildinfo.addsourcefiles(src);结尾%定义类方法功能c =添加(a,b)编码器.cinclude('extadd.h');c = 0;c = coder.ceval('extadd',a,b);结尾功能C =减去(A,B)编码器.Clude('extsubtract.h');c = 0;c = coder.ceval('extsub',a,b);结尾功能c =划分(a,b)编码器.Clude('extdivide.h');c = 0;c = coder.ceval('extdiv',a,b);结尾结尾结尾

通过界面调用外部C / C ++代码:

myexternalmathapi.add(a,b);myexternalmathapi.substract(a,b);myexternalmathapi.divide(a,b);

使用的最佳实践编码器.ExternalDependency.

为不受支持的构建提供错误消息金宝app

is金宝appsupportedcontext.如果在构建上下文中支持外部代码接口,则方法返回true。金宝app如果不支持外部代码接口,请使用金宝app错误用错误消息终止代码生成。例如:

功能金宝app支持= issupportedContext(BuildContext)如果buildcontext.ismatlabhosttarget()支金宝app持= true;别的错误('MyLibrary不适用于这个目标');结尾结尾

参数化方法马铃薯并生成代码

调用外部函数的参数化方法使方法在MATLAB中运行®。例如:

功能c =添加(a,b)如果Coder.target('matlab'%在matlab中运行,使用内置添加c = a + b;别的%在生成的代码中运行,调用库函数c = 0;c = coder.ceval('extadd',a,b);结尾结尾

参数化UpdateBuildInfo用于多个平台

参数化UpdateBuildInfo.支持多个平台的方法。金宝app例如,使用Coder.BuildConfig.getStdlibInfo.获取特定于平台的库文件扩展。

功能UpdateBuildInfo(BuildInfo,BuildContext)%获取当前平台的文件扩展[〜,linklibext,execlibext,〜] = buildcontext.getstdlibinfo();%参数化库扩展libname = strcat('mylib',linkLibext);%其他链接参数libpath =.'c:\ link_objects';libpriority =.'';libprecompiled = true;liblinkonly = true;%链接命令buildinfo.addlinkObjects(libname,libpath,libpriority,libprecompiled,liblinkonly);结尾

也可以看看

||||

相关话题