我构建了一个模块,该模块从 Windows 的 EDIT 窗口类创建一个带有编辑框的窗口。它被设计为仅适用于 ansi 字符集,而不使用任何 unicode。
我使用EM_GETHANDLE将缓冲区接收到编辑控件。
现在这是我的问题:(引用上面的链接)
注意 对于 Comctl32.dll 版本 6,缓冲区始终包含 WCHAR 数组,无论编辑控件是由 ANSI 还是 Unicode 函数创建的。有关 DLL 版本的详细信息,请参阅公共(public)控件版本。
因此,当我的模块被初始化了 comctl32 的应用程序加载时,我的整个代码就会崩溃。
我的问题:有没有办法阻止 CreateWindowA 使用 comclt32 或者有人有办法解决这个问题吗?
最佳答案
如果在应用程序 list 中指定了COMCTL32.DLL
,则应用程序将使用该DLL,例如这里:http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx
如果您的模块是 DLL,那么您可以尝试使用一些隔离技术,这样它就不会依赖于 .exe 决定使用的 COMCTL32.DLL
版本,但这可能会带来许多其他缺点.
我建议改用WM_GETTEXTA
或GetWindowTextA()
,这会将转换后的字符串复制到缓冲区中。设计一个需要旧版本 DLL 才能正常工作的模块简直是个坏主意。
关于c - 强制使用 ANSI 编辑控件而不是 comctl32 编辑控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14811325/