把m文件编程dll文件的问题---from mathworks

转载 2004年08月03日 01:28:00
Hi,

I have done a test for creating .m file to .dll to use in MSVC++ 6.0.
I put here with step by step of procedure, and hope it could help.

   1. You need to have the MATLAB C/C++ Library and MATLAB Compiler
in your computer.
   2. Set up your project in MSVC++ for working with MATLAB C++
Library. Follow the instruction at:

http://www.mathworks.com/support/solutions/data/27257.shtml

   3. Create the .dll file from MATLAB M-file
http://www.mathworks.com/support/solutions/data/27671.shtml
   4. Add the .dll in the appropriate directory and build your .exe
file in MSVC++ .

Jack Phan

///////////////////////////////////////////////////////////
//EXAMPLE STEP BY STEP FOR CREATING .dll FILES USING.

1.I have created the file mySquare.m in folder myMatlab
(code in step 9)

2.Create the command line to get lib file

D:/MyDocuments/MathLab/MatlabC++/myMatlab>
mcc -t -L C -W lib:mySquarelib -T link:lib mySquare.m libmmfile.mlib

3.It will create 9 files :

mySquare.c
mySquare.h
mySquarelib.c
mySquarelib.h
mySquarelib.exports
mySquarelib.dll
mySquarelib.exp
mySquarelib.lib
mySquarelib.mlib

4.Add the file mySquarelib.h into project

5.Create a new folder MyAddingLib in C:/matlabR12/extern/lib/win32
then copy file mySquarelib.lib into it

6.Add
,C:/matlabR12/extern/lib/win32/MyAddingLib

into Additional library path (click Project Setting in MSVC++ menu,
click Link,
Input(in Category)(note: separated by comma)

7.Add
mySquarelib.lib

into Object/library modules:
(note: no comma, separated by a space)

(click Project Setting in MSVC++ menu, click Link,
Input(in Category)

8.Add the file mySquarelib.dll into project Debug folder
(example: my project name is Work02)

or if you want you could add the file mySquarelib.dll into

C:/matlabR12/extern/lib/win32

9.This is my M-file (mySquare.m)

function y = mySquare(x)
y = x*x ;

10.This is a project file CPP

// test.cpp

#include <iostream.h>
#include "test.h"

main() {
cout <<"Hello, Test for Matlab C++ compiler" << endl ;
Test obj ;
double xx = 1.2 ;
double yy = obj.CalculateMySquare(1.2) ;

return 0 ;
}

double Test::CalculateMySquare(double x)
{
    mxArray *x_ptr;
    mxArray *y_ptr;
double *pVal ;

/* Create an mxArray to input into mlfMySquare */
    x_ptr = mlfScalar(x);

/* Call the initial function */
mySquarelibInitialize() ;

/* Call the implementation function */
y_ptr = mlfMySquare(x_ptr);

// NOTE : NEED TO CAPITAL WORD ‘ M ‘

/* Call the library termination function */
mySquarelibTerminate() ;

/* The return value from mlfMySquare is an mxArray so we must extract
the data from it

*/
    pVal = mxGetPr(y_ptr);

    double y = *pVal ;

return y ;

}

////////////////////////////////////////////////////////////////
// test.h

#include "matlab.hpp"
#include "mySquarelib.h"

class Test {

public:
double CalculateMySquare( double x );

Test(){ ;}

~Test(){ ; }
} ; // end class

////////////////////////////////////////////////////////////////////

11. Summary : You need only 2 files from 9 files which are
created from Matlab

Ben wrote:
>
>
> To convert you MATLAB code to C or C++ use mcc, type help mcc for
> more information,
>
> To speed up your program, I guess thatin your MATLAB code there are
a
> lot of for loops, MATLAB is not good with loops
>
> say for i=1:.001:1000 '
> do any calculation
> end
>
> To overcome this then try
> 1. Victorization
> 2. Mex Function. either in C or Fortran

matlab的m文件生成dll,c调用

matlabR2014a 1.m文件 MyAdd.m function [c] = MyAdd(a, b) c = a + b; end 2.dll文件的生成 mcc -W c...
  • pinellina
  • pinellina
  • 2015年11月25日 22:08
  • 951

matlab 与c++混合编码 (matlab .m文件转为c++的dll文件)

以前做过matlab7与c++的混合编程:将m函数编译成dll给C++调用,从而加快开发的进度。但是今天在matlab2008b下面又做了一遍,发现matlab又改了很多东西,诸如增加了面向对象的的扩...
  • qq_26267811
  • qq_26267811
  • 2015年05月14日 11:10
  • 854

matlab的excel的读和写(生成脚本m文件)

1. 读取Excel文件 (a) 命令方式xlsread:  读取命令:[data,text]  = xlsread(FileName, SheetName, Range); data保存的是数据单元...
  • langb2014
  • langb2014
  • 2015年09月23日 14:05
  • 3985

matlab与C++混合编程 matlab发布、打包DLL

本文主要讲述将matlab编写好的m函数导出成dll,以供C++程序调用。使用matlab命令手动打包和matlab工具箱中deploytool的使用。写本文的主要原因是,在项目过程中遇到一个棘手问题...
  • damant
  • damant
  • 2016年03月28日 22:38
  • 2377

如何用VS2013编写DLL

本人也是一个菜鸟一个,最近学习APi也是磕磕绊绊,这是一篇针对新手的入门教程。下面我用的例子来自于冀云所著的《c++黑客编程揭秘与防范》....
  • dnirubevieru
  • dnirubevieru
  • 2016年03月28日 19:35
  • 2375

如何修改被编译后DLL文件(入门)

原文地址:http://www.cnblogs.com/wujy/p/3275855.html 我们平时在工作中经常会遇到一些已经被编译后的DLL,而且更加麻烦是没有源代码可以进行修改,只能针对...
  • XuWei_XuWei
  • XuWei_XuWei
  • 2014年06月17日 18:20
  • 5195

Windows/MFC_def文件格式_规范写法(用于生成dll)

def文件格式  2011年03月18日    模块定义   (.def)   文件       模块定义   (.def)   文件为链接器提供有关被链接程序的导出、属性及其他方面的 信息。 生成 ...
  • u010003835
  • u010003835
  • 2015年09月10日 21:01
  • 928

如何编译生成dll文件以及如何调用dll文件

点击确定选择dll选项和空项目选项 点击完成  1.2 为项目添加c++源文件mydll.cpp extern "C" // 此处extern "c" 为解决c/c++兼容问题 { _...
  • little_bobo
  • little_bobo
  • 2017年02月14日 19:52
  • 1446

VS 编写c++dll库文件

什么是DLL(动态链接库)? DLL是一个包含可由多个程序同时使用的代码和数据的库。例如:在Windows操作系统中,Comdlg32 DLL执行与对话框有关的常见函数。因此,每个程序都可以使用...
  • u013435183
  • u013435183
  • 2015年08月03日 08:45
  • 3588

.h, lib和dll文件的功能和区别

简而言之 (1).h是头文件,lib和dll都是库文件。 (2)头文件包含声明,库文件则包含实现。 (3)lib是静态链接时使用的,如果采用静态链接库,则lib包含了实际执行代码和符号表等,无论...
  • chenwk891
  • chenwk891
  • 2013年10月25日 11:44
  • 1428
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:把m文件编程dll文件的问题---from mathworks
举报原因:
原因补充:

(最多只允许输入30个字)