这是MATLAB自带的例子,我在WindowsXP(SP2), MATLAB R2007b, VC6.0下实现。 具体的步骤是: 1). 设置系统环境变量path,path里面要包括MATLAB的exe, dll那个路径 %MATLAB_PATH%\bin\win32 只要MATLAB是正确安装,它应该会自动配置path环境变量的。 右击我的电脑->属性->高级->环境变量->系统变量 双击path path值应该有以下两个值,中间是分号 d:\MATLABR2007b\bin;d:\MATLABR2007b\bin\win32 2). 设置VC的路径 运行VC,转到options include增加MATLAB的include路径 %MATLAB_PATH%\extern\include lib增加%MATLAB_PATH%\extern\lib\win32\microsoft 这一步以后都不用做了。 3). 在VC中新建一个console项目(也可以是win32,mfc等其他项目),项目的link输入增加XXXXXXXXXb和XXXXXXXXb(每个工程都要添加,否则编译不能通过) 4). main函数的代码: /* $Revision: 1.8.4.1 $ */ /* * engdemo.c * * This is a simple program that illustrates how to call the MATLAB * Engine functions from a C program. * * Copyright 1984-2003 The MathWorks, Inc. * All rights reserved */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "engine.h" #define BUFSIZE 256 int main() { Engine *ep; mxArray *T = NULL, *result = NULL; char buffer[BUFSIZE+1]; double time[10] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 }; /* * Start the MATLAB engine locally by executing the string * "matlab" * * To start the session on a remote host, use the name of * the host as the string rather than \0 * * For more complicated cases, use any string with whitespace, * and that string will be executed literally to start MATLAB */ if (!(ep = engOpen("\0"))) { fprintf(stderr, "\nCan't start MATLAB engine\n"); return EXIT_FAILURE; } /* * PART I * * For the first half of this demonstration, we will send data * to MATLAB, analyze the data, and plot the result. */ /* * Create a variable for our data */ T = mxCreateDoubleMatrix(1, 10, mxREAL); memcpy((void *)mxGetPr(T), (void *)time, sizeof(time)); /* * Place the variable T into the MATLAB workspace */ engPutVariable(ep, "T", T); /* * Evaluate a function of time, distance = (1/2)g.*t.^2 * (g is the acceleration due to gravity) */ engEvalString(ep, "D = .5.*(-9.8).*T.^2;"); /* * Plot the result */ engEvalString(ep, "plot(T,D);"); engEvalString(ep, "title('[s:9]osition vs. Time for a falling object');"); engEvalString(ep, "xlabel('Time (seconds)');"); engEvalString(ep, "ylabel('[s:9]osition (meters)');"); /* * use fgetc() to make sure that we pause long enough to be * able to see the plot */ printf("Hit return to continue\n\n"); fgetc(stdin); /* * We're done for Part I! Free memory, close MATLAB engine. */ printf("Done for Part I.\n"); mxDestroyArray(T); engEvalString(ep, "close;");
/* * PART II * * For the second half of this demonstration, we will request * a MATLAB string, which should define a variable X. MATLAB * will evaluate the string and create the variable. We * will then recover the variable, and determine its type. */
/* * Use engOutputBuffer to capture MATLAB output, so we can * echo it back. Ensure first that the buffer is always NULL * terminated. */ buffer[BUFSIZE] = '\0'; engOutputBuffer(ep, buffer, BUFSIZE); while (result == NULL) { char str[BUFSIZE+1]; /* * Get a string input from the user */ printf("Enter a MATLAB command to evaluate. This command should\n"); printf("create a variable X. This program will then determine\n"); printf("what kind of variable you created.\n"); printf("For example: X = 1:5\n"); printf(">> "); fgets(str, BUFSIZE, stdin);
/* * Evaluate input with engEvalString */ engEvalString(ep, str);
/* * Echo the output from the command. First two characters are * always the double prompt (>>). */ printf("%s", buffer+2);
/* * Get result of computation */ printf("\nRetrieving X...\n"); if ((result = engGetVariable(ep,"X")) == NULL) printf("Oops! You didn't create a variable X.\n\n"); else { printf("X is class %s\t\n", mxGetClassName(result)); } } /* * We're done! Free memory, close MATLAB engine and exit. */ printf("Done!\n"); mxDestroyArray(result); engClose(ep);
200字以内,仅用于支线交流,主线讨论请采用回复功能。