64 matlab vc 引擎,VC6.0调用MATLAB引擎问题

按照一个例子做了个VC6.0调用MATLAB引擎,先在创建的win32 application项目中成功调用引擎,并且绘制出了结果曲线,但是同样的程序放到建立的MFC项目中,就不能实现调用MATLAB引擎绘制曲线,虽然是可以运行成功,但是得到的是一个空白的界面,请高手指点下吧,程序如下:

/* $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

#include

#include

#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('Position vs. Time for a falling object');");

engEvalString(ep, "xlabel('Time (seconds)');");

engEvalString(ep, "ylabel('Position (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);

return EXIT_SUCCESS;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值