问题标签 [delphi-2007]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3119 浏览

delphi - 如何检测可能正在分析我的软件的调试器或其他工具?

一个很简单的情况。我正在开发 Delphi 2007 中的应用程序,该应用程序通常编译为“Release”,但仍在调试器下运行。偶尔它也会在 SilkTest 下运行,用于回归测试。虽然这很有趣,但我想做一些特别的事情......

我想检测我的应用程序是否在调试器/回归测试器中运行,如果是这种情况,我希望应用程序知道使用了哪个工具!(因此,当应用程序崩溃时,我可以在它的错误报告中报告此信息。)

有什么建议,解决方案吗?

0 投票
4 回答
3262 浏览

delphi - 有谁知道 Citrix 和 Delphi 2007 应用程序之间的问题?(也许还有其他开发语言?)

情况很简单。我创建了一个复杂的 Delphi 应用程序,它使用了几种不同的技术。主要应用程序是一个 WIN32 模块,但有几个部分是作为 .NET 程序集开发的。它还与 Web 服务通信或从特定网站检索数据。它将大部分用户数据保存在 MS Access 数据库中,并在注册表中保留一些附加设置。在内存中,所有数据都在 XML 文档中进行转换,该文档偶尔会保存到磁盘作为备份,以防系统崩溃。(因此允许用户恢复他的数据。)XML 文件中还有一些数据用于只读目的。该应用程序还执行其他应用程序并希望这些应用程序完成。总而言之,这是一个相当复杂的应用程序。

我们不支持使用此应用程序的 Citrix,尽管少数用户确实在 Citrix 服务器上使用此应用程序。(基本上,它可以让这些用户更加灵活。)但即使我们一直告诉他们我们不支持 Citrix,这些客户仍试图推动我们帮助他们解决他们经常遇到的一些偶尔出现的问题。

主要问题似乎是偶尔出现在 Citrix 系统上的随机异常。从不在同一个位置,而且通常看起来与一些内存问题有关。我们已经收到了大量的错误报告,并且有太多不同的错误。所以我知道解决所有这些问题会很复杂。

因此,我想更通用一点,只想了解 Delphi (2007) 在 Citrix 系统上运行时可能出现的问题。尤其是当此应用程序未设计为以任何方式支持 Citrix 时。我们不想正式支持 Citrix,但如果我们能帮助这些客户,那就太好了。并不是说他们会付给我们更多的钱,但仍然...

那么有人知道 Delphi 应用程序在 Citrix 系统上可能遇到的一些常见问题吗?有谁知道 Citrix 的一般常见问题?Citrix 问题是否有一些 Silver Bullet 或 Golden Hammer 解决方案?

顺便提一句。我对 Citrix 的了解仅限于这个 Wikipedia条目和这个网站……而且我用谷歌搜索了一下……

0 投票
2 回答
2533 浏览

multithreading - 用于非阻塞多线程同步的无锁、无等待和无等待算法

在多线程编程中,我们可以找到两个或多个线程/任务之间数据传输同步的不同术语。

什么时候我们可以说某个算法是:

我明白无锁是什么意思,但是当我们可以说某些同步算法是无等待或无等待时?我为多线程同步制作了一些代码(环形缓冲区),它使用无锁方法,但是:

  1. 算法预测该例程的最大执行时间。
  2. 一开始调用此例程的线程设置唯一引用,(在此例程内部)。
  3. 调用相同例程的其他线程检查此引用,如果它设置为比计数第一个涉及线程的 CPU 滴答计数(测量时间)。如果那个时间是长时间中断所涉及线程的当前工作并覆盖他的工作。
  4. 由于在最后被任务调度程序中断(被重新放置)而没有完成工作的线程检查引用是否不属于他再次重复工作。

所以这个算法并不是真正的无锁算法,但没有使用内存锁,其他相关线程可以等待(或不等待)一定时间,然后才能覆盖重新定位线程的工作。

添加了 RingBuffer.InsertLeft函数:

您可以在此处找到RingBuffer单元: RingBuffer,CAS 函数:FockFreePrimitives和测试程序:RingBufferFlowTest

0 投票
1 回答
130 浏览

c++ - 我想在 Delphi/WIN32 中使用 Infocardapi.dll 但想要一个头文件

