我构建了一个模块,它用windows的edit windowclass中的编辑框创建一个窗口。它只适用于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,或者有谁有办法解决这个问题?
发布于 2013-02-11 20:27:52
如果在应用程序的清单中指定了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才能正常工作的模块根本就不是个好主意。
https://stackoverflow.com/questions/14811325
复制相似问题