小编Mas*_*ler的帖子

Kylix做错了什么?

随着关于Delphi团队致力于跨平台开发的所有讨论,一种不断涌现的情绪是,"我希望他们这次做得对,不像Kylix." 我没有真正注意到Kylix何时出现,因为当时Linux并不像现在那样成熟,而且它不是我感兴趣的操作系统.所以现在它又开始成为一个问题,我发现自己在想,Kylix做错了什么,这次CodeGear怎么能做得更好呢?

delphi cross-platform

9
推荐指数
3
解决办法
1004
查看次数

哪些问题导致 Visual Studio 显示“此模块的调试信息中缺少源信息”?

我正在为 CLR 开发一个编译器,并且大部分情况下它都能工作。我正在尝试生成调试信息,并且可以让它在生成的程序集中创建一个嵌入式 PDB,其中所有调试元数据看起来都是正确的。当我加载程序集时,模块视图显示“符号已加载”。但我无法让调试器识别断点,如果我在代码中抛出异常,它会说:

来源不可用

该模块的调试信息中缺少源信息。

当我在 DotPeek 中查看程序集时,它并没有在程序集的主名称行上显示“调试”,这与使用调试信息构建的 C# 程序集的做法不同。但我不确定缺少什么。

什么会导致出现此错误?如果有人需要查看测试用例,这里有一个。

编辑:请阅读问题并记下标签。我在这里得到了几个不同的答案,它们是标准的“如何在正常情况下加载 PDB”答案。 这个问题与正常情况无关。 我正在构建编译器,它生成了不正确的 PDB。我需要一种方法来调试我自己生成的 PDB 代码的输出。

compiler-construction code-generation visual-studio pdb-files .net-core

9
推荐指数
0
解决办法
518
查看次数

计算TDbGrid中的行数

我有一个TDbGrid,我可以很容易地告诉它在运行时有多少列使用FieldCount属性,但似乎没有相应的RowCount属性来显示正在显示的记录数.我怎么能找到这个?

delphi datagrid

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

我的程序如何判断Delphi是否正在运行?

我听说一些自定义组件作者使用RTL例程来检查Delphi是否正在运行以设置共享软件限制.有谁知道这个例程是什么?检查诸如"DelphiRunning"或"IsDelphiRunning"之类的明显名称并没有发现任何有用的东西.

delphi

8
推荐指数
1
解决办法
5839
查看次数

如何找到指针引用的内存大小?

GetMem允许您分配任意大小的缓冲区.在某处,大小信息由内存管理器保留,因为当您将指针传递给FreeMem时,不需要告诉它缓冲区有多大.

该信息仅供内部使用,还是有任何方法可以检索指针指向的缓冲区大小?

delphi pointers memory-management

8
推荐指数
2
解决办法
2153
查看次数

为什么在D2010中鼠标不移动时OnMouseMove会反复触发?

我正在将Delphi 5应用程序移植到D2010,我遇到了一些问题.在一个窗体上是一个带有OnMouseMove事件的TImage组件,当鼠标移动到图像上时,该事件应该更新标签.这在原始应用程序中运行得很好,但是现在OnMouseMove事件会在鼠标悬停在图像上时不断触发,无论它是否在移动,这会导致标签闪烁可怕.

有谁知道造成这种情况的原因以及如何解决这个问题?

delphi onmousemove event-handling delphi-2010

8
推荐指数
2
解决办法
3098
查看次数

Delphi中For循环后的循环变量是什么?

在Delphi中,考虑一下

var
  i: integer;

begin

  for i := 0 to N do
  begin
    { Code }
  end;
Run Code Online (Sandbox Code Playgroud)

有人可能会认为,i = N在后for循环,但确实在Delphi编译器保证这一点?在Delphi if循环之后,可以假设循环变量等于循环内的最后一个值吗?

更新

在尝试了几个简单的循环之后,我怀疑它i实际上等于一个加上i循环后循环内部的最后一个值 ...但是你能依靠这个吗?

delphi variables for-loop

