0

我构建了一个模块,该模块创建一个带有来自 windows 的 EDIT 窗口类的编辑框的窗口。它被设计为仅使用 ansi 字符集而不使用任何 unicode。

我使用EM_GETHANDLE来接收编辑控件的缓冲区。

现在这是我的问题:(引自上面的链接)

Note For Comctl32.dll version 6, the buffer always contains an array of WCHARs, regardless of whether an ANSI or Unicode function created the edit control. For more information on DLL versions, see Common Control Versions.

因此,当我的模块被已初始化 comctl32 的应用程序加载时,我的整个代码都会中断。

我的问题:有没有办法阻止 CreateWindowA 使用 comclt32 或者有没有人有解决这个问题的想法?

4

1 回答 1

1

如果应用COMCTL32.DLL程序清单中指定了应用程序,则应用程序将使用它,如下所述:http: //msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx

如果您的模块是 DLL,那么您可以尝试使用一些隔离技术,使其不依赖于COMCTL32.DLL决定使用的 .exe 版本,但这可能会带来许多其他缺点。

我建议使用WM_GETTEXTAorGetWindowTextA()代替,它将转换的字符串复制到您的缓冲区中。设计一个需要旧版本 DLL 才能正常工作的模块简直是个坏主意。

于 2013-02-11T12:27:51.590 回答