Windows 如何使WndProc内联?

Windows 如何使WndProc内联?,windows,winapi,inline,wndproc,winmain,Windows,Winapi,Inline,Wndproc,Winmain,是否可能,如果可能,如何使WndProc内联 也就是说,我想处理Windows消息。。。在WinMain内部, 以避免看似不必要的函数调用 谢谢。您不能内联窗口过程。这是故意的 注册窗口类时,可以很容易地看到架构限制。这是通过调用、传递结构来完成的。该结构需要有效的lpfnWndProc。不能获取内联函数的地址 还有其他方面要求窗口过程成为实际函数。例如,存储窗口过程地址用作自定义点,并允许(例如)调整标准控件的行为 您无法避免函数调用。如果要限制变量的范围,可以将lambda表达式的结果分配给

是否可能,如果可能,如何使WndProc内联

也就是说,我想处理Windows消息。。。在WinMain内部, 以避免看似不必要的函数调用


谢谢。

您不能内联窗口过程。这是故意的

注册窗口类时,可以很容易地看到架构限制。这是通过调用、传递结构来完成的。该结构需要有效的
lpfnWndProc
。不能获取内联函数的地址

还有其他方面要求窗口过程成为实际函数。例如,存储窗口过程地址用作自定义点,并允许(例如)调整标准控件的行为


您无法避免函数调用。如果要限制变量的范围,可以将lambda表达式的结果分配给
lpfnWndProc
成员。Visual Studio确保合成正确的函数签名。

如果窗口过程可以内联,那么
GetWindowLongPtrW(hwnd,GWLP\u WNDPROC)
返回什么?或者,您会建议系统如何在没有实际调用的情况下实现各种钩子?现在真的,这听起来像是过早的优化。尤其是UI代码,瓶颈是用户,而不是代码。
WndProc
这是回调,由系统调用。无论如何,您必须将函数的某些地址传递给系统,该地址将被调用。您为什么认为这些函数调用有问题?@DavidHeffernan,因为我希望为相对较弱的设置(Intel(R)Core i5(TM)-2520M 8gb ram,集成图形)创建一个最佳的3D[动画]应用程序,并通过
DispatchMessage()
every
SetTimer()
勾选消除WinMain对WM_PAINT的持续调用,但是,正如怀疑的那样(根据@IInspectable的回答),它似乎受到设计的限制。但函数调用开销并不是一个限制因素。你把它误诊了。谢谢你的回答,这正是我多年来一直在为Windows编程所怀疑的(虽然不是专业的)。我的意图(正如我在回复帖子下的评论时所提到的)是优化3D图形,它每勾选一次都会重新计算和重新绘制,因此WM_PAINT被称为5-50次/秒(fps),具体取决于场景。因此,除了优化所涉及的算法之外,尽可能地消除跳转/调用+ret是很自然的。简单地说,与单个堆分配相比,函数调用会逐渐消失在统计噪声中。此外,GPU和CPU并行工作。当GPU忙于显示当前帧时,CPU通常为下一帧准备数据。通常情况下,CPU会空转,等待GPU完成任务。优化CPU上的函数调用只会使其空闲时间延长几个周期。