我有一个提供解码功能的DLL,如下:functionMyDecode(Source:PChar;SourceLen:Integer;varDest:PChar;DestLen:Integer):Boolean;stdcall;HostApp调用“MyDecode”,并传入Source、SourceLen和Dest参数,DLL返回解码后的Dest和DestLen。问题是:HostApp不可能知道解码后的Dest长度,因此不知道如何预先分配Dest的内存。我知道可以将“MyDecode”拆分成两个函数:functionGetDecodeLen(Source:PChar;SourceLen:
据我所知,字符串在Delphi中是不可变的。我有点理解这意味着如果你这样做:string1:='Hello';string1:=string1+"World";第一个字符串被销毁,你得到一个对新字符串“HelloWorld”的引用。但是,如果您在代码周围的不同位置使用相同的字符串会发生什么?我分配了一个字符串哈希来标识多个变量,例如,“更改”由该更改的属性的哈希值标识。这样我就很容易检查“更改”是否相等。现在,每个散列都是单独计算的(并非所有属性都被考虑在内,因此即使它们在某些值上不同,也可以分开实例)。问题是,Delphi如何处理这些字符串?如果我计算将散列分隔为相同的10字节长度字
我知道当我在DelphiAPP和DelphiDLL之间共享strings时,我需要在app和dll项目源中添加Sharemem作为第一个使用单元子句。但是,如果dll导出函数只接受Pchars但在我使用strings的某些dll方法中,我是否也应该使用sharemem?让我展示一个示例代码:procedureShowMyCustomMessage(aMessage:Pchar);varvUselessString:string;beginvUselessString:=aMessage;ShowMessage(vUselessString);end;exportsShowMyCusto
我使用AllocMem/GetMem/New例程分配内存,然后使用FreeMem/Dispose例程释放内存。但是我发现(通过ProcessExplorer)进程的内存大小没有减少。如果我使用GlobalAllocPtr/HeapAlloc和GlobalFreePtr/HeapFreeAPI,内存大小会减少。这是我的测试代码:typeTMyRec=recordName:string;TickCount:Cardinal;Buf:array[0..1024-1]ofbyte;end;PMyRec=^TMyRec;varForm1:TForm1;implementation{$R*.dfm
根据FastMM4,我目前正在处理的Delphi程序泄漏了很多字符串。AnsiStrings准确地说:应用程序(http://sourceforge.net/projects/orwelldevcpp/)曾经泄漏更多其他数据类型,但FastMM4可以报告实例的创建位置,因此我设法解决了这个问题。奇怪的是,FastMM4根本不报告这些泄漏的位置。编辑:它似乎确实如此,请参阅修复的答案。无论如何,问题仍然存在:我到底是怎么泄露这些东西的?所以,嗯,不幸的是,我不知道要寻找什么。我的意思是,如果这些东西超出范围,它们应该被自动释放(即使它们在堆上)?我确实设法通过随机评论并查看计数会发生什么
如何监控或可视化delphi应用程序的内存碎片? 最佳答案 大多数Delphi应用程序使用FastMM现在,如果您链接了源代码版本,则可以使用FastMMUsageTracker.pas文件,该文件创建一个单独的窗口,显示内存的使用情况,每秒钟左右更新一次。我获取了该文件中的代码并创建了一个记录到文件的版本,以便我可以在服务中使用它,但对于桌面应用程序,标准跟踪器可以很好地工作。 关于delphi-如何监视或可视化delphi应用程序的内存碎片,我们在StackOverflow上找到
关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion我有一个Delphi2009程序,它处理大量数据,需要尽可能快并且不占用太多内存。您对Delphi代码做了哪些简单的更改,通过显着减少执行时间或内存使用对程序性能影响最大?感谢大家的所有回答。很多很棒的提示。为了完整起见,我将发布一些我发现的有关Delphi优化的重要文章。BeforeyoustartoptimizingDelphicode在About.com上SpeedandSize:Top10Tri
一个相当全面的网站解释了使用c/c++编写的dll以及将.h头文件转换为delphi/pascal所涉及的困难和解决方案,该网站已发布到我最近使用的邮件列表中,所以我想我'会分享它,并邀请其他人为此发布其他有用的资源,无论是链接、转换工具还是书籍/论文标题。请每个答案一个资源,所以我们最终会得到最流行/最好的资源冒泡到顶部。 最佳答案 在Rudy'sDelphiCorner,他有一个excellentarticleaboutthepitfallsofconvertingC/C++toDelphi.在我看来,这是尝试此任务时必不可少的
什么是DelphiDCU文件?我相信它代表“Delphi编译单元”。我是否假设它包含目标代码,因此对应于从C/C++源代码文件编译的“.o”文件,对吗? 最佳答案 我相信.dcu通常是“Delphi编译单元”,而不是.pas文件,后者只是“Pascal源代码”。.dcu文件是DCC编译器在编译.pas文件后生成的文件(.dfm文件转换为二进制资源,然后由链接程序直接处理)。它类似于其他编译器生成的.o和.obj文件,但包含有关符号的更多信息(因此reverseengineertheinterfacesectionofaunitfro
我是一位经验丰富的Java程序员,在过去的几年里一直在做很多Win32方面的工作。主要是我一直在使用VB6,但我真的需要转向更好的东西。我花了一个月左右的时间在玩Delphi2009。我喜欢VCLGUI的东西,Delphi似乎比VB6更适合WindowsAPI调用,我真的很喜欢它在OO方面比VB6更好的事实,而且我比如IDE自带的单元测试框架。但我真的很挣扎,因为Delphi没有广泛使用的垃圾收集器-必须手动释放每个对象或为所有内容使用接口(interface)似乎对您在面向对象的方式。此外,我对语法以及必须在方法的顶部声明所有变量这一事实并不特别感兴趣。我可以处理Delphi,但我想