Articles of delphi

从Delphi直接调用Android NDK函数的困难

可以通过JNI和NDK从Delphi调用Android C函数。 为了实现这一点,相当多的工作,并build议直接调用NDK函数。 为此,我创build了一个小的示例文件来声明一个外部的C函数,这些函数是我在Delphi源代码中find的。 在<path to delphi>\source\rtl\android更具体。 我创build了一个非常小的testing程序来testing直接从Delphi调用C函数的function。 所有源代码,你会发现下面,这是我目前正在testing。 unit DLL_external; interface const MIDI_Lib = '/usr/lib/libmiditest.so'; test_fun = 'test_1'; function test_1 (n: Integer): Integer; cdecl; external MIDI_Lib name test_fun; implementation initialization finalization end. 初始化和终结是必要的,因为链接错误是指一些缺less的初始化和终止代码。 调用类: unit DLL_Test_Main; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, DLL_external; //{$I Androidapi.inc} type TForm1 […]

如何使用Delphi从文件扩展名中获取图标和描述?

基本上我有一个TcxGrid这将列出各种文件的名称,我想进一步的细节基础上的文件扩展名,特别是它的描述(例如.PDF它是“Adobe Acrobat文档”)和它的相关图标。 我注意到已经有一个非常类似的问题,但它是C#相关的,我想要一些基于Delphi的东西。 build议在哪里寻找这种信息将是很好的,如果有一个类似于上面提到的C#职位(显然是在Delphi中),这将是伟大的。

我的32位应用程序能做什么,消耗千兆字节的物理内存?

几个月前,一位同事向我提到,我们的一个Delphi应用程序似乎占用了8GB的内存。 我告诉他了: 这是不可能的 一个32位应用程序只有一个32位的虚拟地址空间。 即使有内存泄漏,它可以消耗的最多的内存也是2GB。 之后,分配将失败(因为在虚拟地址空间中不会有空的空间)。 而在内存泄漏的情况下,虚拟页面将被换出到页面文件,释放物理RAM。 但他指出,Windows资源监视器指出,系统上可用的RAMless于1 GB。 而我们的应用程序只使用了220 MB的虚拟内存:closures它释放了8 GB的物理RAM。 所以我testing了它 我让应用程序运行了几个星期,今天我终于决定testing它。 首先我看看closures应用程序之前的内存使用情况: 工作集(RAM)是241 MB 使用的总虚拟内存: 409 MB 我使用资源监视器检查应用程序使用的内存,以及使用的总RAM: 由应用程序分配的虚拟内存: 252 MB 正在使用的物理内存: 14 GB 然后closures应用程序后的内存使用情况: 正在使用的物理内存: 6.6 GB (低7.4 GB) 我还使用Process Explorer来查看物理RAM使用前后的细分情况。 唯一的区别是,8 GB的内存真的没有提交,现在免费: | Item | Before | After | |——————————-|————|———–| | Commit Charge (K) | 15,516,388 | 7,264,420 | | […]

如何以编程方式防止Windows从硬盘驱动器停转?

我的程序在硬盘可用空间上执行任务。 任务相当长, 需要1-2个小时 。 问题是,在笔记本电脑上,用户闲置几分钟后,硬盘可能会closures。 如何以编程方式阻止Windows从硬盘旋转(关机)?

为什么我的Delphi 6程序仅在less数Windows 7系统(InnoSetup)上安装时触发pipe理权限请求?

我有一个Delphi 6程序,对于大多数用户在没有pipe理员权限的情况下在用户帐户下运行时安装得很好。 但是,在某些系统上,它会触发对pipe理权限的请求。 不幸的是,我不是其中之一,所以我很难诊断这个问题。 我使用InnoSetup 5.1.9来构build我的安装程序。 我怎样才能找出我需要改变我的安装程序的configuration,以消除对某些人的系统的pipe理权限的需要? 这对我的系统造成了麻烦,因为在安装过程中,某些程序数据文件正被复制到pipe理员帐户的应用程序数据文件夹中。 然后,当我的程序在用户帐户下启动时,由于这些文件不在用户帐户应用程序文件夹中,因此无法find这些文件。

debuggingmultithreading应用程序后系统错误

