我很好奇动态阵列有多长,所以我试过了
SetLength(dynArray, High(Int64));
它的值为9,223,372,036,854,775,807,我认为这是我可以参考的最大索引数.它给了我一个:
带有消息'范围检查错误'的ERangeError.
所以我尝试过:
SetLength(dynArray, MaxInt); 
并得到了同样的错误!
有趣的是我可以称之为
SetLength(dynArray, Trunc(Power(2, 32));
这实际上是MaxInt大小的两倍!
我试过了
SetLength(dynArray, Trunc(Power(2, 63) - 1));
这与High(Int64)相同,但也失败了.
没有继续尝试和错误,有人知道最大尺寸?它取决于数组中元素的大小吗?
我正在使用Delphi 2009.对于不同的版本会有所不同(显然当Commadore出来时它应该更大!)
我有兴趣从另一个Windows GUI程序(自然地用Delphi编写)中调用SoX,一个开源控制台应用程序.我不想处理抓取和隐藏控制台窗口,而是将应用程序转换为可以从我的应用程序调用的DLL.
在我开始这条道路之前,我很好奇我应该期待多少工作?我们是在谈论一项重大事业,还是有直接的解决方案?我知道一些C,但绝不是专家.
我不期待SoX的具体细节,只是EXE控制台应用程序一般转换为DLL.如果有人熟悉SoX,那就更好了.
我目前正在尝试创建一个内置在我的Windows服务中的异常处理程序,在未处理的异常中,它将消息发送到另一个程序.我已经构建了方法并使通信工作,但似乎每次我的程序抛出错误,(我在代码中有一个加注调用来强制它.)windows捕获它而不调用Handler.谁能解释我做错了什么?
简化代码解释:
procedure unhandled();
  begin
    raise Exception.Create('Unhandled');
  end;
procedure ExceptionHandler(ExceptObject: TObject; ExceptAddr: Pointer);
  begin
    WriteLn('Display: ' + Exception(ExceptObject).Message);
    //send Message Here
  end;
我调用此代码来运行它:
WriteLn('Starting');    
ExceptProc := @ExceptionHandler;    
unhandled();
我希望输出为:
开始
显示:未处理
但它只是显示:
开始
然后Windows在大约5秒后返回命令提示符.
为什么处理程序没有被正确调用?
PS我一直在控制台应用程序中运行这些测试进行测试.
编辑:
以下是一些更多信息:
显然,当您有一个已分配的ExceptProc时,您的程序不应抛出正常的运行时217错误.我猜这是Windows正在捕捉的内容,但是我可以看到,我的程序正在抛出运行时错误,我也无法获得ErrorProc来捕获它.
我刚刚将一个Web服务从Delphi.NET 2006移植到Delphi Prism 2009(在Visual Studio 2008 IDE中运行).但我无法找到我应该设置(或取消设置)条件编译常量的位置!
我是否瞎了,这个选项被遗漏了,还是VS不支持?
[编辑:感谢Mohammed Nasman的链接] MSDN告诉我使用Project Designer设置它们.首先,我花了一段时间才发现项目菜单仅在选择解决方案时才可见(而不是Web服务项目).然后,仍然无法在Project Designer中设置条件编译常量!
我只是找不到一种方法来获取ASP.NET项目中的项目选项 ...它真的不可能吗?
无论用户的本地时区设置为什么,使用Delphi 2007,我都需要确定东部时区的时间(TDateTime).
我怎样才能做到这一点?当然,需要节省时间的夏令时.
我正在寻找Generics.Collections并注意到没有链表.当然它们很容易制作,但我觉得奇怪的是没有一个(或者我只是错过了它).与新的现代数据结构相比,链接列表是否过时,还是需要通用的通用链表?有谁知道吗?
在Visual Studio 2008中,当我从项目中打开XAML文件时,它会显示水平分割,顶部是预览,底部是XAML.大多数时候我们的XAML不会在预览中渲染,所以我只需要等待它尝试渲染,然后关闭预览.
有没有办法让它默认不显示XAML预览窗口,只是给我一个完整的XAML编辑窗口?谢谢!
我想嵌入一个文件(任何类型的)到我的exe应用程序,并能够在远程提取使用它,我知道如何嵌入到资源,但我不想将文件放在app目录,我想将所有文件(如.rec)存储到我的exe中,在c#中可以存储为文本文件,然后通过FileStream读取它,但在Delphi中,资源文件与exe文件是分开的.有没有解决方案呢?非常感谢!
这要么荒谬简单,要么太复杂....
在我们的应用程序中,有一个表单从数据库加载一些数据并将其显示在网格中(简单地说).刷新数据时,总内存使用量增加约50K(取决于显示的数据量无疑).听起来像内存泄漏,但是当我们关闭应用程序时,FastMM设置为ReportMemoryLeakOnShutDown:= True,并且它不报告任何异常内存泄漏.
所以看来我们有一个记忆泡泡或包.每次运行时累积更多内存的东西.就像一个TList不断添加新项目,但旧的项目永远不会被删除.然后在关机过程中,所有项目都被销毁.网格中显示的行不会增加,但是幕后有很多对象列表可以使这个工作,所以它可以在任何地方.
所以我的问题是,如果有人知道一个好的技巧,找出应用程序的哪些部分正在使用多少内存....我可以想到很多繁琐的方法(我正在做的事情 - 检查我能找到的每个列表),所以我希望有人有一个我没有想过的技巧或技巧.
提前致谢!
更新:每次刷新都会导致使用额外的10-50K内存.用户报告最终应用程序停止响应.它当然就像一个内存泄漏,但FastMM(内存管理器)看不到任何泄漏.我会尝试一些其他的记忆工具...
delphi ×8
delphi-2009 ×2
asp.net ×1
c ×1
delphi-7 ×1
dll ×1
estimation ×1
exception ×1
exe ×1
generics ×1
linked-list ×1
memory ×1
oxygene ×1
profiling ×1
silverlight ×1
timezone ×1
xaml ×1