如何解决您可以使用 struct XrmOptionDescRec 数组将非 Motif 相关参数传递给应用程序吗?
我已经看到如何通过 XrmOptionDescRec 结构数组配置 xrm 资源名称。可以在 this 问题中找到一个示例。
我想知道我是否也可以通过这种方式传递非 X11 相关参数。
特别是,如果我想将命名管道的名称传递给应用程序,以便 X11 应用程序打开该特定命名管道,
- 是否可以选择使用 XrmOptionDescRec 结构数组?
- 我可以设置和检索任意资源名称吗?
- 如果是这样,我如何检索参数值?
#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 举报,一经查实,本站将立刻删除。