fork (撒哈拉沙漠的沙)                于 Thu Dec  4 00:56:56 2003 说道:

发信人: fork (撒哈拉沙漠的沙), 信区: Matlab
标  题: 总结:m文件转化为c/c++语言文件,VC编译
发信站: BBS 哈工大紫丁香站 (Sat Oct 30 17:44:20 2004)

这是以前发的文章,但被版主做成了合集,不能通过作者名字来搜索了,所以,再发一次
,以便于查找。

───────────────────────────────────────

matlab使用很方便,但有时候一些特殊的应用需要我们将matlab中m格式的 
文件中的程序翻译成c/c++的形式的程序并在c/c++的编译器中进行编译,本 
文总结了一般的方法。 
    需要分两种情况,第一种是你的m文件中不涉及到有关绘图的函数;第二种 
是需要用到绘图函数。下面分别用例子来说明:

第一种情况: 
1.     建一个m文件,内容为: 
%%%%%%%%%%%%%%%%%%%%%% 
function y=fork_1(n) 
y=0; 
for i=1:n 
    y=y+i; 
end 
%%%%%%%%%%%%%%%%%%%%%% 
    保存后在命令窗口中: 
    输入:(格式:mcc -t -L Cpp -h 文件名) 
    mcc -t -L Cpp -h fork_1 
    然后你会在你的工作目录下找到fork_1.cpp和fork_1.hpp两个文件。 
2.  在VC中建一个基于对话框的MFC应用程序,名字为testFork1,添加一个 
    按钮,并添加按钮响应函数,函数内容在第五步中说明。将上面生成的 
    两个文件拷贝到VC工程的testFork1目录里。 
3.  在VC中选择:工程--->设置,再选属性表Link选项,下拉菜单中选择Input, 
    在对象/库模块中加入附录A中所列出的内容,注意用空格将它们格开而在忽略 
    库中加入附录B中列出的内容;再选择属性表C/C++选项,下拉菜单选General, 
    在预处理程序定义中添加附录C中的内容,原来有的内容要保留,并注意用逗号 
    将它们隔开。再选择下拉菜单的Precompiled Headers选项,选择“自动使用预 
    补偿页眉”,在其中添加stdafx.h ,确定。 
4.  选择:工具--->选择,属性页选择“目录”,在include files里面加入: 
          C:/MATLAB6P5/EXTERN/INCLUDE 
          C:/MATLAB6P5/EXTERN/INCLUDE/CPP 
          注意,根据你的matlab的安装位置的不同,要相应的修改上面的地址。 
          在Library files里面加入: 
          C:/MATLAB6P5/EXTERN/LIB/WIN32 
          C:/MATLAB6P5/EXTERN/LIB/WIN32/MICROSOFT/MSVC60 
          注意,根据你的matlab的安装位置的不同,要相应的修改上面的地址。 
5.  在按钮响应函数所在文件中添加如下的头文件: 
    ...... 
    #include "matlab.hpp" 
    #include "fork_1.hpp" 
    ...... 
    函数响应代码为: 
    int i; 
    mwArray n; 
    n=5; 
    n=fork_1(n); 
    i=n.ExtractScalar(1); 
    CString str; 
    str.Format("%d",i); 
    AfxMessageBox(str); 
6.  编译,连接,执行,一切OK!(注意的是如果你的程序中用到了许多其他函数, 
    matlab会为每个函数生成一个对应的hpp和cpp文件,必须将他们都拷贝你的工 
    程中去)

第二种情况: 
1.  建一个m文件: 
%%%%%%%%%%%%%%%%%%%%% 
function fork_2() 
x=[1 2 3]; 
y=[1 3 1]; 
plot(x,y); 
%%%%%%%%%%%%%%%%%%%%% 
    保存后在命令窗口中: 
    输入:(格式:mcc -B sglcpp 文件名) 
    mcc -B sglcpp  fork_2 
2. 
3. 
4.   
    下上各步与前例相似,只是这是会多出来个fork_2_mainhg.cpp,fork_2.exe和 
    bin文件夹。在拷贝的时候文件fork_2_mainhg.cpp和fork_2.exe不要。但需要将 
    bin文件夹考到VC的工程目录中去。 
5.  在按钮响应函数所在文件中添加如下的头文件: 
    ...... 
    #include "matlab.hpp" 
    #include "fork_2.hpp" 
    ...... 
    函数响应代码为: 
    libmmfileInitialize(); 
    libmwsglmInitialize(); 
    mlfHGInitialize(NULL,NULL); 
    fork_2(); 
    mlfHGWaitForFiguresToDie(); 
    mlfHGTerminate(); 
    libmmfileTerminate(); 
    libmwsglmTerminate(); 
6.  编译,连接,执行,一切OK!(注意的是如果你的程序中用到了许多其他函数, 
    matlab会为每个函数生成一个对应的hpp和cpp文件,必须将他们都拷贝你的工 
    程中去。另外fork_2()之前的三行代码和之后的四行代码必不可少,但应该保 
    证在你的程序的整个执行过程中他们分别只被调用一次,所以最好将分别他们 
    放置在程序的初始化函数与程序结束时才调用的做扫尾工作的函数里面) 
     
