如何在我的代码中使用 Matlab 引擎(用于调用 `engOpenSingleUse()`)?

2023-12-12

我正在尝试向 Matlab 引擎发送简单的字符串命令。

这是我的代码(我的代码中其他任何地方都没有与 Matlab API 相关的代码,除了#include "engine.h" line):

void MatlabPlotter::DrawInMatlab() const
{
    std::string PlotCommand = "x=[0 1 2 3 4 5];y=[0 1 4 9 16 25];plot(x, y);";
    void * vpDcom = NULL;
    int iReturnValue;
    engOpenSingleUse(PlotCommand.c_str(), vpDcom, &iReturnValue);
}

代码编译并成功运行,没有任何编译器错误或运行时错误消息。 “Matlab 命令行窗口”打开;我得到如下屏幕:

Empty Matlab Command Window

如您所见,命令窗口是空的。屏幕上没有绘图窗口。
当我手动在该窗口中键入命令时,我得到的绘图没有任何错误,如下所示:

Manually typed command to the command window

这是官方文档页面engOpenSingleUse()功能:
http://www.mathworks.com/help/techdoc/apiref/engopensingleuse.html

I added <MatlabInstallationDir>\extern\lib\win64\microsoft\libeng.lib我的项目中的库(我正在 x64 调试配置中进行编译)。
包括我<MatlabInstallationDir>\extern\include\engine.h头文件。
我输入了!matlab /regserver命令到Matlab主窗口(如Matlab文档页面中所述)engOpenSingleUse()函数)以确保 Matlab 引擎已注册到我的操作系统。

为什么我打电话时没有任何反应engOpenSingleUse()功能?
为什么我在发送字符串命令时没有弹出绘图窗口PlotCommand对象绘制绘图?
我究竟做错了什么?

操作系统:Windows 7 Ultimate x64 SP1,最新
IDE:Visual Studio 2010,(版本 10.0.40219.1 SP1Rel)
Matlab:7.8.0(R2009a)


根据您链接到的文档,字符串参数engOpenSingleUse是“启动”命令 - 这不是要执行的 MATLAB 命令。engOpenSingleUse just startsMATLAB 引擎 - 您必须调用不同的函数才能真正use发动机通过engEvalString

Engine* matlabEngine = engOpenSingleUse(0, vpDcom, &iReturnValue);
engEvalString(matlabEngine, PlotCommand.c_str());

engOpenSingleUse仅仅意味着它启动的引擎只能被一个应用程序使用,not它将执行单个命令字符串。

来自文档:

C Syntax

#include "engine.h"
Engine *engOpenSingleUse(const char *startcmd, void *dcom,   int *retstatus);

论据:

startcmd 要启动的字符串 MATLAB 过程。在 Microsoft Windows 系统上,startcmd 字符串必须 为 NULL。

dcom 保留供将来使用;必须为 NULL。

retstatus 返回状态;可能的失败原因。

返回仅 Microsoft Windows 操作系统指向引擎的指针 句柄,如果打开失败则为 NULL。

UNIX 操作系统 UNIX 系统不支持。

为了完整起见,我将提到您还应该检查以确保 engOpen 调用在继续程序之前返回非 NULL 指针。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在我的代码中使用 Matlab 引擎(用于调用 `engOpenSingleUse()`)? 的相关文章

随机推荐