我的try一板,削中反攻技能咋不起作用呢?
本帖最后由 冥界3大法王 于 2024-3-6 17:36 编辑procedure TMainForm.sShellListView1DblClick(Sender: TObject);
begin
if POS('.rvf', sShellListView1.Selected.Caption) > 0 then
begin
try
RichViewEdit2.LoadRVF(sShellListView1.SelectedFolder.PathName);
RichViewEdit2.Format;
finally
ShowMessage(sShellListView1.Selected.Caption + #13#10 + '请按回车键打开文件夹!');
end;
end;
end;
有个用鼠标双击打开文件夹时触发的bug。。。当然,我也可以用反汇编的方法消除掉!
但是我加了判断是否文件扩展名是 .rvf了啊。。
再有我也加了 tr ...finally...end捕获异常了啊。但咋没有捕获到呢?是不是我的用法不够火候?{:301_974:} 菜百只能来看图了,
你图带书签的软件是什么 Kls673M 发表于 2024-3-6 17:42
菜百只能来看图了,
你图带书签的软件是什么
多功能高配火力全开大佬专用x64dg贴心汇编天使 信息不足,需要看 0000000064183AE1 这个地址附近的代码:
https://imgsrc.baidu.com/forum/pic/item/0bd162d9f2d3572c7d57dce6cc13632762d0c357.png 爱飞的猫 发表于 2024-3-6 18:05
信息不足,需要看 0000000064183AE1 这个地址附近的代码:
0000000064183AA0 | 55 | push rbp |
0000000064183AA1 | 53 | push rbx |
0000000064183AA2 | 48:83EC 78 | sub rsp,78 |
0000000064183AA6 | 48:8BEC | mov rbp,rsp |
0000000064183AA9 | 48:C745 40 00000000 | mov qword ptr ss:,0 |
0000000064183AB1 | 48:C745 38 00000000 | mov qword ptr ss:,0 |
0000000064183AB9 | 48:C745 48 00000000 | mov qword ptr ss:,0 |
0000000064183AC1 | 48:C745 50 00000000 | mov qword ptr ss:,0 |
0000000064183AC9 | 48:896D 58 | mov qword ptr ss:,rbp |
0000000064183ACD | 48:898D 90000000 | mov qword ptr ss:,rcx |
0000000064183AD4 | 90 | nop |
0000000064183AD5 | 48:8B85 90000000 | mov rax,qword ptr ss: |
0000000064183ADC | 48:8B88 B00A0000 | mov rcx,qword ptr ds: |
0000000064183AE3 | E8 087782FF | call moretool.639AB1F0 |
0000000064183AE8 | 48:89C1 | mov rcx,rax |
0000000064183AEB | 48:8D55 50 | lea rdx,qword ptr ss: |
0000000064183AEF | 48:8B18 | mov rbx,qword ptr ds: |
0000000064183AF2 | FF53 30 | call qword ptr ds: |
0000000064183AF5 | 48:8B45 50 | mov rax,qword ptr ss: |
0000000064183AF9 | 48:8945 60 | mov qword ptr ss:,rax |
0000000064183AFD | 48:8D0D 84010000 | lea rcx,qword ptr ds: | 0000000064183C88:L".rvf"
0000000064183B04 | 48:8B55 60 | mov rdx,qword ptr ss: |
0000000064183B08 | 41:B8 01000000 | mov r8d,1 |
0000000064183B0E | E8 3DF85EFF | call moretool.63773350 |
0000000064183B13 | 85C0 | test eax,eax |
0000000064183B15 | 0F8E A8000000 | jle moretool.64183BC3 |
0000000064183B1B | 90 | nop |
0000000064183B1C | 48:8B85 90000000 | mov rax,qword ptr ss: |
0000000064183B23 | 48:8B88 B00A0000 | mov rcx,qword ptr ds: |
0000000064183B2A | E8 51E8A3FF | call moretool.63BC2380 |
0000000064183B2F | 48:89C1 | mov rcx,rax |
0000000064183B32 | 48:8D55 48 | lea rdx,qword ptr ss: |
0000000064183B36 | E8 B582A3FF | call moretool.63BBBDF0 |
0000000064183B3B | 48:8B85 90000000 | mov rax,qword ptr ss: |
0000000064183B42 | 48:8B88 A80A0000 | mov rcx,qword ptr ds: |
0000000064183B49 | 48:8B55 48 | mov rdx,qword ptr ss: |
0000000064183B4D | E8 8E50F3FF | call moretool.640B8BE0 |
0000000064183B52 | 48:8B85 90000000 | mov rax,qword ptr ss: |
0000000064183B59 | 48:8B88 A80A0000 | mov rcx,qword ptr ds: |
0000000064183B60 | E8 7B2AF3FF | call moretool.640B65E0 |
0000000064183B65 | 90 | nop |
0000000064183B66 | 48:8B85 90000000 | mov rax,qword ptr ss: |
0000000064183B6D | 48:8B88 B00A0000 | mov rcx,qword ptr ds: |
0000000064183B74 | E8 777682FF | call moretool.639AB1F0 |
0000000064183B79 | 48:89C1 | mov rcx,rax |
0000000064183B7C | 48:8D55 38 | lea rdx,qword ptr ss: |
0000000064183B80 | 48:8B18 | mov rbx,qword ptr ds: |
0000000064183B83 | FF53 30 | call qword ptr ds: |
0000000064183B86 | 48:8D4D 40 | lea rcx,qword ptr ss: |
0000000064183B8A | BA 03000000 | mov edx,3 |
0000000064183B8F | 4C:8B45 38 | mov r8,qword ptr ss: |
0000000064183B93 | 4C:8D0D 06010000 | lea r9,qword ptr ds: | 0000000064183CA0:L"\r\n"
0000000064183B9A | 48:8D05 13010000 | lea rax,qword ptr ds: | 0000000064183CB4:L"请按回车键打开文件夹!" 冥界3大法王 发表于 2024-3-6 18:54
0000000064183AA0 | 55 | push rbp |
00000000641 ...
0000000064183AE1 这个地址在一个指令的中间,有点不对劲哦。
sShellListView1.Selected 这个地方有没有可能在失败的时候给你空指针(表示没有选中)?试试检查一下?
爱飞的猫 发表于 2024-3-6 19:26
0000000064183AE1 这个地址在一个指令的中间,有点不对劲哦。
sShellListView1.Selected 这个地方有没 ...
procedure TMainForm.sShellListView1DblClick(Sender: TObject);
begin
ShowMessage(sShellListView1.Selected.Caption);
end;
@爱飞的猫我就在这个控件的列表双击事件里啥也不写,就一个弹框得到选中的名称。。
都照样异常,你说灵异不灵异?
按道理来讲:
RichViewEdit2.LoadRVF(sShellListView1.SelectedFolder.PathName);
RichViewEdit2.Format;
加载一个选中的.rvf文件,因为鼠标双击的是文件夹,没有初始化所以该异常啊。
但是也异常说有点说不过去了。 冥界3大法王 发表于 2024-3-6 19:55
procedure TMainForm.sShellListView1DblClick(Sender: TObject);
begin
ShowMessage(sShellListView ...
不灵异,selected 可能是空值。对空值访问就是无法读取地址 0 的错误。
你可以参考下属代码,看看能不能用(来源):
function GetSelectedFiles(ShellListView : TShellListView) : TStringList;
var
Index : Integer;
begin
Result:=TStringList.Create;
if not ShellListView.MultiSelect then
Result.Add(ShellListView.SelectedFolder.PathName)
else
for Index := 0 to ShellListView.Items.Count-1 do
if ShellListView.Items.Selected AND (not ShellListView.Folders.IsFolder) then
Result.Add(ShellListView.Folders.PathName);
end;
爱飞的猫 发表于 2024-3-6 20:19
不灵异,selected 可能是空值。对空值访问就是无法读取地址 0 的错误。
你可以参考下属代码,看看能不 ...
我这么修改的:
function GetSelectedFiles(ShellListView: TsShellListView): TStringList;
var
Index: Integer;
begin
Result := TStringList.Create;
if not ShellListView.MultiSelect then
Result.Add(ShellListView.SelectedFolder.PathName)
else
for Index := 0 to ShellListView.Items.Count - 1 do
if ShellListView.Items.Selected and (not ShellListView.Folders.IsFolder) then
Result.Add(ShellListView.Folders.PathName);
end;
procedure TMainForm.sShellListView1DblClick(Sender: TObject);
begin
GetSelectedFiles(sShellListView1);
ShowMessage('11111111111111111111111');
if not sShellListView1.MultiSelect then
begin
if POS('.rvf', sShellListView1.Selected.Caption) > 0 then
begin
try
RichViewEdit2.LoadRVF(sShellListView1.SelectedFolder.PathName);
RichViewEdit2.Format;
finally
ShowMessage(sShellListView1.Selected.Caption + #13#10 + '请按回车键打开文件夹!');
end;
end;
end;
//RunError(200);
end;
还异常,并不能得到弹框1111111111 冥界3大法王 发表于 2024-3-6 20:57
我这么修改的:
function GetSelectedFiles(ShellListView: TsShellListView): TStringList;
方便整个最小重现的代码项目吗(整个只有 ShellListView 控件的窗口)?另外还需要你使用的 IDE 名称/版本方便我本地测试…
如果可以最好是直接编译到 EXE 的窗口而不是 DLL…
页:
[1]
2