DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tanghaoming019
今日帖子: 13
在线用户: 9
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 niecn (niecn) ▲▲▲▲▲ -
注册会员
2021/10/14 0:15:26
标题:
【求助】win11下使用类似于Explorer的shell控件只要是编译成win 64-bit就闪退,为什么 浏览:707
加入我的收藏
楼主: 出错条件:
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页:
此帖子包含附件:
JPEG 图像
大小: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位执行文件均闪退,愁死了……
----------------------------------------------
-
作者:
男 scarlette (Scarlette) ★☆☆☆☆ -
普通会员
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 放出来
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲△△△ -
注册会员
2021/10/15 9:07:47
5楼: 没win11不然可以调试下。按此在新窗口浏览图片
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/10/15 16:44:19
6楼: 用的具体是什么控件没说,只是说类似啥啥的控件。光类似可不够。

如果错误是控件导致,那必须得有控件源码才能调试修改错误。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
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.



请问各位,这次是否可以给我解惑了?有什么解决办法呢?先谢谢啦……
此帖子包含附件:niecn_2021101803254.rar 大小:88.5K
----------------------------------------------
-
作者:
男 szlbz (szlbz) ★☆☆☆☆ -
盒子活跃会员
2021/10/18 10:37:51
10楼: 用楼上代码在win11企业版,delphi 11 编译64位运行正常。
此帖子包含附件:
PNG 图像
大小:215.7K
----------------------------------------------
-
作者:
男 testtset (testtset) ▲▲▲▲△ -
注册会员
2021/10/18 10:59:00
11楼: 我这 按9楼的代码 在 Windows 11 专业工作站版 和 Delphi 11下编译运行 32位 64位都正常
----------------------------------------------
在乌鸦掌控的世界里,洁白的羽毛是有罪的。
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
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楼的回复。
此帖子包含附件:
PNG 图像
大小:15.4K
----------------------------------------------
-
作者:
男 szlbz (szlbz) ★☆☆☆☆ -
盒子活跃会员
2021/10/18 13:32:51
14楼: 编译后的文件(windows 11企业版是从windows 10升级上来的)
此帖子包含附件:szlbz_20211018133242.rar 大小:2.72M
----------------------------------------------
-
作者:
男 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 描述信息)
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行93.75毫秒 RSS