zoukankan      html  css  js  c++  java
  • 【MATLAB与C的混合编程】之【C程序调用M文件编译后得到的DLL文件】

    直接给出步骤:

    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

  • 相关阅读:
    查找算法之——符号表(引入篇)
    排序算法之——优先队列经典实现(基于二叉堆)
    C# Timer和多线程编程、委托、异步、Func/Action
    Tomcat汇总-部署多个项目(不同端口)
    数据库汇总(MySQL教材)
    基础知识
    常用工具&网址
    Phython开发
    单元测试
    软件项目过程和文档
  • 原文地址:https://www.cnblogs.com/caixu/p/2089126.html
Copyright © 2011-2022 走看看