附录A:链接库 
libmmfile.lib libmatlb.lib libmx.lib libmat.lib libmatpm.lib  
sgl.lib libmwsglm.lib libmwservices.lib

附录B:忽略库 
msvcrt.lib

附录C: 预处理程序定义 
MSVC,IBMPC,MSWIND

附录D:进一步参考 
关于mcc命令的使用参见matlab帮助文件 
关于mwArray的数据读出方式参见matlab在线帮助: 
http://www.mathworks.com/access/helpdesk_r12p1/help/
toolbox/mathlib/cppmathug/cppmathug.shtml

“m文件转化为c/c++语言文件”很简单,但要在VC中通过编译连接却会碰到很多问题,

即使通过了编译与连接也不保证能正确执行,有时候会遇到很多棘手的麻烦,在我 
的另一篇文章(站内有):“分析:解决m程序转化成cpp程序的编译问题”中就举了 
一个这样的例子。在那篇文章里虽然最后靠了几招“歪门邪道”搞定了那个问题,但 
还是可以看出这样的转化问题是很麻烦的。

───────────────────────────────────────

总结:m文件转化为c/c++语言文件,VC编译相关推荐

  1. 怎么将txt文件转化为html格式的文件?--极为丑陋的方式

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #怎么将txt文件转化为html格式的文件?--极为丑陋的方式import os#找出所有的txt格式的文件 ...

  2. c语言文件有什么作用,C语言文件的使用方法

    C语言文件的使用方法 C语言文件的使用方法:所谓"文件"是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名. 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件 ...

  3. c语言文件可用代码存放,C语言 文件(示例代码)

    小白一个,看到有错误,希望指出,万分感谢 /**************************************************************** C语言文件概述: 一般文件 ...

  4. c语言bzero函数头文件,嵌入q式c语言-文件操用.doc

    嵌入q式c语言-文件操用 广东科学技术职业学院 广州学院 <嵌入式C语言程式设计> 实 验 报 告 专业:计算机应用班级:09计应成绩评定:学号:18姓名:申赟教师签名:谭雄乐实验1题目: ...

  5. 快速将rmd文件转化为R纯代码文件

    rmarkdown::render(xxx.R) knitr::purl("X.Rmd","X.R", documentation = 2) 可以快速将rmd文 ...

  6. c语言只读文件若文件存在,3,C语言文件读写

    这两天看到一个关于文件读写的题目,索性就把相关内容总结下. C语言文件读写,无非是几个读写函数的应用,fopen(),fread(),fwrite()等,下面简单介绍下. 一.fopen() 函数原型 ...

  7. c语言文件和结构体,C语言 文件操作 结构体与文件 fgetc fputc fread fwrite

    #include #include /*C语言 将键盘输入的字符写入文件*/ int main(int argc, char* argv[]) { FILE *fp; //文件指针 char str1 ...

  8. c语言文件处理中ab,C语言文件处理中wt是什么操作方式?

    匿名用户 1级 2013-04-25 回答 最常用的文件使用方式及其含义如下: 1,"r".为读而打开文本文件.(不存在则出错) 2,"rb".为读而打开二进制 ...

  9. c语言文件加密大写字母,C语言 文件加密解密

    #includejiemi() { int k,l; char fn[40],fs[40]; char ch,mima[40],x; file *f1,*f2; printf("输入要解密的 ...

最新文章

  1. PHP5.6.6上运行 ecshop 2.7.3常见问题处理
  2. 欢迎广大测试人员,加入微信群,了解自动化测试的框架,检查点,参数化。...
  3. java并发编程之4——Java锁分解锁分段技术
  4. 关于处理百万级大批量数据的mysql运行几个重要点
  5. 360浏览器清除缓存_微信缓存清理教程
  6. cout 数组_C++数组指针!
  7. OpenShift 4 - 用安全上下文(SC)与安全上下文约束(SCC)控制应用对受保护功能的访问
  8. oracle9i查等待事件,什么是Oracle9i中的一个特殊等待事件?
  9. 域渗透——Pass The Hash Pass The Key
  10. 知识图谱构建技术综述
  11. premiere软件的使用(快速入门,迅速了解常用功能、常用快捷键、常用插件)——wsdchong
  12. win10 win7 一键获取TrustedInstaller权限
  13. Windows10怎么样添加并设置为卓越性能模式
  14. 奥克兰计算机科学专业世界排名,新西兰计算机专业大学排名
  15. 智能驾驶是什么意思_新手们的“必备”功能!解读DiPilot智能驾驶辅助系统
  16. Spring-boot通过redisTemplate使用redis(无须手动序列化)
  17. mix2s android p功能,小米MIX2Android P怎么使用谷歌相机
  18. Oracle的模糊查询
  19. GitStats - 统计Git所有提交记录工具
  20. 微信小程序, 长按加号 不断添加数量

热门文章

  1. [美国公派访问学者]入境美国后的流程介绍
  2. 64位环境中使用SQL查询excel的方式解决
  3. 使用IPv6 DNS解析IPv6域名(不必修改hosts文件)
  4. language express
  5. ps制作立体阴影效果
  6. 行走的Offer收割机Java面经
  7. 校友录取通知书是怎样生成的
  8. mysql杨辉三角_打印杨辉三角
  9. 如何快速将会议录音转文字
  10. sqlmap超详细讲解