大佬教程收集整理的这篇文章主要介绍了Delphi程序和Windows 64位兼容性问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些客户/候选人抱怨说,我的程序不能在他们的Windows 7 64位版本(确认截图)。 错误是奇怪的,例如:
在试用版中,每当我点击“标记”“删除”“帮助”时,我都会收到错误消息。
错误信息是:在模块'ideduper.exe中的地址0046C978访问冲突。'读取地址00000004
Windows 7的最终64位。 i7 920 @ 2.67GHz 9gb或ram
使用Visual studio 11编译的可执行文件有什么特别之处,导致可执行文件无法在Windows XP上执行?
Win32:build议显式应用程序的tesTing与部署
将在Windows 10上运行一个VB6应用程序
“__COMPAT_LAYER”实际上做了什么?
'Mark','delete'和'Help'只是TToolbar上的标准TToolButton。
我已经告诉他们尝试兼容模式,但仍然无法正常工作。
问题是,当我在我的电脑上的Windows 7 HP 64位(我已经做了它在实际发布之前)tesTing它,它只是正常工作! 所以我不知道是什么原因造成的
你有什么build议吗?不同的Windows软件包(家庭基础,高级,终极等)对待32位编程不同?是新版本的Delphis(我使用2006年)更兼容64位Windows? 我需要等到64位编译器出来吗?
提前致谢
有没有可能为gnome编写代码,然后将其构build到Windows?
Visual studio 2005与Windows 8.1 64位兼容吗?
fgets()linux vs mac
如何写入Windows 10上的Access数据库
作曲者Windows兼容的脚本
我认为最好的选择是@L_386_17@madExcept或EurekaLog或类似的应用程序,并把它给客户再试一次。 MadExcept将生成带有堆栈跟踪的日志,这将使您更清楚地了解正在发生的事情。
要回答这个问题的第二部分,32位Delphi程序在64位Windows 7上运行良好。我认为你更有可能遇到一些内存管理问题,而客户却偶然发现了这些问题。 使用FastMM4来追踪这些。
您的应用程序正试图访问一个无效的指针。 不断变化的环境可能会出现其他隐藏的问题。 检查您的应用程序,并使用FastMM + JCL + JCVL / MadExcept / EurekaLog来获取问题的详细跟踪。 一些Windows API可能有一些更严格的呼叫要求7和/或64位,但我们必须知道你的应用程序实际上是什么。
一个免费的替代MadExcept是JCL调试的东西。 然而,它不够透彻,不包括很酷的对话框来通过电子邮件发送堆栈跟踪给你,或者作为一个文件,你可以附加和手动发送电子邮件。
@H_969_0@madExcept是值得的钱,它是免费的非商业用途。 您可以先在个人电脑上试用,观察其功能,确保其功能正常,然后购买。如果买德尔福是值得的(这是!),然后购买疯狂除外是不容易的。 但是如果你坚持自己动手,JCLDebug(jedi代码库的一部分)也是相当不错的。
给他们一个精简版的应用程序,看看问题何时消失。 我敢打赌,这是你的代码,因为我从来没有(几百)W7 / 64客户端的任何问题。
我敢打赌,这是你的代码中的一个问题。 在客户的计算机上而不是在您的计算机上失败的原因是,您的计算机可能启用了默认的数据执行保护(DEP)(仅针对基本的Windows程序和服务启用),而客户的计算机实际上是按照预期使用DEP (打开所有程序和服务)。
默认设置(与95/98 / ME等较早版本的Windows兼容)允许软件从数据段执行代码。 更严格的设置将不允许这样做,而是引发系统级异常。
您可以通过查看系统属性来检查两者之间的设置。 我现在不在Win7机器上,但是在WinXP上,通过右键单击“我的电脑”,选择“属性”,单击“性能选项”,然后选择“数据执行保护”选项卡。 通过使用帮助在Vista / Win7上找到它; 搜索数据执行保护。
正如以前的答案告诉你的,解决方案是安装MadExcept或EurekaLog。 在JCLDebug IIRC中,您也可以获得免费版本作为jeDI的一部分。 我没有用过它,所以我不能亲自担保。 不过,我听说这很不错。
如果你不想走这条路线,在你的应用程序的启动部分的某个地方设置一个断点(确保打开调试信息)。 运行你的应用程序,直到命中断点,然后使用IDE的搜索 – >转到地址(禁用,直到命中断点)。 在$ 0046C978中输入异常对话框中的地址(不是几乎全为零的地址,而是0046C978地址,以$为前缀,以十六进制表示)。 你可能最终在cpu窗口看着汇编代码,但是你通常可以选择一些某种类型的Delphi代码,有时候可以给你一个开始寻找的地方。
除了以前的所有建议之外,我还会在WOW64下的Win32版本中添加访问注册表的差异。 如果您的应用程序正在访问注册表来读取或写入一些设置,您应该知道这一点。 首先,看一下MSDN中的这个和这个页面。 在这个页面上,你会发现2个标志,它们决定你从32位或64位应用程序访问注册表。 KEY_WOW64_64KEY是你应该使用的。
无论如何,我同意其他人使用madExcept(或任何其他类似的工具)能够找到你的问题的确切原因。
以上是大佬教程为你收集整理的Delphi程序和Windows 64位兼容性问题全部内容,希望文章能够帮你解决Delphi程序和Windows 64位兼容性问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。