Microsoft 有一个不错的小功能,称为 CardSpace。这是MicrosoftInfoCards实现。Microsoft 有一个很好的文档,解释了如何使用它,这很有用。进行谷歌搜索并没有为我提供很多有用的答案,但它确实提供了大量的噪音。(主要是因为人们想知道它是什么或提供此 DLL 作为某种下载的站点。后者是可疑的,因为它只是 Windows Vista 和 .NET 3.0 及更高版本的一部分。)

基本上,我需要在 Delphi 2007 中调用这个 DLL 的所有功能。如果这个 DLL 有一个 C++ 头文件,那么我可以转换它。或者可能是关于它的函数、参数、数据类型等等的一些其他信息。

0 投票
2 回答
185 浏览

delphi - 翻阅两种形式

我只是想知道我是否正在做一些可能不好的事情,尽管这对我来说似乎是一个非常实用的解决方案......

我有两种用户必须通过的表格。用户单击一个按钮并弹出 form1。用户按下 OK 并弹出第二个。用户再次单击确定,屏幕消失。或者用户单击重试,屏幕返回到第一个。两个屏幕的大小完全不同,信息也不同。

所以我想出了这个代码:

我已经测试了这段代码,它似乎很有魅力。在此代码中,SharedData 是一个对象,其中包含由两种表单操作的数据。我在创建两个表单之前创建了这个对象,当 ModalResult==mrOK 我只是将数据写回数据库。

问题是,虽然我认为这是处理两种形式之间翻转的干净解决方案,但我不记得以前见过类似这种结构的东西。当然,我是天才。(至少,我 Ego 告诉我我是。)但是是否有反对使用这段代码的东西,或者它就可以了吗?

0 投票
1 回答
6592 浏览

delphi - 如何让 TAnimate 的通用 AVI 在 Vista 和 Win7 上工作?

我有一个 Delphi 2007 应用程序,它有一个带有 FindFile Common AVI 的 TAnimate 控件。当应用程序在 Windows XP 上运行时,它可以完美运行,但在 Windows 7 上从未出现任何内容。我听说它现在需要自己的线程,但我不确定。

有谁知道如何让 TAnimate 的通用 AVI 控件在 Windows 7(或 Vista)上工作?

0 投票
7 回答
4606 浏览

delphi - 我可以重新编译 Delphi IDE 使用的 .PAS 文件吗?

我熟悉Jeff Atwood 关于错误总是程序员的错的文章,但我相信我确实在 Delphi .pas 文件中发现了一个错误。

具体来说,我使用的是 Delphi 2007,错误位于 DBCommon.pas 文件的第 955 行,该文件在我的机器上位于此处:

C:\program files\codegear\rad studio\5.0\source\Win32\db\DBCommon.pas

代码是这样的:

如果 "Token" 的值为零,那么我们尝试访问 DataSet.Fields 的索引 -1,导致列表索引越界错误。

这个错误不会向用户提出,因为它是在它变得那么高之前被处理的,但是每次发生这种情况时让调试器中断是非常令人恼火的。

我可以“忽略这种异常类型”,但索引越界错误很常见,我不想普遍忽略它们。

导致 FieldIndex 为零的情况是当您有一个其 ORDER BY 包含函数的 SELECT 语句时,如:

我可以修复 DBCommon.pas 中的错误,但 Delphi 不会重新编译自己,我的更改也不会生效。如果我重命名 .DCU 文件,它只会抱怨找不到“DBCommon.dcu”。

所以(最后)我的问题是:我可以用我的修复重新编译 DBCommon.pas,如果可以,如何?

0 投票
3 回答
1551 浏览

asp.net - ASP.NET 与用于 .NET 的 Delphi 2007。无法加载文件或程序集...找到的程序集的清单定义与程序集引用不匹配

这是一个令人头疼的问题。这是交易。

在将使用 Delphi 2007 for .NET 构建的 ASP.NET 应用程序的 beta 副本部署到测试服务器时,我遇到了一个奇怪的问题。该应用程序无法启动,因为它无法加载我正在使用的 ADO.NET 数据提供程序的正确版本。

