C++程序调用M文件编译后得到的DLL文件
2017-04-14 09:37
1071 查看
直接给出步骤:
1)设置Matlab的编译器,见【MATLAB与C的混合编程】之【MATLAB调用C程序】
2)编译m文件成dll.
【2.1】
---------建立MyAdd.m-------------
function [c] = MyAdd(a, b);
c = a + b;
-----------------------------------
【2.2】
Matlab中运行mcc -W cpplib:libMyAdd -T link:lib MyAdd
成功后,我们会发现目录下多了很多文件,其中libMyAdd.dll、libMyAdd.lib、libMyAdd.h为有用文件,接下来要用到。
3)设置VS2008的“包含文件”、“库文件”,见【MATLAB与C的混合编程】之【C程序调用Matlab计算引擎】(1)
4)编写C调用dll.
a)VS2008中建立win32控制台空项目
b)项目中加载libMyAdd.dll、libMyAdd.lib、libMyAdd.h这三个文件;前两个放在C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\Matlab_C\Debug,后一个放在C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\Matlab_C\Matlab_C
c)写代码,如下:
-----------------------------------------------------------------
#pragma comment( lib, "mclmcrrt.lib" )
#pragma comment( lib, "libmx.lib" )
#pragma comment( lib, "libmat.lib" )
#pragma comment( lib, "mclmcr.lib" )
#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "libMyAdd.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{
double a = 6;
double b = 9;
double c;
// initialize lib,这里必须做初始化!
if( !libMyAddInitialize())
{
cout << "Could not initialize libMyAdd!" << std::endl;
return -1;
}
// 为变量分配内存空间,可以查帮助mwArray
mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,为了和Cpp变量接轨,设置成1*1的矩阵,mxDOUBLE_CLASS表示变量的精 度)
mwArray mwB(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxDOUBLE_CLASS);
// set data,不用我解释了吧,很简单的,调用类里面的SetData函数给类赋值
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
// using my add,掉我自己写的函数
MyAdd(1, mwC, mwA, mwB);
// get data,不用我解释了吧,很简单的,调用类里面的Get函数获取取函数返回值
c = mwC.Get(1, 1);
printf("c is %f\n", c);
// 后面是一些终止调用的程序
// terminate the lib
libMyAddTerminate();
// terminate MCR
mclTerminateApplication();
return 0;
}
-----------------------------------------------------------------
结果如图:
==========================================
注意事项:
1.此程序由于是调用DLL文件,故与Matlab无关,运行时不需要Matlab环境
2.项目视图如下:
【引文】http://hi.baidu.com/hxk622/blog/item/884b5e1daf3d6cf8e0fe0bad.html
1)设置Matlab的编译器,见【MATLAB与C的混合编程】之【MATLAB调用C程序】
2)编译m文件成dll.
【2.1】
---------建立MyAdd.m-------------
function [c] = MyAdd(a, b);
c = a + b;
-----------------------------------
【2.2】
Matlab中运行mcc -W cpplib:libMyAdd -T link:lib MyAdd
成功后,我们会发现目录下多了很多文件,其中libMyAdd.dll、libMyAdd.lib、libMyAdd.h为有用文件,接下来要用到。
3)设置VS2008的“包含文件”、“库文件”,见【MATLAB与C的混合编程】之【C程序调用Matlab计算引擎】(1)
4)编写C调用dll.
a)VS2008中建立win32控制台空项目
b)项目中加载libMyAdd.dll、libMyAdd.lib、libMyAdd.h这三个文件;前两个放在C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\Matlab_C\Debug,后一个放在C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\Matlab_C\Matlab_C
c)写代码,如下:
-----------------------------------------------------------------
#pragma comment( lib, "mclmcrrt.lib" )
#pragma comment( lib, "libmx.lib" )
#pragma comment( lib, "libmat.lib" )
#pragma comment( lib, "mclmcr.lib" )
#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "libMyAdd.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{
double a = 6;
double b = 9;
double c;
// initialize lib,这里必须做初始化!
if( !libMyAddInitialize())
{
cout << "Could not initialize libMyAdd!" << std::endl;
return -1;
}
// 为变量分配内存空间,可以查帮助mwArray
mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,为了和Cpp变量接轨,设置成1*1的矩阵,mxDOUBLE_CLASS表示变量的精 度)
mwArray mwB(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxDOUBLE_CLASS);
// set data,不用我解释了吧,很简单的,调用类里面的SetData函数给类赋值
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
// using my add,掉我自己写的函数
MyAdd(1, mwC, mwA, mwB);
// get data,不用我解释了吧,很简单的,调用类里面的Get函数获取取函数返回值
c = mwC.Get(1, 1);
printf("c is %f\n", c);
// 后面是一些终止调用的程序
// terminate the lib
libMyAddTerminate();
// terminate MCR
mclTerminateApplication();
return 0;
}
-----------------------------------------------------------------
结果如图:
==========================================
注意事项:
1.此程序由于是调用DLL文件,故与Matlab无关,运行时不需要Matlab环境
2.项目视图如下:
【引文】http://hi.baidu.com/hxk622/blog/item/884b5e1daf3d6cf8e0fe0bad.html
相关文章推荐
- JNI编程Demo----Java程序调用C&C++编译好的库文件
- linux下如何将c++程序编译成so,如何调用该so文件
- 【MATLAB与C的混合编程】之【C程序调用M文件编译后得到的DLL文件】
- 用python程序调用C/C++编译的可执行文件
- C/C++程序编译步骤 如何生成可执行文件
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- Matlab与c++混合编程[四.通过VC调用Matlab编译产生的dll文件]
- C++程序调用已编译的C程序【整理】
- C/C++程序编译步骤 如何生成可执行文件
- 【转】C#生成dll文件:如何用C#编译生成dll文件即动态链接库文件供其它程序调用
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- [转]gcc下程序调用静态库编译命令:主文件必须在静态库前面!
- C++ 调用C 文件遇到的编译问题
- 在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
- C/C++程序从编译到最终生成可执行文件的过程分析
- 如果C++程序要调用已经被编译后的C函数,该怎么办?
- 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern
- C++中调用指定程序打开相应的文件
- 经典面试题目--在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- 在VS2008中编译纯c/c++程序并由c#调用过程