主要内容

loadlibrary

加载C共享库到MATLAB

描述

loadlibrary (库名hfile从C共享库加载函数库名在头文件中定义hfile在MATLAB®.的loadlibraryfunction只支持调用C金宝app语言中可调用的函数和C编译器可解析的头文件。用c++编写的函数必须声明为外来的“C”.或者,要在c++库中调用函数,请参见MATLAB中的c++库

例子

loadlibrary (库名如果头文件的名称与库文件的名称相同,则加载库。

例子

loadlibrary (库名hfile名称,值加载一个或多个库名称,值参数。

例子

loadlibrary (库名@protofile使用一个原型文件protofile,以代替头文件。

notfound警告= loadlibrary(___返回警告信息,并可以包括以前语法中的任何输入参数。

例子

全部折叠

添加路径到例子文件夹中。

目录(fullfile (matlabroot,“外来的”“例子”“shrlib”))

库中的显示功能。

如果不是(libisloaded (“shrlibsample”) loadlibrary (“shrlibsample”结束libfunctions (“shrlibsample”
函数在库shrlibsample: addDoubleRef exportedDoubleValue printExportedDoubleValue addMixedTypes getListOfStrings readEnum addStructByRef multidoublearray stringToUpper addStructFields multidoubleref allocateStruct multiplyShort deallocateStruct print2darray

清理。

unloadlibraryshrlibsample

假设你有一个图书馆,mylib,头文件,mylib.h.头文件包含语句,# include header2.h.中定义的函数header2.h,叫loadlibraryaddheader选择。

loadlibrary (“mylib”“mylib.h”“addheader”“header2”
如果libisloaded (“shrlibsample”) unloadlibrary (“shrlibsample”其他的目录(fullfile (matlabroot,“外来的”“例子”“shrlib”))结束

创建别名自由为图书馆shrlibsample

loadlibrary (“shrlibsample”“shrlibsample.h”“别名”“自由”

调用函数stringToUpper使用别名。

str ='这是一个混合Case字符串';calllib (“自由”“stringToUpper”str)
ans = '这是一个混合案例字符串'

清理。

unloadlibrary自由

添加路径到包含shrlibsample它的头文件,shrlibsample.h

目录(fullfile (matlabroot,“外来的”“例子”“shrlib”))

shrlibsample.h头文件包括头文件,shrhelp.h.如果shrhelp.h在不同的文件夹中,例如,c: \工作,使用“includepath”选项,告诉MATLAB在哪里找到文件。

loadlibrary (“shrlibsample”“shrlibsample.h”“includepath”“c: \工作”

清理。

unloadlibraryshrlibsample

此示例显示如何替换addMixedTypes函数名shrlibsample具有别名的库,addtype.要定义别名,请创建一个原型文件,然后使用原型文件作为头文件加载库。

使用具有写访问权限的文件夹。

cd (“c: \工作”

创建一个原型文件,mxproto.m

Hfile = fullfile(matlabroot,“外来的”“例子”“shrlib”“shrlibsample.h”);[notfound,warnings] = loadlibrary(“shrlibsample”hfile,“mfilename”“mxproto”

MATLAB在当前文件夹中创建原型文件。忽略警告信息。

将别名添加到原型文件中。在MATLAB编辑器中打开文件。

编辑mxproto.m

搜索函数addMixedTypes

下面的语句分配别名addtype

fcns.alias {fcnNum} = ' addtype ';

将语句添加到要递增的语句之前的行fcnNum.新的函数原型,带有粗体显示的新语句,看起来如下所示:

addMixedTypes (short, int, double);fcns.thunkname {fcnNum} = ' doubleint16int32doubleThunk ';fcns.name {fcnNum} = ' addMixedTypes ';fcns.calltype {fcnNum} =“铛”;fcns.LHS {fcnNum} = '双层';fcns。RHS{fcnNum}={'int16', 'int32', 'double'};fcns.alias {fcnNum} = ' addtype ';%已定义别名fcnNum = fcnNum + 1;%增量fcnNum

重新加载shrlibsample使用原型文件。

unloadlibraryshrlibsampleloadlibrary (“shrlibsample”@mxproto)

按函数的别名调用该函数。

calllib (“shrlibsample”“addtype”int16 (127), int32(33000),π)
Ans = 3.3130e+04

清理。

unloadlibraryshrlibsample

输入参数

全部折叠

共享库的名称,指定为字符向量。名称区分大小写,必须与系统上的文件匹配。

在微软®窗户®系统中,库名引用共享库的名称(. dll)文件。在Linux上®系统,它指的是共享对象的名称(所以)文件。在苹果Mac系统,它指的是一个动态共享库(. dylib).属性中未包含文件扩展名库名参数,loadlibrary尝试查找具有适当平台mex文件扩展名或适当平台库扩展名的库。有关墨西哥文件扩展名的列表,请使用mexext

的名称部分由MATLAB提取库名在其他共享库函数中标识该库。例如,当您调用calllib函数时,不要在库参数名中包含路径或文件扩展名。

数据类型:字符

C头文件的名称,指定为字符向量。名称区分大小写,必须与系统上的文件匹配。如果在文件名中没有包含文件扩展名,loadlibrary使用.h对于扩展。

数据类型:字符

的名字原型文件,指定为字符向量。名称区分大小写,必须与系统上的文件匹配。@protofile指定原型文件的函数句柄。使用原型文件时,唯一有效的名称,值Pair参数为别名

数据类型:字符

名称-值对参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:loadlibrary(‘mylib’,‘mylib.h’,‘addheader’,‘header2’)

头文件,指定为逗号分隔的对,由'addheader'和一个字符向量。指定不带文件扩展名的文件名。

指定的每个文件addheader必须有相应的# include语句在基头文件中。若要仅加载希望在MATLAB中使用的头文件中定义的函数,请使用addheader

MATLAB不验证头文件的存在,并忽略任何不需要的头文件。

库的替代名称,指定为逗号分隔的对,由'别名'和一个字符向量。将指定的名称与库关联。所有后续对引用此库的MATLAB函数的调用都必须使用此别名,直到卸载库为止。

从属头文件的更多搜索路径-头文件中的头文件,指定为逗号分隔的对,由'includepath'和一个字符向量。

原型文件,指定为逗号分隔的对,由'mfilename'和一个字符向量。生成一个原型文件在当前文件夹。原型文件名不能与库名相同。加载库时使用此文件代替头文件。

坦克文件,指定为逗号分隔的对,由'thunkfilename'和一个字符向量。覆盖默认值铛文件的名字。

输出参数

全部折叠

头文件中找到但库中没有的函数名,作为单元格数组返回。

数据类型:细胞

处理头文件时产生的警告,作为字符数组返回。

限制

  • 您必须有一个受支持的C编译器,并金宝app且Perl必须可用。

  • 不要打电话loadlibrary如果库已经在内存中。要测试此条件,请调用libisloaded

  • loadlibrary类生成的库不支持金宝appMATLAB编译SDK™以及代码生成产品,如MATLAB Cod下载188bet金宝搏er。

  • MATLAB共享库接口不支持带函数指针输入的库函数。金宝app

  • 有关更多信息,请参见共享库支持的限制金宝app

更多关于

全部折叠

原型文件

原型文件是一个MATLAB命令文件,您可以修改并使用它来代替头文件。

铛文件

thunk文件是MATLAB生成的64位库的兼容层。坦克文件的名称是BASENAME_thunk_COMPUTER.c在哪里BASENAME是共享库的名称,还是mfilename原型的名字。电脑返回的文本是电脑函数。

MATLAB编译该文件并创建该文件BASENAME_thunk_COMPUTER。LIBEXT,在那里LIBEXT依赖于平台的默认共享库扩展名,例如,dll在Windows上。

提示

  • 如果有多个同名的库文件,请使用库文件名加载第一个库文件。方法加载附加库别名选择。

  • 使用别名选项作为库的替代名称。要加载另一个头文件,请使用@protofile论点。

R2006a之前介绍