只有在 bin 目录中包含旧程序集的版本,应用程序才能运行。但是,我不想被这个旧的 .NET 数据提供者所束缚,所以我决心找到解决这个问题的方法。

我最初使用 .net 数据提供程序程序集作为 Copy Local 编译项目,这应该导致 Delphi 使用我在将其添加到项目管理器中的 References 文件夹时选择的该程序集版本的副本。我选择的实际程序集是 9.10.2.0 版本,这是与应用程序一起出现在 bin 目录中的程序集版本。但是,在运行时,应用程序试图绑定到同一程序集的早期版本 9.0.2.7。

(其实这个问题不管我有没有使用 GAC 版本的 Copy Local 都会出现,所以我觉得不是这个问题。)

在调查这个问题时,我创建了一个新项目,并添加了对 9.10.2.0 程序集的引用。尽管如此,.NET 2.0 配置实用程序和反射器都显示应用程序编译时引用了 9.0.2.7 程序集。

检查 GAC 我看到 9.0.2.7 和 9.10.2.0 版本都已注册。尝试删除 9.0.2.7 版本失败,因为该版本的提供程序仍在 GAC 中引用程序集。

我进入注册表并手动删除了对 9.0.2.7 提供程序的所有引用。然后,我能够将其从 GAC 中删除。这并没有改变什么。从现有应用程序中删除程序集,然后重新添加 9.10.2.0 版本,然后编译,仍然会导致错误的程序集信息被插入到应用程序中。和以前一样,创建引用 9.10.2.0 程序集的新应用程序不起作用,因为对 9.0.2.7 的引用仍被插入到可执行文件中。

我检查了 Delphi 库搜索路径。我还完全从机器中删除了旧程序集文件的每个实例(包括从 ASP.NET 临时文件目录中)。我仍然有问题。我尝试使用 Issam Ali 的 AppManifest 实用程序手动调整清单,但显然它不支持 Delphi 2007 for .NET 中的 ASP.NET 应用程序。

因此,GAC 不再包含对 9.0.2.7 的引用,在注册表中没有对它的引用,在项目或 Delphi 选项对话框中没有到旧提供程序目录的路径,旧提供程序程序集不在文件系统上,并且 9.0.2.7 不会出现在任何项目文件中。它也不会出现在 web.config、machine.config 或我检查的任何其他文件中。尽管如此,每当我引用 9.10.2.0 版本的程序集时,Delphi 坚持使用此版本的程序集。(是的,我重新启动了 Delphi,还重新启动了正在执行此开发的虚拟机。)

即使在卸载 9.10.2.0 数据提供程序(旧的已卸载)并重新安装后,将数据提供程序引用添加到应用程序会导致运行时应用程序尝试加载旧提供程序(即使没有对旧提供程序的引用显然保留在系统中)。

我尝试了其他解决方案(这里值得一提),但没有一个奏效。有人看到这个吗?我将继续解决这个问题,但我很想听听建议。我只是无法让 Delphi 停止将旧的程序集信息插入到项目中。

为了咧嘴笑,我包括了失败的错误日志。该日志基本上复制了我从融合日志中获得的信息。此日志来自我在从 GAC 中删除 9.0.2.7 程序集后创建的一个简单应用程序。请注意,它从一开始就在寻找旧版本的提供程序。

从以下位置加载的程序集管理器:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 在可执行文件 c:\windows\microsoft.net\framework\v2.0.50727\aspnet_wp.exe 下运行 --- 详细错误日志如下。

=== 预绑定状态信息 === LOG:User = TRAINING8A\ASPNET LOG:DisplayName = Advantage.Data.Provider,Version=9.0.2.7,Culture=neutral,PublicKeyToken=e33137c86a38dc06(完全指定) LOG:Appbase = file:///C:/Inetpub/wwwroot/TestAdsVer2/ LOG: Initial PrivatePath = C:\Inetpub\wwwroot\TestAdsVer2\bin

调用程序集:TestAdsVer2,Version=1.0.3572.17384,Culture=neutral,PublicKeyToken=null。