debuggingmultithreading应用程序后,我有系统库“ntdll.dll”的错误。 错误代码是0x4000001f(STATUS_WX86_BREAKPOINT)。 错误发生在个案的情况下,只有在通过Delphi IDEdebugging时才会发生。 我在Win7 x64上使用Delphi 2010。 在什么可能是问题? 谢谢。

NtEnumerateKey()的KeyInformation参数

我很想知道如何将KeyInformationparameter passing给NtEnumerateKey() 。 当我运行下面的代码时, NtEnumerateKey()返回NTSTATUS = 0xC000000D错误消息“一个无效的parameter passing给服务或函数”。 我正在使用Windows 7.尽pipe下面的代码使用了Delphi语言,但您也可以用C语言来回答我的问题。 我的问题不是特定于编程语言。 type KEY_NAME_INFORMATION = record NameLength: ULONG; Name: array[0..254] of WCHAR; end; PKEY_NAME_INFORMATION = ^KEY_NAME_INFORMATION; var iNtStatus: LONG; hKeyResult: THandle; KeyNameInfo: KEY_NAME_INFORMATION; iResultLen: ULONG; iNtStatus := NtOpenKey(@hKeyResult, (KEY_ENUMERATE_SUB_KEYS) and not SYNCHRONIZE, @rObjAttrs); if hKeyResult = 0 then Exit; iNtStatus := NtEnumerateKey(hKeyResult, 0, KeyNameInformation, @KeyNameInfo, // […]

为什么CreateProcess给出错误193(%1不是有效的Win32应用程序)

下面的代码无法启动文档。 我得到错误193(%1不是有效的Win32应用程序)。 启动可执行文件正常工作。 这些文件正确关联,双击时会启动相应的应用程序。 我search了SO和其他地方的错误消息,createprocess的东西等(例如为什么CreateProcess在Windows Server 2003 64位失败?我知道引用命令行。 这是Win7 64位VMWare VM中的Delphi XE2(Update 4)Win32应用程序。 在主机(Win7 64位)和32位XP虚拟PC虚拟机上,代码也失败。 应该在Win7 VM(Excel 2003和Crimson Editor)中启动的应用程序是32位的。 从IDE启动或独立运行testing应用程序时都会发生故障 它曾经是Delphi2007的代码,编译的D2007应用程序,这个代码来自任何地方的罚款。 代码有什么问题? 这几乎就像我忽略了一些非常明显的东西。 提前致谢, 一月 procedure StartProcess(WorkDir, Filename: string; Arguments : string = ''); var StartupInfo : TStartupInfo; ProcessInfo : TProcessInformation; lCmd : string; lOK : Boolean; LastErrorCode: Integer; begin FillChar( StartupInfo, SizeOf( TStartupInfo ), […]

为什么是:可见,控制分配的TA,影响应用程序的CPU使用率?

如果一个TAction链接到一个对象,比如TToolButton ( TToolButton Item)或TActionClientItem (Item的TActionToolBar ),并且该对象在运行时是可见的,那么无论何时在表单中移动鼠标(除了Toolbars之外的任何地方)基于可见的TA的数量,在CPU上完成额外的负载,即当在前面提到的任何一个条上没有任何一个TA链接项可见时移动鼠标。 显而易见的是,额外加载的显着百分比完全取决于您正在运行的是什么types的钻机,但是我注意到的是,当您的应用程序具有以下情况时,实际的差异可能是显着的: 很多明显的TAction链接项目 已经为onMouseOver事件执行较小计算的自定义组件,例如更改控件的外观 自定义的视觉风格 所以问题是为什么可见项链接的TAction组件会影响鼠标移动的处理?

我怎样才能在我自己的窗口下面捕捉屏幕,除了我自己的窗口

假设我想编程一个放大镜,我怎么能捕获屏幕的内容,不包括我自己的窗口? 我知道如何用我自己的窗口使用BitBlt和Desktop DC捕获屏幕。 为了更清楚一点:我想在窗口中放大放大的内容。 编辑:似乎没有其他的解决办法,比我隐藏我的窗口(或客户区)之前,我可以捕获我的窗口下的屏幕内容。 显然这导致我的窗口闪烁,这使得这个场景非常无用。