小编Mas*_*ler的帖子

有关Turbo Delphi 2009版本的任何信息?

单独地,Turbo Delphi版本和Delphi 2009中添加的新改进是Delphi在很长一段时间内发生的两件最好的事情.但目前你只能得到一个或另一个.有没有人知道Embarcadero是否有任何计划发布Turbo Delphi 2009?

我是付费客户,拥有我自己的D2009副本,但我正在尝试建立一个开源项目,它将使用Generics相当多,如果语言是这样的话,这将有助于让其他人加入.可以免费下载.

delphi delphi-2009

12
推荐指数
1
解决办法
1433
查看次数

为什么我的单位"使用不同版本编译"我自己的文件?

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

所以我构建了一个静态链接到我的插件的测试框架,这样我就可以在跟踪代码时看到我正在做的事情.但是现在,每次我尝试重新编译时,都会收到一个错误:"unit turbu_skills是用不同版本的turbu_database.GDatabase编译的"

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

执行完整版本(SHIFT-F9)会使其正确编译.但是,如果我然后按单位(任何单位)按SPACE并按F9,我会再次收到错误.发生了什么,我该如何阻止它?这不会发生在主应用程序中,只会发生在测试框架中.

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

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

编辑2:原来这是另一个跨单元泛型问题.格儿.我设法编写了一个解决方法.我希望他们很快就能解决仿制药问题.

delphi compiler-construction delphi-2009 delphi-units

12
推荐指数
2
解决办法
3万
查看次数

Delphi:找不到必需的包

我正在尝试构建3个包,A,B和C.A定义了一些在B和C中使用的基类.我在同一个项目组中有所有3个,都设置为输出到同一个自定义BPL输出文件夹.这个文件夹位于B和C的搜索路径中.但是当我去构建B和C时,编译器会在Requires列表中阻塞."找不到必需的包'A'."

如何告诉B和C在哪里找到A以便它们能够正确构建?

delphi packages path delphi-2009

12
推荐指数
2
解决办法
4万
查看次数

Delphi是否存在无锁队列"多个生产者 - 单个消费者"?

我发现了单个生产者 - 单个消费者的几个实现,但是没有针对多个生产者 - 单个消费者的实现.

Delphi是否存在"多个生产者 - 单个消费者"的无锁队列?

delphi lock-free data-structures

12
推荐指数
1
解决办法
3924
查看次数

为什么TEnumerable <T>使用传递方法?

TEnumerable<T>,所有Generics.Collections容器类的基类都有一个非常奇怪的声明.它看起来像这样:

type
  TEnumerable<T> = class abstract
  protected
    function DoGetEnumerator: TEnumerator<T>; virtual; abstract;
  public
    function GetEnumerator: TEnumerator<T>;
  end;

function TEnumerable<T>.GetEnumerator: TEnumerator<T>;
begin
  Result := DoGetEnumerator;
end;
Run Code Online (Sandbox Code Playgroud)

TEnumerator<T> 同样声明一个公共的MoveNext方法和一个私有的DoMoveNext函数,而MoveNext除了调用DoMoveNext之外什么都不做.

除了添加额外的函数调用开销,使调用堆栈更长,并且在尝试从这些基类继承的编码器的头脑中产生混淆之外,任何人都可以向我解释这个服务的目的吗?这种结构化方式是否有任何实际优势,因为如果有,我看不到它......

delphi generics delphi-2009 data-structures

12
推荐指数
1
解决办法
1971
查看次数

避免"变量可能尚未初始化"

我最近遇到了一个看起来像这样的例程:

procedure TMyForm.DoSomething(list: TList<TMyObject>; const flag: boolean);
var
  local: integer;
begin
  if flag then
    //do something
  else local := ExpensiveFunctionCallThatCalculatesSomething;

  //do something else
  for i := 0 to list.Count do
    if flag then
      //do something
    else if list[i].IntValue > local then //WARNING HERE
        //do something else
end;
Run Code Online (Sandbox Code Playgroud)

这使得Variable 'local' might not have been initialized即使你可以通过阅读,除非初始化它的代码分支已经运行,你不会碰到该行代码告诉.

现在,我可以local := 0;在程序的顶部添加一个无用的东西来摆脱这个警告,但我想知道是否可能没有更好的方法来构建它来避免这个问题.有人有主意吗?

delphi refactoring compiler-warnings

12
推荐指数
3
解决办法
4698
查看次数

什么是"当前"的Delphi Web应用程序框架?

我正在研究Delphi Web服务器应用程序,当我进入New Items对话框时,我注意到的第一件事是有几个不同的框架.

从概念的角度来看,WebBroker看起来是最好的,但在文档中看起来它的数据库和会话管理代码与BDE相关联,这使得它在今天有点不太有用.

WebSnap看起来非常相似,但文档说它已被弃用,IW("VCL for the Web")应该被使用.

所以我看看IW,我无法对它应该如何工作做出正面或反面.示例代码中充满了类似于桌面应用程序的内容,例如单击按钮以触发事件处理程序以更改表单元素的标题.(如果我们要创建一个网页,那么在JavaScript中是不是必须在客户端完成?)

那么在Delphi中构建Web服务器的当前标准框架是什么?

delphi

12
推荐指数
1
解决办法
2416
查看次数

自动GOTO清除算法

我听说理论上可以用图灵完备语言表达任何控制流,只使用结构化编程结构(条件,循环和循环中断,以及子程序调用),而不需要任何GOTO语句.有没有办法使用该理论自动重构包含GOTOs代码的代码?

假设我在一个简单的命令式语言中有一个任意的单个子例程,比如C或Pascal.我还有一个解析器,可以验证此子例程是否有效,并从中生成一个抽象语法树.但是代码包含GOTOs和标签,它们可以向前或向后跳转到任意点,包括进入或退出条件或循环块,但不包括在子程序本身之外.

是否有一种算法可以使用此AST并将其重新编写为新代码,该代码在语义上相同,但不包含任何标签或GOTO语句?

language-agnostic algorithm goto

12
推荐指数
2
解决办法
1660
查看次数

如何在Delphi中使TLinkLabel工作?

我在我的表单上放了一个TLinkLabel,用一个包含有效HTML链接的标题填充它,并得到一些漂亮的蓝色下划线文本.当我运行程序时,我希望它调用Firefox(我的默认浏览器)并自动打开链接.显然情况并非如此.

帮助文件说我必须在OnLinkClick事件处理程序中对此进行编码.但是,它没有说明如何做到这一点.它将传入一个名为"Link"的字符串值.我怎么说"调用默认浏览器并让它打开链接"?

delphi linklabel

11
推荐指数
3
解决办法
1万
查看次数

我可以根据它包含的文本制作TMemo大小吗?

在表单设计器中编辑TLabel的标题时,它会为您调整TLabel的大小.有没有办法在运行时让TMemo做到这一点?

我希望能够获取TMemo,为其.lines.text属性分配一些内容,然后告诉它调整自身大小并且不超过一定的宽度,尽管它可以达到它想要的高度.谁知道怎么做?

delphi tmemo

11
推荐指数
2
解决办法
8515
查看次数