【问题标题】:how to call a matlab/octave function from GTK+2 C code如何从 GTK+2 C 代码中调用 matlab/octave 函数
【发布时间】:2014-01-15 18:57:47
【问题描述】:

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

我正在发布这段代码,你能告诉我如何编译它而不出错

当我尝试使用 mkoctfile --mex addition_GUI.c 编译它时出现错误 addition_GUI.c:1:20: fatal error: gtk/gtk.h: No such file or directory compilation terminated.

这里是代码

#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;

}

【问题讨论】:

  • 你尝试过什么吗?还是您只是希望这里有人为您工作?
  • @EliasVanOotegem 我尝试从 C 代码 mex 文件中调用 octave 函数并且我成功了,但我不知道如何为 GTK+2 代码编译它
  • @user3132152:我认为您在这里混淆了事物; MEX/OCT 文件(用 C/C++ 编写)只能由 MATLAB/Octave 调用。据我了解,您希望与从独立 C/C++ 程序调用 MATLAB/Octave 相反,我已在下面的答案中显示...

标签: c matlab octave mex matlab-engine


【解决方案1】:

八度可以是embedded inside standalone C++ program。示例见here

MATLAB 也可以通过 MATLAB Engine API 在您的应用程序中使用。

【讨论】:

    猜你喜欢
    • 2011-03-11
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2013-05-26
    • 2016-09-07
    • 2017-02-18
    • 1970-01-01
    相关资源
    最近更新 更多