为什么我的DirectInput8堆栈溢出?

时间:2011-04-14 22:47:34

标签: c++ c winapi directx directinput

整个程序太复杂,无法在此处显示。基本上,只需注意green highlights in my recent git commit即可。我对DirectInput很新,所以我希望我犯了几个错误。我已经非常仔细地研究了MSDN文档,所以我保证我不会把它扔到那里并在它上面加上FIX IT FOR ME。 :)

基本上,我认为我已经将我的问题缩小到了围绕Engine :: getEvent(第238行)的代码区域。我不明白这些功能是如何工作的,而且我已经弄乱了某些部分来实现不同的结果。我的目标是直接读取键盘事件并将这些原始数字输出到屏幕上(稍后我将处理数字的含义)。这里的问题与KEYBOARD_BUFFER_SIZE有关。如果我把它变小,程序似乎运行正常,但它不输出任何事件。如果我把它变大,它运行得更好,但它开始变慢然后冻结(OpenGL窗口只有一个旋转的彩色立方体)。如何正确捕获键盘事件?

我检查了代码中更高级别的所有设置步骤的返回值。他们都返回DI_OK就好了。

1 个答案:

答案 0 :(得分:2)

您的代码似乎没问题(根据this tutorial, which I have used in the past)。使用几个基于堆栈的数组是值得怀疑的,但不应该是一个问题(除非你开始运行大量的并发getEvent调用)。

但是,您最好的选择是stop using DirectInput并开始使用Windows Raw Input。最好尽早(即现在)进行此切换,而不是稍后意识到您确实需要使用DI以外的其他东西来获得您想要的结果。