8
推荐指数
3
解决办法
4662
查看次数

德尔福7与2009年(和2010年)的记录大小相比

将代码从Delphi 7转换到2010时,我遇到了一个奇怪的问题.它与记录有关.下面定义的记录,在D7中的大小为432字节,在D2009(和2010年)中为496.我知道,一个简单的解决方案是使其成为打包记录,然后所有版本都达到426字节......但是,我们将数据存储在我们流式传输记录的位置,现在我们正在尝试使用更新的语言读取这些流.

TToTry = Record
 a,b,c,d : Extended;
 e,f,g,h : Extended;
 i : String[15];
 j,k,l,m,n,o,p,q,r,s,t : Array[1..3] of Extended; End;
Run Code Online (Sandbox Code Playgroud)

在调查这个问题时,我创建了另一条记录,无论出于何种原因,大小都相同?记录较小,但它具有相同的数据类型.但它在所有版本的语言中都有相同的大小.

TMyRecord = Record
Ext1  : Extended;
Ext2  : Extended;
Ext3  : Extended;
Ext4  : Extended;
Ext5  : Extended;
Ext6  : Extended;
Int1  : Integer;
Int2  : Integer;
char1 : AnsiChar;
char2 : AnsiChar;
MyString  : String[15];
Arr1  : Array[1..3] of Extended;
Arr2  : Array[1..3] of Extended; end;
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么一个记录如此不同,另一个是相同的?与Delphi中的字节边界对齐有关.但是从一个版本到下一个版本的变化如此之大?

delphi record delphi-2009 delphi-2010

8
推荐指数
3
解决办法
1785
查看次数

什么是TTypeInfo之前的"身份指针"?

如果你在Delphi内部进行足够的搜索,你会发现一些奇怪的东西,并且显然没有记录编译器生成的TTypeInfo记录.如果PTypeInfo指向地址X处的TTypeInfo记录,X - 4那么您将发现接下来的4个字节描述了指向X的指针.例如:

procedure test(info: PTypeInfo);
var
  addr: cardinal;
  ptr: PPointer;
begin
  addr := cardinal(info);
  writeln('addr: ', addr);
  dec(addr, 4);
  ptr := PPointer(addr);
  addr := cardinal(ptr^);
  writeln('addr: ', addr);
end;
Run Code Online (Sandbox Code Playgroud)

将编译器生成的任何合法的PTypeInfo传递给此例程,并且它将输出相同的地址两次.我在TypInfo.pas中略微探讨了一下,但是我没有看到任何提到这个"身份指针"的东西或它的用途.有谁知道为什么会这样?对于从至少D3到D2010的每个版本的Delphi,这似乎都是正确的.

delphi pointers internals rtti

8
推荐指数
1
解决办法
533
查看次数

Delphi XE:构建软件包时出现"永不构建软件包必须重新编译"/"F2084内部错误:U10346"错误

我正在尝试构建一个包含DWS编译器的包(包A).它工作,但当我有一个第二个包(包B),需要包A,包含任何使用 DWS特定单位的单位,我得到错误:

[DCC致命错误] E2225永不建立包'包A'必须重新编译

如果我将包A更改为按需重新编译,则错误不会消失.我反而得到了

[DCC致命错误] F2084内部错误:U10346

在同一点上.

我在http://code.google.com/p/dwscript/issues/detail?id=419上发布了一个错误报告,看起来问题在作者端无法重现,这意味着我的问题出现了问题.结束.他提出了一些有用的建议:"我有时会因为流浪的DCU而看到这个错误."

即使在重新启动IDE和计算机之后,搜索和删除可能相关的所有DCU也无法解决问题.

在编译过程中使用Process Monitor在BDS上运行跟踪并未显示任何看起来相关的内容.

有没有人对如何追踪这个有任何想法?使用Delphi XE,更新1.

交叉发布到Delphi论坛.让我们先看看谁提出了解决方案.

delphi bpl delphi-xe

8
推荐指数
1
解决办法
8925
查看次数