问题标签 [delphi-units]

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 投票
14 回答
28740 浏览

delphi - 为什么我的单位是“用不同版本编译的”我自己的文件?

我正在构建一个使用插件的程序。不幸的是,插件框架的动态链接迫使 RTL 和 VCL 从我的项目 EXE 中退出并进入 BPL 版本,并且它们没有启用调试信息。

所以我构建了一个静态链接到我的插件的测试框架,这样我就可以在跟踪代码时实际看到我在做什么。但是现在,每次我尝试重新编译时,都会出现错误:“unit turbu_skills was compiled with a different version of turbu_database.GDatabase”

我以前见过这个错误,但只有当我一直在改变我可能不应该改变的东西时,比如 RTL 或 VCL 库。我不明白为什么它用我自己的代码来做。turbu_skills 和 turbu_database 单元都是我自己编写的单元。GDatabase 是一个全局单例变量,它的类定义我已经好几周没有改变了。任何触发重新编译的更改都会导致此错误,即使我没有触及任何一个单元中的任何内容。

执行完整构建 (SHIFT-F9) 会使其正确编译。但是,如果我在一个单位(任何单位)中按空格键并按F9,我会再次收到错误消息。发生了什么事,我该如何阻止它?这不会发生在主应用程序中,只会发生在测试框架中。

编辑:我有我所有单位的来源。删除 DCU 和类似文件无济于事。将整个项目复制到另一台计算机,删除所有 DCU 并在那里构建没有帮助。我的程序布局和编译器之间存在客观的、可重现的冲突,我想摆脱它。

如果有人想测试它,可以在http://www.turbu-rpg.com/downloads/Turbu_source_setup.exe找到源代码。它需要已安装 JVCL 的 Delphi 2009;安装程序包将负责其余的工作。也许拥有可用的源代码将帮助某人追踪这一点。我当然希望如此,因为无论问题在哪里,它都超出了我的范围。该问题可以在 testing.exe 和 turbu.groupproj 的 turbu.exe 中找到。

编辑 2:原来这是另一个跨单元泛型问题。Grr。我设法编写了一个解决方法。我只是希望他们能尽快解决泛型问题。

0 投票
3 回答
1720 浏览

delphi - 相互使用的类的循环引用问题

我有以下两个课程:

TcmDataPanel 是(第 3 代)TFrame 后代。它不是直接使用的,而是从它衍生出的多个其他复合组件。

TcmDataConnector 是一个保存这些其他组件的数据库连接信息的组件。

我正在使用 ModelMaker,并正在尝试实现观察者模式,以便在“数据连接器”更改状态时自动更新多个“数据面板”。

这是我的问题:我似乎无法解决“循环引用”问题,因为每个类在接口部分都使用另一个。将相关的“使用”引用放在“接口”部分并不能解决“未声明的标识符”问题,并且将它们放在同一个单元中也不会。现在它们在同一个单元中(我已经在单独的单元中尝试过它们,并且一起尝试过),并且我收到“未声明的标识符:TcmTPDataConnector”错误。

我怎样才能解决这个问题?

================
更新:

现在是周五晚上 9:30 晚上我所在的地方,我完全被困住了。在我发帖后几分钟,你们拯救了这一天!!(晚上!)谢谢!

伙计,我喜欢 StackOverflow ......所以我的朋友在这个疯狂的学习季节。: ) 谢谢你,谢谢你,谢谢你...

0 投票
4 回答
7454 浏览

delphi - Delphi中如何使用单元文件

我只是想掌握单独的单元以使我的代码更加封装。我正在尝试整理我的方法的公共/私有声明,以便我可以从其他使用testunit. 在这个例子中,我想hellofromotherunit公开,但不stickletters公开。

我似乎无法从其他单位复制私有/公共结构,如下所示:

0 投票
8 回答
3317 浏览

delphi - 在 Delphi 中从其他单位定义类型

不会像 loren-pechtel 所说的那样工作,问题 是我的 A 和 B 在不同的单位。那么,有没有办法从另一个类中的现有类型定义类型定义?

0 投票
5 回答
801 浏览

delphi - 如果删除的单元仍在其他单元中使用,我清理我的使用子句会有什么不同吗?

如果我的uses子句尽可能小,我个人喜欢它,但在许多应用程序中,真正的大单元(就膨胀可执行文件而言)喜欢FormsVirtualTrees至少在另一个单元中需要。

uses所以:即使最终没有从项目中删除任何单元,如果我清理我的条款是否会有所不同?如果真是这样,那么是以哪种方式?并且:清理uses条款是应该尽快完成还是可以等到我偶然发现一个未使用的单元?

0 投票
3 回答
1206 浏览

delphi - 在 Delphi 中按名称“复制”单元,由组件引用,编译问题

我们正在使用不同供应商的多个组件包,其中两个在其目录结构中都有一个“regexp.pas”单元。

现在的问题是,无论我们编译它们的顺序如何,其中一个都会抱怨使用其他各种单元的错误版本来编译该单元。

有什么办法可以正确处理吗?

0 投票
3 回答
3657 浏览

delphi - 如何从 VCL 重新编译特定单元?

我想将 QC 中的修复应用到 Delphi 2009 单元(DBClient 碰巧)。我知道我需要将该单元复制到另一个目录并更改副本。然后我如何让 Delphi 编译该单元并使用它来支持已经存在的 DCU?

0 投票
2 回答
15061 浏览

delphi - 如何从另一个单元运行程序?

好吧,这种n00b问题,但我仍然无法弄清楚。我有一个main带有程序Discard()的单元。现在我有另一个单元engine,我想从它运行Discard()单元程序main。我usesengine.pas. 我试图用main.Discard()但没有好处来调用程序。我究竟做错了什么?

0 投票
1 回答
999 浏览

windows - 如何使用 windows 单元关闭Comm、OpenComm、WriteComm 和 ReadComm?

我有一个使用 WinTypes、WinProcs 的旧通讯单元。据我了解,这些也被合并到 Windows 单元中。Windows单元中是否有类似的功能?

0 投票
4 回答
8157 浏览

delphi - 与单元文件中的单元文件路径一起使用

我有问题。我会试着解释一下。

我有一个单元,它有一个类并且可能会有新的功能。

D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas 8DC8977E7A7B469AACFE3CC77CA7075E\UnitFile1.pas

他们都有相同的类:IClass_1 = class

我使用此文件的不同版本的代码编号。

另一个单元文件 (UnitFile2.pas) 使用该单元文件 (UnitFile1.pas)。

此外,第二个单元文件 (UnitFile2.pas) 有不同的版本。

F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas 14CEEFAFF1D64DDD8CBDEDD334D4A3FF\UnitFile2.pas

它们都具有相同的类: IClass_2 = class(IClass_1)

现在问题开始了;

“F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas”需要“D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas”

“14CEEFAFF1D64DDD8CBDEDD334D4A3FF\UnitFile2.pas”需要“8DC8977E7A7B469AACFE3CC77CA7075E\UnitFile1.pas”

但是文件名是相同的(我需要这样的系统。所以它们是相同的)。在单元文件中,delphi 不允许我这样写;

在文件 F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas; 在 'D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas' 中使用 UnitFile1;

我希望我能说出我的问题。我如何告诉编译器我想使用哪个单元文件及其路径?(我使用 Delphi-7)