繁体   English   中英

RichEdit 控件 EM_POSFROMCHAR 访问冲突

[英]RichEdit Control EM_POSFROMCHAR Access Violation

我不明白。

我发了:

SendMessage(hrichedit, EM_POSFROMCHAR, (WPARAM)pos, 0);

pos=0x69

文件说:

wParam Rich Edit 1.0 和 3.0:指向接收角色客户区坐标的 POINTL 结构的指针。 坐标以屏幕为单位,并且相对于控件客户区的左上角。

编辑控件和 Rich Edit 2.0:字符的从零开始的索引。

lParam Rich Edit 1.0 和 3.0:字符的从零开始的索引。

编辑控件和 Rich Edit 2.0:不使用此参数。

我很确定我正在使用 Rich Edit 2.0 控件并获得以下内容:

在 my.exe 中的 0x00007FFE6A0121C6 ( riched20.dll ) 抛出异常:0xC0000005:访问冲突写入位置0x0000000000000069

我还确认查看了 CPU 反汇编,它正在尝试写入pos传递的值的地址。

到底是怎么回事?

我还认为它可能不是 2.0.. 但GetClassName()返回RichEdit20W

该文档还说:

Rich Edit 3.0 及更高版本:为了向后兼容,Microsoft Rich Edit 3.0 支持 Microsoft Rich Edit 2.0 使用的语法。 如果 Microsoft Rich Edit 3.0 检测到 wParam 不是有效的 POINTL 指针,它会假定消息是使用 Microsoft Rich Edit 2.0 语法发送的。 在这种情况下,它使用返回值来返回坐标。

但显然情况并非如此。

答案是即使会出现 Visual Studio 异常,异常也会由rich20.dll处理并正确返回信息,就像使用 RichEdit V2 控件一样。 看来Win2K是在V3开始的时候,所以如果你只需要处理Win2K或更高版本,你可以使用V3格式,如果需要NT4支持,你可以使用V2格式并且可以使用V3(也是rich20.dll的一部分).

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM