我是靠谱客的博主 知性盼望,最近开发中收集的这篇文章主要介绍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.

最后

以上就是知性盼望为你收集整理的matlab中mex文件怎么查看,c – 如果Matlab以GUI开始,如何从MEX文件中检查的全部内容,希望文章能够帮你解决matlab中mex文件怎么查看,c – 如果Matlab以GUI开始,如何从MEX文件中检查所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部