我正在尝试收听键盘输入(使用X11事件循环)并获取扫描码.这些扫描码应该指代密钥的物理位置,而不是它所键入的字符.问题是,我所能得到的只是KeySyms和KeyCodes,它们针对不同的语言进行了不同的映射(例如QWERTY vs QWERTZ).
我目前的解决方案是阅读"/ usr/share/X11/xkb/keycodes/evdev"文件.它包含密钥位置到密钥代码的映射.使用这个我可以简单地将任何键码转换回扫描码.我的猜测是,这不是一种稳定的做事方式.我根本不太了解Linux.这就是为什么我认为在这里问这可能是一个好主意.
假设大多数用户的机器正在使用这些evdev映射是否安全?如果没有,我还能在哪里找到实际使用的关键映射?或者是否有更好的解决方案?
我想声明一个foo()在静态库内部调用的函数,并在静态库中调用它.但是,我想强制应用程序的用户提供定义foo().这样的事情在C/C++中是可能的吗?
所以作为一个例子,想象一下这是静态库:
在foo.h中:
void foo();
Run Code Online (Sandbox Code Playgroud)
在foo.cpp中:
#include "foo.h"
int main() {
foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后在使用此静态库的应用程序中:
在app.cpp中:
#include "foo.h"
void foo() {
// Do something here...
}
Run Code Online (Sandbox Code Playgroud)
我想这必须是例如Win32 API对其WinMain()功能的作用,这实际上取代了通常的main().这怎么工作呢?在上面的例子静态库当然会不编译,由于undefined reference到foo().