微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您可以使用 struct XrmOptionDescRec 数组将非 Motif 相关参数传递给应用程序吗?

如何解决您可以使用 struct XrmOptionDescRec 数组将非 Motif 相关参数传递给应用程序吗?

我已经看到如何通过 XrmOptionDescRec 结构数组配置 xrm 资源名称。可以在 this 问题中找到一个示例。

我想知道我是否也可以通过这种方式传递非 X11 相关参数。

特别是,如果我想将命名管道的名称传递给应用程序,以便 X11 应用程序打开该特定命名管道,

  1. 是否可以选择使用 XrmOptionDescRec 结构数组?
  2. 我可以设置和检索任意资源名称吗?
  3. 如果是这样,我如何检索参数值?
#include <stdlib.h>
#include <stdio.h>
 
#include <Xm/Xm.h>
#include <Xm/PushB.h>
 
static XrmOptionDescRec options[] = {
    { "-namedpipe","namedpipe",XrmoptionSepArg,NULL },};
 
int main(int argc,char *argv[]) {

    Widget          toplevel;             /* Top Level Button */
    XtAppContext    app;                  /* Application Context */
    char            *window_title = NULL; /* Top Level Window Title */
    
    /* INITIALIZE TOP LEVEL WINDOW */
    XtSetLanguageProc(NULL,NULL,NULL);
    toplevel = XtVaOpenApplication( &app,argv[0],options,XtNumber(options),&argc,argv,sessionShellWidgetClass,NULL);

    /* HOW WOULD I GET HERE named_pipe ASSIGNED ????? */
    char named_pipe[256];
    ...
    
    /* REALIZE TOPLEVEL WINDOW AND LAUNCH APPLICATION LOOP */
    XtRealizeWidget(toplevel);
    XtAppMainLoop(app);
    
    return 0;

}

解决方法

仅供任何感兴趣的人使用。在 Xt/Motif 应用程序中,这似乎是将应用程序命令行参数作为资源处理的方式(它们的优点是可以被 Xlib 资源管理器功能周围的 Xt 包装器顺利处理)。因此,基本上您将能够在用户、应用程序和系统范围的资源文件中以及通过命令行定义参数。

#define XtNnamedPipe "namedPipe"
#define XtCNamedPipe "NamedPipe"

typedef struct {
    String named_pipe;
} AppData;

AppData app_data;

static XtResource resources[] = {
    {
        XtNnamedPipe,XtCNamedPipe,XtRString,sizeof(String),XtOffsetOf(AppData,named_pipe),NULL
    },};

static XrmOptionDescRec options[] = {
    {"-namedpipe","namedPipe",XrmoptionSepArg,"/tmp/namedpipe0"},};

...


int main(int argc,char *argv[]) {

    ...

    toplevel = XtVaOpenApplication( 
        &app,argv[0],options,XtNumber(options),&argc,argv,NULL,sessionShellWidgetClass,XmNwidth,400,XmNheight,300,NULL
    );

    ...

    /* GET APPLICATION RESOURCES */
    XtGetApplicationResources(
        toplevel,&app_data,resources,XtNumber(resources),0);

    printf("DEBUG: %s\n",app_data.named_pipe);       

    ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。