我构建了一个模块,该模块从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,或者有人有解决这个问题的想法吗?
如果在应用程序的清单中指定了COMCTL32.DLL
,则应用程序将使用,如下所述:http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx
如果您的模块是 DLL,那么您可以尝试使用一些隔离技术,这样它就不依赖于.exe决定使用的COMCTL32.DLL
版本,但这可能会带来许多其他缺点。
我建议改用WM_GETTEXTA
或GetWindowTextA()
,这会将转换后的字符串复制到缓冲区中。设计一个需要旧版本的DLL才能正常工作的模块简直是一个坏主意。