gpt4 book ai didi

windows - CreateWindowEx 失败并出现 ERROR_CANNOT_FIND_WND_CLASS

转载 作者:可可西里 更新时间:2023-11-01 10:09:16 29 4
gpt4 key购买 nike

我正在尝试创建一个具有特定类类型(“VSDebugger CDataTipWnd”)的窗口,但是,当我运行 CreateWindowEx 时它失败了,并且 GetLastError 告诉我找不到该类。这是引用代码,但应该无关紧要:

const Win32WindowStyles dwStyle = Win32WindowStyles.WS_POPUP;
IntPtr wnd = NativeMethods.CreateWindowEx(0L, "VSDebugger CDataTipWnd", "MyWindow",
dwStyle, 100, 100, 100, 100, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);

我在这个过程中作为插件运行,我知道之前创建了一个此类的窗口(我使用 Winspector/Spy++ 确保了这一点),但是,当我尝试创建一个这种类型的窗口时我自己,它不起作用,我不明白为什么。

documentation说“类名可以是用 RegisterClass 或 RegisterClassEx 注册的任何名称,前提是注册类的模块也是创建窗口的模块。类名也可以是任何预定义的系统类名。对于一个系统类名称列表,请参阅备注部分。” RegisterClass 是否有可能确实是在另一个模块(dll/exe)中创建的?仅仅在另一个模块中创建一个类是否会使它无法从另一个模块通过名称访问??如果是这样,我还能以某种方式找到那个类并用它创建一个窗口吗?

谢谢!活力

最佳答案

您正在将 IntPtr.Zero 传递给 HINSTANCE 参数。

必须将注册该类的模块(EXE 或 DLL)的 HINSTANCE 提供给 CreateWindowEx。

如果您认为主 EXE 注册了该类,那么您可以通过 GetModuleHandle(IntPtr.Zero) 获取它的 HINSTANCE。

如果另一个 DLL 注册了该类,那么您将需要一些方法来知道是哪个 DLL 并获取它的 HINSTANCE/HMODULE(如今这两个是相同的)。

关于windows - CreateWindowEx 失败并出现 ERROR_CANNOT_FIND_WND_CLASS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4371470/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com