|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
niecn (niecn) |
★☆☆☆☆ |
-
|
普通会员 |
|
2021/10/14 0:15:26 |
标题: |
【求助】win11下使用类似于Explorer的shell控件只要是编译成win 64-bit就闪退,为什么 |
浏览:2335 |
|
加入我的收藏 |
楼主: |
出错条件: 1、使用类似于Raize里面的RzShellTree、RzShellList或其它例如JAM-Software ShellBrowser或DevExpress里面的shell控件,比如模仿一个资源管理器; 2、编译成Windows 64-bit运行就出错,编译成Windows 32-bit运行没问题; 3、Windows11下运行出错,之前的win10没问题。
出错现象: 同时满足以上三个出错条件时,运行闪退。以debug调试运行时,出现'c000090 FLOAT_INVALID_OPREATION'的错误对话框,点击break按钮会直接弹出CPU页:
此帖子包含附件:
大小:1.41M |
----------------------------------------------
- |
作者: |
niecn (niecn) |
★☆☆☆☆ |
-
|
普通会员 |
|
2021/10/14 0:22:17 |
1楼: |
我的编译环境: Win10 + Delphi10.4 编译的64位执行文件在Win11下运行闪退,Win10下运行正常; Win11 + Delphi10.4 编译的64位执行文件在Win11下运行闪退,Win10下运行正常; Win11 + Delphi11 编译的64位执行文件在Win11下运行闪退,Win10下运行正常。 无论是预览版的Win11和现在的22000版的正式版Win11下,运行编译的64位执行文件均闪退,愁死了……
----------------------------------------------
-
|
作者: |
|
2021/10/14 2:43:06 |
2楼: |
你崩掉的地方是一条双精度除法指令,你自己排查下代码里什么地方用了除法吧。当断点下来的时候,你可以看看XMM0的低64bit做为双精度浮点是不是0,或者NaN什么的。盲猜Win 11下进程的MXCSR默认值和Win 10可能不一样。
----------------------------------------------
-
|
作者: |
niecn (niecn) |
★☆☆☆☆ |
-
|
普通会员 |
|
2021/10/14 12:41:15 |
3楼: |
感谢2楼的回答,但……我水平有限,没看懂。 我的代码里没有除法指令,我甚至没有代码,只是把shell空间拖到了Form上运行就会这样。 一个控件可能会出问题我可以理解,所有控件(包括知名的控件)都有问题,我实在是不知道问题出在哪里。问题是我用的控件基本上都是最新的,例如https://github.com/TurboPack/MustangpeakVirtualshellTools,是刚刚更新的,Alexandria安装控件都加上了;我用的Raize也是最新的KonopkaControls等等,难道说他们的代码都有问题?
----------------------------------------------
-
|
作者: |
lsuper (lsuper) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2021/10/15 0:44:12 |
4楼: |
建议你精简 demo 放出来
----------------------------------------------
-
|
作者: |
|
2021/10/15 9:07:47 |
5楼: |
没win11不然可以调试下。
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2021/10/15 16:44:19 |
6楼: |
用的具体是什么控件没说,只是说类似啥啥的控件。光类似可不够。
如果错误是控件导致,那必须得有控件源码才能调试修改错误。
----------------------------------------------
-
|
作者: |
|
2021/10/15 21:04:05 |
7楼: |
他有源码,但是连个CALL STACK都不肯贴出来
----------------------------------------------
-
|
作者: |
niecn (niecn) |
★☆☆☆☆ |
-
|
普通会员 |
|
2021/10/16 23:11:42 |
8楼: |
感谢以上各位的热心回复。 也许我没说清楚,我没有源码,也不需要源码,只要是把shell方面的控件往Form上一拽,直接编译64位,在win11下就闪退,在win10下运行就没问题;编译32位,什么系统都正常运行!这时候,unit1.pas里除新建生成的代码外,自己还一个字没写……以下列出我试过的控件: KonopkaControls-280-7.0-4 JAM-Software ShellBrowser 9.0.0 DevExpress_v18.2.5_Source_DxAutoInstsller MustangpeakVirtualshellTools 以上控件产品里的与shell方面或资源管理器方面有关的拖到Form上都试过了,全部64位程序win11下运行闪退
----------------------------------------------
-
|
作者: |
niecn (niecn) |
★☆☆☆☆ |
-
|
普通会员 |
|
2021/10/18 0:32:54 |
9楼: |
Delphi11自带Shell组件也翻车! 这次什么第三方控件都不用了,直接用Delphi11自带的Vcl.Shell.ShellCtrls,仍然是编译成64位Win11下运行闪退。这次不用大家安装控件了,而且我也有源码附上,窗体Form无任何东西,Unit.pas如下:
unit Unit1;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls;
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } procedure TreeViewOnChange(Sender: TObject; Node: TTreeNode); public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
uses Vcl.Shell.ShellCtrls;
var ShellComboBox: TShellComboBox; ShellTreeView: TShellTreeView; ShellListView: TShellListView;
procedure TForm1.FormCreate(Sender: TObject); begin ShellComboBox := TShellComboBox.Create(Self); ShellTreeView := TShellTreeView.Create(Self); ShellListView := TShellListView.Create(Self);
ShellComboBox.Parent := Self; ShellTreeView.Parent := Self; ShellListView.Parent := Self; ShellTreeView.Width := Width div 4;
ShellComboBox.Align := alTop; ShellTreeView.Align := alLeft; ShellListView.Align := alClient;
ShellTreeView.ShellComboBox := ShellComboBox; ShellListView.ShellTreeView := ShellTreeView;
ShellListView.ViewStyle := vsList;
ShellTreeView.OnChange := TreeViewOnChange; end;
procedure TForm1.TreeViewOnChange(Sender: TObject; Node: TTreeNode); begin Caption := ShellTreeView.SelectedFolder.PathName; end;
end. |
请问各位,这次是否可以给我解惑了?有什么解决办法呢?先谢谢啦……
----------------------------------------------
-
|
作者: |
szlbz (秋风) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2021/10/18 10:37:51 |
10楼: |
用楼上代码在win11企业版,delphi 11 编译64位运行正常。
此帖子包含附件:
大小:215.7K |
----------------------------------------------
-
|
作者: |
|
2021/10/18 10:59:00 |
11楼: |
我这 按9楼的代码 在 Windows 11 专业工作站版 和 Delphi 11下编译运行 32位 64位都正常
----------------------------------------------
|
作者: |
|
2021/10/18 11:03:17 |
12楼: |
楼主犯了几个错误 1. 你误以为你没有源码 2. 你误以为你不需要源码 3. 你没有调试 4. 你没有贴CALL STACK
----------------------------------------------
-
|
作者: |
niecn (niecn) |
★☆☆☆☆ |
-
|
普通会员 |
|
2021/10/18 13:16:31 |
13楼: |
感谢10楼、11楼、12楼的热心帮助,感谢10楼、11楼两位的结果告知,让我知道了这样是可以运行的,看来demo代码本身没有问题。 10楼、11楼两位朋友是否可以把你们编译的64位exe传给我,我想在我机器上运行一下试试。
在我这里,我9楼贴出的代码的确运行不了,看来是个例,其实真要是我的个例就好了,因为我也看到了别人出现了这样的问题,见下图(是我写的软件网友反馈的问题,闪退的“添加文件或文件夹”就是一个类似于资源管理器的Form调用),我的软件群中的这个问题的反馈更多,都是升级win11之后运行我的软件的64位版本时才出现的。
12楼的几个问题我也回答一下: 1、如果我用第三方控件的话,我确实没有自己的源码,Form仅仅加上控件编译运行就闪退,至于第三方控件或Delphi自己的源码都是正规产品,所以我不认为他们有问题,所以我说没有源码。 2、的确不需要自己写什么源码,Form仅仅加上控件64位编译运行就闪退,当然,我写了9楼的demo,有源码了,在我这里还是闪退。 3、我跟踪调试了,我是使用一个Form1上的按钮调用Form2的方式,Form2就是第三方控件或是我9楼贴的源码这个仿资源管理器,分步运行时,Form2的onCreate等所有的代码都没有出错,运行到Form1调用Form2时的“Form2.Show”这句出错,跟踪这句的话就进入Delphi的源码了我就没跟踪,而如果是Win10环境或调试32位程序时,这句也不会出错,是什么原因我没必要跟踪下去了,因为肯定不是我的源码有问题了,而且我的水平有限,进入Delphi的源码跟踪下去也白搭。 4、我的水平有限,我都不知道调用堆栈这玩意干什么的在哪里,不是成心不贴出来,哈哈,见笑。 以上,感谢12楼的回复。
此帖子包含附件:
大小:15.4K |
----------------------------------------------
-
|
作者: |
szlbz (秋风) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2021/10/18 13:32:51 |
14楼: |
编译后的文件(windows 11企业版是从windows 10升级上来的)
----------------------------------------------
-
|
作者: |
niecn (niecn) |
★☆☆☆☆ |
-
|
普通会员 |
|
2021/10/18 13:56:14 |
15楼: |
感谢14楼的朋友,我试过了,你的附件在我的win11出问题的电脑中还是运行不了,在我的Win10笔记本中可以运行。 看来是我那电脑的问题,它也是从win10升级上来的,唯一的是它不符合win11的安装条件,是台老电脑i7 4790K,没有TPM 2.0,我删了appraiserres.dll升级安装的win11。有功夫了我重装一下win11试试,再到别人的win11下试试,看看跟这个是否有关系。
----------------------------------------------
-
|
作者: |
lsuper (lsuper) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2021/10/18 17:48:05 |
13楼: |
@niecn (niecn): 1、跑了你附件例子,在 Delphi 11 Windows 11 企业版下 32/64 均 ok 2、结合 testtset (testtset) 的反馈,这个和 shell 外壳扩展相关,可能是你装了第三方软件注入 shell 扩展导致?如各种云盘、视频软件插件等;可以看看你进程内加载那些第三 dll(如 通过 ProcessExplorer 看进程加载 dll 描述信息)
----------------------------------------------
-
|
作者: |
niecn (niecn) |
★☆☆☆☆ |
-
|
普通会员 |
|
2022/10/7 20:49:35 |
16楼: |
win11 22h2 已彻底解决,是系统的问题
----------------------------------------------
-
|
|