簡體   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