为什么Xlib规范不使用指针来构造Window?

问题描述 投票:0回答:2

尽管以其他方式使用指针,但到目前为止我见过的所有 Xlib 函数都是按值而不是按引用传递其 Window 结构。例如:

https://tronche.com/gui/x/xlib/ICC/client-to-window-manager/XGetClassHint.html

https://tronche.com/gui/x/xlib/window/XDestroyWindow.html

这有什么特别的理由吗?特别是,在 XGetClassHint 的情况下,第一个和第三个参数是通过引用传递的,但第二个参数不是。

c xlib
2个回答
3
投票

看起来这些示例中的

Window
不是一个结构体;它只是一个无符号长整型。也就是说,给定:

#include <X11/X.h>
Window w;

如果我通过

gcc -E
我看到:

$ gcc -E wintest.c | grep Window
typedef XID Window;
Window w;

并且

XID
是:

$ gcc -E wintest.c | grep XID
typedef unsigned long XID;

3
投票

A

Window
是一个生活在 X-Server 上而不是客户端上的野兽。客户端唯一需要的是一个唯一地寻址服务器上真实窗口的标识符。这不是一个结构,而是一个 handle,或者
XID
,而不是一个指针,而是一个“句柄”,因为指向外部地址空间(在服务器上)的指针没有多大用处。

© www.soinside.com 2019 - 2024. All rights reserved.