小编Mas*_*ler的帖子

TObject包含哪些数据?

TObject.InstanceSize返回8,但TObject没有声明任何数据成员.根据TObject.ClassType的实现,前4个字节可以解释为指向对象的TClass元数据的指针.任何人都知道其他4个字节的开销是什么?

编辑:显然这是D2009特有的.在旧版本中,它只有4个字节.

delphi object delphi-2009 tobject

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

我的程序如何判断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
查看次数

德尔福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
查看次数

是什么原因导致Chrome在缓存内容上针对localhost上的服务器提供net :: ERR_FAILED?

我正在构建一个Web服务器并尝试测试.服务器正在运行localhost:888,第一次加载Web应用程序时,一切正常.但是如果我尝试重新加载页面,那么一堆XmlHttpRequest请求就会失败net::ERR_FAILED.通过在服务器代码中放置断点,我可以验证请求是否实际上从未进入.

这不是连接失败,因为连接第一次成功.它成功一次然后失败的事实意味着它可能与缓存相关,但服务器代码中没有设置cache-control头的任何内容.所以我通过将服务器放在实际的Web服务器上来测试它.第一次,一切都要花时间加载; 第二次,它立即加载,所以这肯定是缓存相关的

这是一个运行在http.sys(没有IIS)之上的自定义服务器,看起来默认情况下会缓存一些内容,然后在后续运行时无法从中加载,但只有当我的服务器在localhost上运行时才会运行.在网上,它工作正常.就像我所知道的那样,net::ERR_FAILEDChrome中有一个通用的"出错了,我们没有任何有用的信息",所以我有点卡在这里.有谁知道是什么原因引起的?

html caching google-chrome http.sys

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

是否在任何地方指定了lambda->表达式树转换过程?

在C#中编译LINQ查询有两个重要步骤.第一种是将LINQ查询语法转换为方法调用链,如C#语言规范的第7.16节所述.此转换过程详细指定,语言开发人员可以使用它在新的CLR语言上实现类似的查询语法.

第二步是将lambda表达式转换为表达式树,这在调用返回的查询方法时发生IQueryable,但在调用返回的方法时则不会IEnumerable.它是否曾经指明过这种转换是如何发生的,与查询语法转换过程的解释相似?

.net c# linq language-specifications

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

为什么SQL的语法由内而外?

在几乎任何正式结构化的信息集中,您可以从开始到结束开始阅读,或偶尔从结尾开始阅读(例如,街道地址).但在SQL中,尤其是SELECT查询,以便正确理解它的含义你必须从中间开始,在FROM子句.这可能使长查询很难读取,特别是如果它包含嵌套的SELECT查询.

通常在编程中,当某些东西似乎没有任何意义时,它背后有一个历史原因.从SELECT而不是FROM开始没有意义.有谁知道这样做的原因?

sql grammar history

7
推荐指数
4
解决办法
1676
查看次数

有没有办法在着色器中纯粹应用正弦波失真效果?

2D图像的正弦波失真是一种经典的视觉效果:通过根据正弦波移动像素,拍摄2D图像并沿X轴或Y轴扭曲.它最终看起来像这样: Y轴正弦波失真的例子

我已经看到了一些代码示例,对于维度(x,y)的图像,使用OpenGL执行此操作的标准方法似乎是:

for each column from 0 to X
  draw a single quad one pixel wide and y pixels high, offset by a sine wave value
Run Code Online (Sandbox Code Playgroud)

当然,这涉及客户端的大量工作.有没有办法绘制单个四边形并使用着色器将失真工作卸载到GPU?只有顶点和片段着色器; 我正在使用OpenGL 2,因此没有可用的几何着色器.

我知道我可以使用片段着色器来对由正弦波偏移的纹理坐标进行采样,但是将它们放置在由四边形定义的原始框之外的位置会很棘手,我宁愿不将输出设置为像示例图片中那样剪裁.有没有解决这个问题的方法?

opengl shader

7
推荐指数
1
解决办法
4692
查看次数