matlab中mex文件怎么查看,c – 如果Matlab以GUI开始,如何从MEX文件中检查

我已经尝试自己找到这个问题的答案,并且

asked my question at Matlab Central没有得到任何回复.现在我希望你们中的一个可以帮助我解决我的问题.这是我的(改进的)问题:

标题已经很好地描述了我必须要做的事情:我必须从MEX文件中检查Linux上的Matlab R2013a是否已经启动了GUI.

背景:我运行一个C/C++程序(我可以使用这些来源,但不允许更改它们,只有在必要时添加新文件!)来自Matlab.我写了几个(附加的)MEX文件,允许程序使用mexCallMATLAB来评估m文件.现在我需要知道在哪里我必须指导C/C++程序的输出,这取决于Matlab是否已经启动了GUI.我需要从我的MEX文件中调用的函数中获取此信息.到目前为止,我只能通过更改硬编码参数来重定向C/C++程序的输出,但我已经可以将它指向正确的输出,这意味着没有控制台,或者带有GUI的Matlab命令窗口.

直到R2012x,可以使用C-function isatty()进行检查,但是从R2013a开始,此检查不再起作用,这意味着Matlab似乎始终只从控制台启动,即使它已经启动了GUI.

你们中的任何人都知道这样的功能,还是我的问题的另一种解决方案?

提前谢谢大家!

问候,mindm49907

最佳答案 通过mexCallMATLAB调用usejava(‘desktop’).从

the docs for usejava开始:

Syntax

tf = usejava(feature)

Java feature, specified as one of these values:

'awt' Java GUI components in the Abstract Window Toolkit (AWT)

components are available.

'desktop' MATLAB interactive desktop is running.

'jvm' Java Virtual Machine software (JVM) is running.

'swing' Swing components (Java lightweight GUI components in the Java Foundation Classes) are available.

atDesktop.cpp

#include "mex.h"

bool atMLDesktop()

{

mxArray *tf(0);

mxArray *permuteRHSArgs = mxCreateString("desktop");

mexCallMATLAB(1, &tf, 1, &permuteRHSArgs, "usejava");

return mxIsLogicalScalarTrue(tf);

}

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

{

plhs[0] = mxCreateLogicalScalar(atMLDesktop());

}

测试

从MATLAB桌面:

>> atDesktop

ans =

1

>> tf = atDesktop

tf =

1

从终端或裸命令窗口:

» tf = atDesktop

tf =

0

您也可以使用与上面相同的方式在MATLAB中检查com.mathworks.mde.desk.MLDesktop.getInstance.getMainFrame,但MathWorks支持usejava.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值