LOG:此绑定在默认加载上下文中开始。LOG:使用应用程序配置文件:C:\Inetpub\wwwroot\TestAdsVer2\web.config LOG:使用主机配置文件:c:\windows\microsoft.net\framework\v2.0.50727\aspnet.config LOG:使用机器配置文件来自 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config。日志:后策略参考:Advantage.Data.Provider,Version=9.0.2.7,Culture=neutral,PublicKeyToken=e33137c86a38dc06 日志:尝试下载新 URL 文件:///c:/WINDOWS/Microsoft.NET/Framework/v2 .0.50727/临时 ASP.NET 文件/testadsver2/07545aea/3d068a5/Advantage.Data.Provider.DLL。日志:尝试下载新 URL 文件:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/testadsver2/07545aea/3d068a5/Advantage.Data.Provider/Advantage.Data.Provider .DLL。日志:正在尝试下载新的 URL 文件:///C:/Inetpub/wwwroot/TestAdsVer2/bin/Advantage.Data.Provider.DLL。警告:比较程序集名称导致不匹配:次要版本错误:无法完成程序集设置(hr = 0x80131040)。探测终止

这已经持续了很长时间,以至于我添加到 LanceSC 答案中的评论不再显示。但我做的事情是我想解决的一个有趣的项目。

这是我对 LanceSC 的最后两条评论

  1. 出现此行为的安装位于不再运行的 VM 中。我认识的另一位开发人员遇到了同样的问题。解决方案是放弃安装。我觉得这个 .NET 数据提供程序的特定版本的安装程序中的某些东西留下了一些产生问题的奇怪工件。此数据提供程序的任何其他版本都不会发生这种情况。我不再追求这个问题的答案。

  2. 说得太早了。我的一位同事今天(2010 年 3 月 5 日)遇到了同样的错误,同样的 .NET 数据提供程序 (9.0.2.1) 的版本稍早一些。他现在处于和我一样的位置。他无法使用任何版本的数据提供者运行他的应用程序,只能保存旧版本。该程序集被用作本地副本,旧版本不在 gac 中。使用他的机器,我们运行带有详细选项的运行 MSBuild。构建工作正常,没有错误。尽管如此,编译应用程序未能运行,未能找到旧版本的提供程序。

概括

我的同事辞职重新安装了 Delphi 2007(幸运的是,他在 VM 中工作,并且有第二个使用 Delphi 2007 的 VM,其中从未安装过有问题的 .NET 数据提供程序。这也是我的策略。

在这一点上,我得出结论,这个问题是无法解决的。尽管如此,我将把这个问题留待一周左右。如果在接下来的几周内没有提出可行的解决方案,我将关闭这个问题。

同时,我已要求我的同事将 VM 与行为不端的提供商一起保存,以便测试提出的任何解决方案或调查。

0 投票
2 回答
3949 浏览

delphi - Delphi 2007 中的水晶报表

我有:

德尔福 2007

水晶 11

Crystal VCL 组件的 Delphi 7 版本(我知道的最新版本,它在 D2007 中编译良好)

一个非常简单的测试 Crystal 报告,用 Crystal 11 编写,它只是将表格转储到屏幕上(没有选择标准,没有公式,只有直接数据)

我试过了

创建了一个新的 VCL 表单应用程序

将 TCrpe 组件拖放到表单上

将“ReportName”属性设置为我的测试报告。

我在表单上放了一个按钮,在它后面放了一行:

如果报告打开了“使用报告保存数据”选项那么这可以正常工作。

如果我关闭该选项,那么我需要提供登录凭据。

使用此代码(在一百万年前的 Delphi 中运行良好):

我收到此错误:

我究竟做错了什么?如何为 Delphi 中的 Crystal VCL 组件提供登录凭据?我目前的解决方法很丑陋,而且我有很多遗留代码要转换。如果我能以一种直接的方式使用 VCL 组件,那就太好了。

0 投票
1 回答
1185 浏览

delphi - Delphi 2007 和 Logitech 网络摄像头驱动程序

不久前,我遇到了 Delphi 2007 在运行罗技网络摄像头驱动程序时无法运行和调试应用程序的问题。

显然,罗技驱动程序在每个运行的进程中插入了一个存根,从而弄乱了调试器的偏移量。

已经一年零一点了——这仍然是一个问题吗?罗技是否已经清理了他们的行为,还是我必须将我的网络摄像头转给另一个品牌?