Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从GTK+;2c码_C_Matlab_Octave_Mex_Matlab Engine - Fatal编程技术网

如何从GTK+;2c码

如何从GTK+;2c码,c,matlab,octave,mex,matlab-engine,C,Matlab,Octave,Mex,Matlab Engine,如何从GTK+2C代码调用内置的matlab/octave函数。我知道如何通过Mex文件从C代码调用倍频程函数,但我不知道如何从GTK+2C代码调用matlab/octave函数。是否可以使用Mex文件从GTK+2C代码调用matlab/octave函数。假设我想用GTK+2C代码制作GUI,用matlab/octave函数显示两个数字相加的结果。我在网上搜索过,但没有找到我要找的东西。我不确定是否尝试从matlab/octave编译它,如何添加GTK+2所需的标志 我张贴这个代码,你能告诉我如

如何从GTK+2C代码调用内置的matlab/octave函数。我知道如何通过Mex文件从C代码调用倍频程函数,但我不知道如何从GTK+2C代码调用matlab/octave函数。是否可以使用Mex文件从GTK+2C代码调用matlab/octave函数。假设我想用GTK+2C代码制作GUI,用matlab/octave函数显示两个数字相加的结果。我在网上搜索过,但没有找到我要找的东西。我不确定是否尝试从matlab/octave编译它,如何添加GTK+2所需的标志

我张贴这个代码,你能告诉我如何编译它没有错误吗

当我尝试使用
mkoctfile--mex addition\u GUI.c
编译它时,出现错误
addition\u GUI.c:1:20:致命错误:gtk/gtk.h:没有终止此类文件或目录编译。

这是密码

#include<gtk/gtk.h>
#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mxArray *in[2], *out[1];

in[0] = mxCreateDoubleScalar(1);
in[1] = mxCreateDoubleScalar(2);

mexCallMATLAB(1, out, 2, in, "addition");
mexCallMATLAB(0, NULL, 1, out, "disp");

mxDestroyArray(in[0]);
mxDestroyArray(in[1]);
mxDestroyArray(out[0]);
}
    void static call(GtkWidget *widget,gpointer data)
{
g_print("\n%s\n",gtk_entry_get_text(GTK_ENTRY(data)));
gint a=3;
gint b=2;
gint x;
x=a+b;
char y[4]; 
    sprintf(y, "%d", x);
    gtk_entry_set_text(GTK_ENTRY(data),y); 
}

    int main(int agrc, char *agrv[])

{
gtk_init(&agrc,&agrv);
GtkWidget *entry,*window,*button,*hbox;

window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL);

hbox=gtk_hbox_new(0,0);
gtk_container_add(GTK_CONTAINER(window),hbox);
button=gtk_button_new_with_mnemonic("ADD");
entry=gtk_entry_new();
const char* sum="3+2";
gtk_entry_set_text(GTK_ENTRY(entry),sum); 
g_signal_connect(button,"clicked",G_CALLBACK(call),entry);
g_signal_connect(entry,"activate",G_CALLBACK(call),entry);



gtk_box_pack_start(GTK_BOX(hbox),button,0,0,0);

gtk_box_pack_start(GTK_BOX(hbox),entry,0,0,0);

gtk_widget_show_all(window);
gtk_main();
return 0;

}
#包括
#包括“mex.h”
void MEX函数(int nlhs、mxArray*plhs[]、int nrhs、const mxArray*prhs[])
{
mxArray*in[2],*out[1];
in[0]=mxCreateDoubleScalar(1);
in[1]=mxCreateDoubleScalar(2);
mexCallMATLAB(1,out,2,in,“加法”);
mexCallMATLAB(0,NULL,1,out,“disp”);
MX阵列(在[0]中);
MX阵列(在[1]中);
MX阵列(输出[0]);
}
无效静态调用(GtkWidget*小部件,gpointer数据)
{
g_print(“\n%s\n”,gtk_条目\u获取文本(gtk_条目(数据)));
gint a=3;
gint b=2;
金特x;
x=a+b;
chary[4];
sprintf(y,“%d”,x);
gtk_条目_设置_文本(gtk_条目(数据),y);
}
int main(int agrc,字符*agrv[])
{
gtk_init(agrc和agrv);
GtkWidget*条目、*窗口、*按钮、*hbox;
窗口=gtk_窗口_新建(gtk_窗口_顶层);
g_信号连接(窗口,“删除事件”,g_回调(gtk_主退出),空);
hbox=gtk_hbox_新(0,0);
gtk_容器添加(gtk_容器(窗口),hbox);
按钮=gtk_按钮_新建_,带助记符(“添加”);
entry=gtk_entry_new();
常量字符*sum=“3+2”;
gtk_条目_集合_文本(gtk_条目(条目),总和);
g_信号连接(按钮“点击”,g_回调(呼叫),输入);
g_信号连接(输入,“激活”,g_回调(呼叫),输入);
gtk_盒包装启动(gtk_盒(hbox),按钮,0,0,0);
gtk_盒包装启动(gtk_盒(hbox),输入,0,0,0);
gtk_小部件_全部显示(窗口);
gtk_main();
返回0;
}
倍频程可以是。有关示例,请参见


MATLAB也可以从您的应用程序中使用。

您尝试过什么吗?或者你只是希望有人在这里为你做这项工作?@EliasVanOotegem我曾尝试从C代码mex文件调用倍频程函数,我成功了,但我不知道如何为GTK+2编译它code@user3132152:我想你把这里的事情弄糊涂了;MEX/OCT文件(用C/C++编写)只能由MATLAB/Octave调用。据我所知,您希望做的与从独立的C/C++程序调用MATLAB/Octave相反的事情,我在下面的答案中给出了这个程序。。。