在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
从mathworks的网站上面看到一篇tech-note,照着写了一下,可以通过,但是还有诸多其他问题。 example: 1. 编写一个简单的M 文件 function,保存为 foo.m,此function如下: function y=foo(x) y = x+1; 2. 利用MATLAB 编译器将foo.m编译成 c代码,以及 C 共享库文件: >> mcc -t -L C -W lib:foolib -T link:lib foo.m libmmfile.mlib 说明: -t 告诉MATLAB编译器将M代码翻译成目标代码; -L 指明需要采用的目标语言,这里可以选择 C, CPP等; -W 告诉matlab编译器采用lib:后面指定的名字建立库文件包; -T 告诉编译器采用的平台与目的,在这里我们想生成可以我 们的应用程序中共享的库文件(也就是说,PC机器上的DLL); 指定的libmmfile.mlib告诉matlab编译器将Matlab的数学库预编译到共享库中(如果需要的话) -g 使得产生的DLL可以在MSVC(或者你的IDE)中编译 通过这一步,可以产生如下的文件: foo.c foo.h foolib.c foolib.h foolib.exports foolib.dll foolib.exp foolib.lib foolib.mlib 3. 打开VC 6.0 IDE, 新建一个 Win32 Console Application 类型的工程:Test ,Platforms选择 Win32,定位好自己的文件位置。单击OK 在第二步中选择 空的工程,单击Finish; 4. vc的一些设置:(这里我采用的跟mathworks的technote介绍的略有不同) (1),在项目建立后,设置环境。 Tool->options->Diretories 页面下Show directories for 先选择Include Files,输入路径:D:\PROGRAMS\MATLAB6P5P1\EXTERN\INCLUDE 在选择Library Files,输入路径:D:\PROGRAMS\MATLAB6P5P1\EXTERN\LIB\WIN32\MICROSOFT\MSVC60 (我的matlab根目录是 D:\PROGRAMS\MATLAB6P5P1\ ;这里的设置对不同工程只需要一次) (2)打开Project->Settings->Link页面,在Object/Library modules 中加入libmatlb.lib libmmfile.lib libmx.lib 。(这里对每个工程都要设置,并且根据需要选不同的库) 5. 将刚才生成的foolib.h,foolib.lib, foolib.dll,foolib.mlib拷贝到工程目录下;(不完全清楚是否需要foolib.mlib,我这里不要也行) 6. 打开Project---->Add to project---->Files... ,将刚刚拷贝过来的foolib.lib加入到工程中; 7. 选中vc的workspace的 File View标签,双击 test files展开,选择 Project------>Add to project ------>New... ,为工程增加一个名为 foowrap.c的 c++Source 文件; 8. 在foowrap.c中加入下面的代码: #include "foolib.h" #include "matlab.h" #include <stdio.h> void main(void) { mxArray *x_ptr; mxArray *y_ptr; double *y; double ret; x_ptr=mxCreateDoubleScalar(4); foolibInitialize(); // 初始化 y_ptr=mlfFoo(x_ptr); foolibTerminate(); //终止 y=mxGetPr(y_ptr); ret=*y; printf("The output of foo is %f\n",ret); mxDestroyArray(x_ptr); // 释放 mxArray mxDestroyArray(y_ptr); } 9. Ok, 编译,运行,可以了吧? 看到dos窗口输出的: The output of foo is 5.000000 了吧?是不是很兴奋啊? 不过,这个程序是不是太死板了点儿? 我也这样想的,然后我就想通过输出给出输出,可是不知道为什么,我先用 scanf从外界获取输入后,想通过memcpy将获取的值赋值给x_ptr,却怎么也不成功~ sigh,下次再试试了~ 有没有谁知道的指点指点呀? |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论