MATLAB外部接口编程(张威) 第6章.ppt

上传人:qwe****56 文档编号:70008363 上传时间:2023-01-14 格式:PPT 页数:90 大小:913.50KB
返回 下载 相关 举报
MATLAB外部接口编程(张威) 第6章.ppt_第1页
第1页 / 共90页
MATLAB外部接口编程(张威) 第6章.ppt_第2页
第2页 / 共90页
点击查看更多>>
资源描述

《MATLAB外部接口编程(张威) 第6章.ppt》由会员分享,可在线阅读,更多相关《MATLAB外部接口编程(张威) 第6章.ppt(90页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第6章 MATLAB计算引擎应用 第6章 MATLAB计算引擎应用 6.1 概述概述6.2 计算引擎应用计算引擎应用6.3 编译应用程序编译应用程序6.4 计算引擎应用示例计算引擎应用示例练习练习 第6章 MATLAB计算引擎应用 6.1 概概 述述 MATLAB的计算引擎应用实际上就是利用MATLAB提供的一组接口函数(API),在用户开发的C语言或者Fortran语言应用程序中,通过某种通信机制后台调用MATLAB应用程序以完成复杂的系统任务。计算引擎应用程序是在MATLAB环境之外的可执行应用程序,在它们运行的过程中需要利用某种通信机制和另外一个MATLAB进程(会话)交互数据。在不同系

2、统平台上,应用程序使用的通信机制是不一样的,例如在UNIX系统中使用管道(pipes)完成,而在Windows平台中,这种通信机制是利用COM应用接口IEngine来完成的,图6-1表示了计算引擎应用在Windows系统中的情况。第6章 MATLAB计算引擎应用 图6-1 Windows平台上的计算引擎应用程序 第6章 MATLAB计算引擎应用 在Windows平台上,用户开发的C语言或者Fortran语言应用程序作为COM应用的客户端,是整个应用程序的前端,而MATLAB作为COM应用的服务器运行在后台。两者利用MATLAB提供的计算引擎接口函数进行交互,例如在客户端从MATLAB进程中获取

3、数据,或者在客户端调用MATLAB的指令等。在C语言或者Fortan语言中使用MATLAB计算引擎应用集成MATLAB的算法与其它的集成方法比较,计算引擎应用程序具有如下几点优势:第6章 MATLAB计算引擎应用 调用MATLAB数学函数完成繁重的数学计算,充分发挥MATLAB在数值计算上的强大优势,通过C语言或者Fortran语言编写的GUI来调用后台的MATLAB数学计算功能,完成特殊的需要,节约开发时间。在UNIX平台上,计算引擎的MATLAB进程不仅可以运行在本地计算机上,也可以运行在网络中的任何一台计算机上,这样可以将本地计算机作为前端的用户接口界面来直接调用后台复杂的算法。第6章

4、MATLAB计算引擎应用 避免将庞大的MATLAB函数库链接到客户应用程序中。利用MATLAB Compiler打包的函数库时,需要将MATLAB的数学库或者图形库都链接到客户应用程序中,这样的操作会使客户应用程序变得庞大,而MATLAB计算引擎函数库仅仅采用十几个函数就可以完成这些复杂的操作了。不是所有的MATLAB函数都可以使用MATLAB Complier或者COM Builder打包成为函数库或者COM组件,而使用MATLAB计算引擎则没有此类限制。第6章 MATLAB计算引擎应用 6.2 计算引擎应用计算引擎应用 6.2.1 6.2.1 简单计算引擎应用示例简单计算引擎应用示例下面看

5、一个简单的MATLAB计算引擎应用的例子,这个例子使用C语言开发。通过本例子来了解一下MATLAB计算引擎应用程序的基本结构和编译方法。例例6-1 简单的C语言计算引擎应用示例simpleengdemo.c。第6章 MATLAB计算引擎应用 001/*包含必要的头文件*/002#include engine.h003#include stdio.h004#include conio.h005#define BUFFERLEN 256006/*主函数*/007void main()008009Engine*ep;010char cmdBUFFERLEN;011int i=0;012int sta

6、tus=0;第6章 MATLAB计算引擎应用 013/*打开计算引擎*/014ep=engOpen(NULL);015if(ep=(Engine*)NULL)016printf(错误:无法打开MATLAB计算引擎n);017exit(-1);018019/*执行MATLAB指令*/020engEvalString(ep,A=zeros(1,10););021/*稍等片刻.*/022printf(n请在MATLAB会话中查看计算的结果!n);023printf(n按任意键继续.n);024getch();第6章 MATLAB计算引擎应用 025/*执行其它的MATLAB指令*/026for(i=

7、10;i !simpleengdemo&或者在Windows的命令行提示符下键入指令:simpleengdemo,这时操作系统将启动一个MATLAB进程,不过启动的MATLAB进程仅包含MATLAB的命令行窗口,如图6-2所示。第6章 MATLAB计算引擎应用 图6-2 计算引擎启动的MATLAB会话窗口 第6章 MATLAB计算引擎应用 这时在Windows的命令行提示符中显示如下信息:请在MATLAB会话中查看计算的结果!按任意键继续.大家可以在启动的MATLAB命令行中键入下面的指令:?whos Name Size Bytes Class A 1x10 80 double arrayGr

8、and total is 10 elements using 80 bytes?AA=0 0 0 0 0 0 0 0 0 0 第6章 MATLAB计算引擎应用 在MATLAB会话的工作空间中有一个变量A,该变量就是通过例6-1的第020行代码执行之后得到的。在命令行提示符中按任意键继续例6-1的代码执行,当重复出现相应的提示信息后,回到新启动的MATLAB会话中,键入下面的指令:?AA=Columns 1 through 6 34 55 89 144 233 377 Columns 7 through 10 610 987 1597 2584 可以看到,由于例6-1的代码执行,MATLAB工作

9、空间中的变量A变成了Fibonacci 数列的部分元素。第6章 MATLAB计算引擎应用 在Windows的命令行提示符中按任意键继续例6-1的执行,这时由于例子中正确地关闭了MATLAB计算引擎,则新启动的MATLAB会话会自动地退出运行,例6-1的MATLAB计算引擎应用实例就完整地执行完毕了。例6-1的代码说明了MATLAB计算引擎应用C语言程序的基本结构以及相应的工作流程,只要包含了必要的头文件engine.h,调用eng函数就可以完成计算引擎应用程序的工作。一般地,MATLAB计算引擎应用程序的基本工作流程如下:第6章 MATLAB计算引擎应用 打开计算引擎engOpen。向新启动的

10、MATLAB会话中设置数据engPutVariable。执行MATLAB指令engEvalString。从MATLAB会话中获取计算结果engGetVariable。关闭计算引擎engClose。第6章 MATLAB计算引擎应用 6.2.2 常用的常用的eng函数函数 1.1.打开计算引擎打开计算引擎engOpenengOpen打开MATLAB计算引擎的函数为engOpen,该函数在C语言中的定义如下:Engine*engOpen(const char*startcmd);该函数在Fortran语言中的定义如下:integer*4 function engOpen(startcmd)integ

11、er*4 epcharacter*(*)startcmd 第6章 MATLAB计算引擎应用 该函数具有一个输入参数字符串,在UNIX平台上,如果输入参数是空字符串或者NULL,则计算引擎打开本地计算机的MATLAB作为计算引擎的后台服务;如果输入参数是远程的计算机名称(hostname),则将相应的计算机上的MATLAB启动作为计算引擎的后台服务。在Windows平台上,该输入参数只能为NULL。如果engOpen函数成功运行,则一个MATLAB进程作为后台服务启动,并且返回计算引擎的指针。第6章 MATLAB计算引擎应用 2.2.关闭计算引擎关闭计算引擎engCloseengClose关闭计

12、算引擎的函数为engClose,该函数在C语言中的定义如下:int engClose(Engine*ep);该函数在Fortran语言中的定义如下:integer*4 function engClose(ep)integer*4 ep该函数只有一个输入参数MATLAB计算引擎指针,如果成功关闭了计算引擎,则作为计算引擎的MATLAB后台服务进程被关闭,然后返回整数0表示成功完成了操作。第6章 MATLAB计算引擎应用 3.3.执行执行MATLABMATLAB指令指令engEvalStringengEvalString在MATLAB计算引擎应用程序中运行MATLAB指令的函数是engEvalSt

13、ring,该函数在C语言中的定义如下:int engEvalString(Engine*ep,const char*string);该函数在Fortran语言中的定义如下:integer*4 function engEvalString(ep,command)integer*4 epcharacter*(*)command 第6章 MATLAB计算引擎应用 该函数具有两个输入参数,分别为计算引擎的指针ep和需要执行的MATLAB指令command。如果该函数返回了数值0,则表明计算引擎已经成功处理了用户的指令。注意,在调用该函数时,请尽量保证参数command包含的MATLAB指令是合法的。第

14、6章 MATLAB计算引擎应用 4.4.获取数据获取数据engGetVariableengGetVariable获取数据的函数是engGetVariable,它能够从当前作为计算引擎服务的MATLAB会话中获取指定的变量,它在C语言中的定义如下:mxArray*engGetVariable(Engine*ep,const char*name);第6章 MATLAB计算引擎应用 该函数在Fortran语言中的定义如下:integer*4 function engGetVariable(ep,name)integer*4 epcharacter*(*)name该函数的输入参数分别为MATLAB计算

15、引擎的指针ep和需要读取的变量名name,如果成功读取了数据,则函数返回mxArray数据类型对象指针。第6章 MATLAB计算引擎应用 5.5.写入数据写入数据engPutVariableengPutVariable从计算引擎应用程序向MATLAB会话写入数据的函数是engPutVariable,该函数在C语言中的定义如下:int engPutVariable(Engine*ep,const char*name,const mxArray*mp);第6章 MATLAB计算引擎应用 该函数在Fortran语言中的定义如下:integer*4 function engPutVariable(ep

16、,name,mp)integer*4 ep,mpcharacter*(*)name该函数具有三个输入参数,分别为计算引擎指针ep、变量的名称name和在C语言或者Fortran源中创建mxArray数据类型对象的指针mp。如果函数成功写入了数据,则返回整数数值0。第6章 MATLAB计算引擎应用 6.3 编译应用程序编译应用程序 6.3.1 6.3.1 命令行编译命令行编译在生成可执行应用程序时,可以通过命令行完成程序的编译,也就是说,可以在MATLAB的命令行窗口下或者操作系统的控制台方式下,通过MEX指令完成应用程序的编译。在前面的章节介绍了MEX指令,读者应该知道MEX指令是通过选项文件

17、完成程序的编译工作的,在编译MEX文件时,需要针对不同的编译器选择不同的选项文件,MAT数据文件应用程序是这样,MATLAB计算引擎应用程序也是如此。第6章 MATLAB计算引擎应用 和生成MEX文件不同,生成MEX文件时,只要在MATLAB中完成编译器的配置工作就可以直接使用MEX指令完成MEX文件的编译工作。因为配置编译器的时候,需要将编译器的选项文件改名为mexopts.bat选项文件,并且拷贝到了系统环境目录下。不过在系统路径下mexopts.bat文件不能完成MATLAB计算引擎应用程序的编译,必须通过MEX命令行,指定具体的选项文件才可以。为了便于说明编译过程,这里使用一个Fort

18、ran语言的计算引擎应用程序作为示例。第6章 MATLAB计算引擎应用 mex-f%MATLABROOT%binwin32mexoptsdf60engmatopts.bat fengdemo.f 第6章 MATLAB计算引擎应用 其中,%MATLABROOT%是程序员使用的MATLAB的安装路径。如果fengdemo.f程序中没有任何错误,则MEX指令将成功地将fengdemo.f源代码编译生成为可执行的应用程序。如果存在任何错误或者警告提示,请读者对照例子的源代码,仔细修改直到编译通过为止。接着,就可以运行得到的可执行应用程序。第6章 MATLAB计算引擎应用 在MATLAB命令行窗口中键入

19、如下命令:dir*.exefengdemo.exe !fengdemo&在Windows的命令行提示符中会显示以下信息:开始MATLAB计算引擎应用程序.当显示下面的信息时,例子将利用MATLAB进程绘制出计算的结果,如图6-3所示。第6章 MATLAB计算引擎应用 图6-3 MATLAB绘制出来的应用程序结果 第6章 MATLAB计算引擎应用 按回车键将继续.Fortran Pause-Enter command or to continue.在Windows的命令行提示符中按回车键继续程序的运行,则程序将通过073080行的代码将计算的结果D读回到Fortran的应用程序中,于是利用For

20、tran语言将计算结果输出到了命令行提示符中:第6章 MATLAB计算引擎应用 MATLAB 的计算结果如下:time(s)distance(m)0.000 0.000 0.500 8.78 1.00 15.1 1.50 19.0 2.00 20.4 2.50 19.4 3.00 15.9 3.50 9.97 4.00 1.60 4.50 -9.23 5.00 -22.5 第6章 MATLAB计算引擎应用 6.3.2 6.3.2 使用集成开发环境使用集成开发环境如果读者使用集成开发环境来进行计算引擎应用程序的开发,则需要按照选择的编译器不同,根据不同的集成开发环境设置程序的开发过程。无论是C语

21、言应用程序还是Fortran语言应用程序都具有自己的优势,所以对于程序员来说,需要根据要求选择合适的编译器以及开发环境。本小节利用例6-1的代码simpleengdemo.c和Microsoft Visual Studio 6来讲解使用集成开发环境进行计算引擎应用程序编译的完整过程。第6章 MATLAB计算引擎应用 首先启动Visual Studio,然后执行“File”菜单下的“New”命令,在弹出的对话框中选择“Win32 Console Application”作为即将创建的应用程序类型,在“Project name”文本输入框处设定应用程序的工程名称,也就是未来生成的可执行程序的名称,

22、如图6-4所示。第6章 MATLAB计算引擎应用 图6-4 新建项目对话框 第6章 MATLAB计算引擎应用 单击“OK”按钮之后,在弹出的对话框中选择创建空的项目文件选项,并且单击对话框的“Finish”按钮,这样Visual C+将自动创建一个空白的项目,等待添加其它类型文件。执行“Tools”菜单下的“Options”命令,在弹出的对话框中选择“Directories”属性页。在该属性页下设置Include路径属性和LIB路径属性,分别将MATLAB外部接口应用程序的Include路径和LIB路径添加到这里。MATLAB外部接口应用程序头文件所在的Include路径为E:MATLAB6P

23、5P1EXTERNINCLUDE,注意如果开发应用程序时使用了C+语言,则还要将E:MATLAB6P5P1EXTERNINCLUDECPP路径添加到Include路径下。第6章 MATLAB计算引擎应用 在设置LIB路径时,需要根据不同的编译器选择LIB路径,MATLAB外部接口应用程序针对MSVC+6.0的库文件路径是E:MATLAB6P5P1EXTERNLIBWIN32MICROSOFTMSVC60。将上述的两个路径分别在如图6-5所示的对话框中设置完毕。第6章 MATLAB计算引擎应用 图6-5 设置必要的Include路径和LIB路径 第6章 MATLAB计算引擎应用 图6-5 设置必

24、要的Include路径和LIB路径 第6章 MATLAB计算引擎应用 设置完毕后,单击“OK”按钮确认并退出Options对话框。向项目工程中添加必要的源代码文件,如果用户的源代码文件不存在,则可以直接执行“File”菜单下的“New”命令,创建一个新的源代码文件并将其添加到项目工程中。如果需要添加的用户源代码文件已经存在,则执行“Project”菜单下的“Add to Project”子菜单下的“Files”命令,在弹出的对话框中选择图6-6的源代码文件simpleengdemo.c。第6章 MATLAB计算引擎应用 图6-6 选择源代码文件 第6章 MATLAB计算引擎应用 单击“OK”按

25、钮,将源文件添加到项目工程中。在进行编译之前,执行“Project”菜单下的“Setting”命令,在弹出的项目属性对话框中,设置Link属性页中链接库文件选项,将libmx.lib和libeng.lib两个文件添加到链接选项中,如图6-7所示。第6章 MATLAB计算引擎应用 图6-7 添加必要的库文件 第6章 MATLAB计算引擎应用 单击“OK”按钮之后确认,这时就可以直接生成可执行应 用 程 序 了。执 行“Build”菜 单 下 的“Build simledemo.exe”命令,如果应用程序没有任何错误,则Visual C+将生成相应的可执行文件,也可以在Visual C+中直接完成

26、程序的运行。如果读者使用其它的C语言编译器集成开发环境进行MATLAB计算引擎应用程序的开发,则其过程和使用Visual C+的过程是类似的,只要注意在相应的链接选项增加必要的库文件,设置好编译器的系统环境变量应该就没有别的问题了。第6章 MATLAB计算引擎应用 6.4 计算引擎应用示例计算引擎应用示例 mex-f optsfile cfengdemo.c mutil.c 第6章 MATLAB计算引擎应用 011*012*/013#include engine.h014#include mutil.h015#define BUFFERLEN 1024016017/*CalculateFcn函

27、数完成下列的工作:0181.接受x 和 y 数据作为输入参数0192.进行5阶多项式拟合计算0203.在不同的子图内绘制原始数据和拟合运算数据0214.返回拟合运算结果*/022mxArray*CalculateFcn(mxArray*x,mxArray*y)第6章 MATLAB计算引擎应用 023024Engine *ep;025mxArray*equation;026char flag1,bufferBUFFERLEN;027int status;028029/*打开计算引擎*/030ep=engOpen(NULL);031if(ep=(Engine*)NULL)032fprintf(st

28、derr,错误:无法打开MATLAB!n);033fprintf(stdout,计算引擎MATLAB是可见的.n);第6章 MATLAB计算引擎应用 034fprintf(stdout,隐 藏 它!n按 任 意 键 继 续.n);035getch();036/*隐藏计算引擎的窗口*/037status=engSetVisible(ep,false);038if(status!=0)039040fprintf(stderr,错误:无法隐藏计算窗口.n);041return(NULL);042043fprintf(stdout,进行数据处理计算.);044/*将数据传输到MATLAB工作空间*/第

29、6章 MATLAB计算引擎应用 045status=engPutVariable(ep,x,x);046if(status!=0)047048fprintf(stderr,错误:无法将数据传输到MATLAB工作空间.n);049return(NULL);050051status=engPutVariable(ep,y,y);052if(status!=0)053054 fprintf(stderr,错误:无法将数据传输到MATLAB工作空间.n);055return(NULL);第6章 MATLAB计算引擎应用 056 057/*设置输出缓存区*/058engOutputBuffer(ep,b

30、uffer,BUFFERLEN);059/*执行多项式拟合*/060status=engEvalString(ep,k5=polyfit(x,y,5);y5=polyval(k5,x););061if(status!=0)062063/*进行错误检测.*/064fprintf(stderr,错误:无法运行MATLAB命令.n);065fprintf(stderr,%sn,buffer);066return(NULL);067 第6章 MATLAB计算引擎应用 068engEvalString(ep,subplot(2,1,1);plot(x,y,b,x,y5,r););069engEvalSt

31、ring(ep,xlabel(x);ylabel(y);title(x Vs y);axis tight;);070engEvalString(ep,legend(Original,Fitted););071engEvalString(ep,subplot(2,1,2);bar(x,y-y5,r);xlabel(x);ylabel(y-y5););072engEvalString(ep,title(Residuals);axis tight;);073/*获取计算的结果*/074equation=engGetVariable(ep,k5);第6章 MATLAB计算引擎应用 075fprintf

32、(stdout,Done!n);076fprintf(stdout,按任意键继续.n);077getch();078/*关闭计算引擎*/079status=engClose(ep);080if(status!=0)081082fprintf(stderr,错误:无法关闭MATLAB计算引擎.n);083 084return(equation);085086/*主函数*/第6章 MATLAB计算引擎应用 087void main()088089mxArray*xdata,*ydata,*eqn;090char matfile=curvedata.mat;091/*从数据文件curvedata.m

33、at中获取变量x&y */092xdata=ReadArray(matfile,x);093ydata=ReadArray(matfile,y);094095/*计算多项式拟合计算:096函数同时绘制原始数据和拟合计算数据 */097eqn=CalculateFcn(xdata,ydata);098/*将拟合计算结果保存到 curvedata.mat*/099WriteArray(matfile,k5,eqn);100 第6章 MATLAB计算引擎应用 例6-3的代码中使用了两个比较特别的eng函数:在第037行的代码中,使用了engSetVisible函数,该函数只能够用于C语言计算引擎应用

34、程序中,它的功能是使当前的MATLAB计算引擎窗口成为不可见,也就是隐藏起来。该函数的定义如下:int engSetVisible(Engine*ep,bool value);第6章 MATLAB计算引擎应用 该函数的第一个参数是MATLAB计算引擎的指针ep,第二个参数是一个布尔类型的数据value,如果该数据为逻辑真时,则MATLAB的窗口为可见的状态,也就是显示在计算机平台上。如果该数据为逻辑假时,则MATLAB的窗口为不可见的状态,也就是隐藏起来。所以当例6-3运行到037行时,MATLAB计算引擎窗口就隐藏起来了。如果函数成功运行,则函数返回值为整数0。如果需要判断当前的MATLAB

35、计算引擎窗口是否可见,可以使用engGetVisible函数,该函数的定义如下:int engGetVisible(Engine*ep,bool*value);第6章 MATLAB计算引擎应用 该函数的参数和engSetVisible的参数类似,不同的是第二个输入参数为布尔类型变量指针,当MATLAB计算引擎窗口不可见时,该数值为逻辑假,否则为逻辑真。在例6-3代码的058行调用了函数engOutputBuffer,该函数的作用是定义一个字符串缓冲区,该缓冲区将获取engEvalString函数在运行MATLAB指令过程中,MATLAB指令本应该输出到MATLAB窗口中的文本信息。该函数在C语

36、言中的定义如下:int engOutputBuffer(Engine*ep,char*p,int n);第6章 MATLAB计算引擎应用 该函数中有三个参数,分别是计算引擎的指针ep、缓冲区字符串指针p和缓冲区的长度n。该函数在Fortran语言中的定义如下:integer*4 function engOutputBuffer(ep,p)integer*4 epcharacter*n p该函数在Fortran语言中的定义只有两个参数,分别为计算引擎的指针ep和作为缓冲区的字符串指针p,不过p的长度被预先定义为n。上面的两个函数是在MATLAB计算引擎应用程序中比较常用的两个。其余的eng函数说

37、明请参阅MATLAB的帮助文档。第6章 MATLAB计算引擎应用 编译运行例6-3的代码:mex cfengdemo.c mutil.c!cfengdemo&在运行程序的过程中,MATLAB计算引擎被打开,然后隐藏起来,并且完成了多项式拟合的计算,得到计算的图形如图6-8所示。第6章 MATLAB计算引擎应用 图6-8 曲线拟合得到的图形 第6章 MATLAB计算引擎应用 如果重新加载MATLAB的数据文件可以看到数据文件中增加了相应的变量k5:load curvedata whos Name Size Bytes Class k5 1x6 48 double array x 1x101 80

38、8 double array y 1x101 808 double array 第6章 MATLAB计算引擎应用 Grand total is 208 elements using 1664 bytes k5k5=Columns 1 through 4 0.0069 -0.1636 1.2773 -3.5214 Columns 5 through 6 1.4046 2.4537 第6章 MATLAB计算引擎应用 mex-f E:MATLAB6p5p1binwin32mexoptsdf60engmatopts.bat fodeinit.f!fodeinit&计算得到的曲线输出如图6-9所示。第6

39、章 MATLAB计算引擎应用 图6-9 计算得到的曲线 第6章 MATLAB计算引擎应用 在运行程序的时候,程序首先需要在命令行提示符中输出下面的信息:vdp=Inline function:vdp(t,y)=y(2);0.9*(1-y(1)2)*y(2)-y(1)这些信息就是通过engOutputBuffer函数设置的缓冲区的内容,它是创建内建函数对象时得到的输出。第6章 MATLAB计算引擎应用 练练 习习 1.求解系统表达式。编写C语言或者Fortran语言计算引擎应用程序求解系统表达式,原始数据都保存在数据文件中,要求完成如下功能:*打开 datafile.mat 数据文件。*在引擎应用程序中从数据文件获取x和y变量。*创建MATLAB计算引擎。*将变量x和y传递到MATLAB中。*执行MATLAB表达式 result=mldivide(x,y),求解系统方程。*将计算结果保存到同一个数据文件中。第6章 MATLAB计算引擎应用 2.2.集成开发环境的编译。集成开发环境的编译。请尝试使用自己熟悉的集成开发环境完成计算引擎应用程序的编译,如例6-3或者例6-4的代码。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