gis分享 http://blog.sciencenet.cn/u/gisbase

博文

VC2010调用matlabR2010b DLL

已有 3647 次阅读 2011-8-31 09:11 |系统分类:科研笔记

程序中使用MATLAB编译产生的DLL
http://www.3sbase.com/typenews.asp?id=694

MatLab R2010b VC2010编程

http://www.3sbase.com/typenews.asp?id=695


M文件内容,实现矩阵的简单运算!

function [y,z] = myadd2(a, b)

% dummy function, just to demonstrate the idea

y = a+b;

z = a+2*b;

end


一段小代码,敬请批评指正!vc2010调试通过!

// mattest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "test.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

     /* Initialize the MCR */ 
       if( !mclInitializeApplication(NULL,0) ) 
       { 
            std::cout << "Could not initialize the application!" << std::endl;
            return -1; 
       }

       // initialize lib
       if( !testInitialize())
       {
            std::cout << "Could not initialize libmyadd2!" << std::endl;
            return -1; 
       }
 
 mwArray a(2, 2,  mxDOUBLE_CLASS);
        double *aData;
       aData = new double[4];
        int i;
        for( i=0; i<4; ++i)
        {
                aData[i] = 1.0*i;
        }
        // print output
        std::cout << "a = " << std::endl;
        std::cout << aData[0] << ",t" << aData[1] << std::endl;
        std::cout << aData[2] << ",t" << aData[3] << std::endl;

        a.SetData(aData, 4);

        // declare and initialize b
        mwArray b(2, 2,  mxDOUBLE_CLASS);
      /*  b(1,1) = 11;
        b(1,2) = 12;
        b(2,1) = 21;
        b(2,2) = 22;*/
      double *bData;
      bData = new double[4];
   bData[0]=11;bData[1]=12;
   bData[2]=21;   bData[3]=22;
    std::cout << "b = " << std::endl;
        std::cout << bData[0] << ",t" << bData[1] << std::endl;
        std::cout << bData[2] << ",t" << bData[3] << std::endl;
   b.SetData(bData, 4);


        mwArray y(2, 2,  mxDOUBLE_CLASS);
        mwArray z(2, 2,  mxDOUBLE_CLASS);

        
        double *yData, *zData;
        yData = new double[4];
        if( yData == NULL )
        {
                std::cout << "Failed to allocate memory for yData!" << std::endl;
                return -1;
        }

        zData = new double[4];
  myadd(2,y,z,a,b);
  y.GetData(yData,4);
  cout<<"result:"<<yData[1]<<endl;
    // terminate the lib
       testTerminate();
       // terminate MCR
       mclTerminateApplication();
 return 0;
}

-------------------------------------------------------------------------------------

mclmcrrt.lib
mclmcr.lib
libmex.lib
libmx.lib
libeng.lib
test.lib

--------------------------------------------------------------------------------------

 



https://blog.sciencenet.cn/blog-286439-481366.html

上一篇:考博英语学习经历
下一篇:职称压死人,科研体系急需改革
收藏 IP: 221.226.44.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-20 03:05

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部