Articles of delphi

使用Delphi 2007从虚拟文件夹加载文件

我试图从一个Windows虚拟文件夹(例如,相机或iPhone图片文件夹)加载文件的内容。 下面是我用来玩这个的一些示例代码: procedure TfrmForm.ButtonClick(Sender: TObject); Var Dialog: TAttachDialog; Enum: IEnumShellItems; Name: LPWSTR; Item: IShellItem; Strm: IStream; OStrm: TOLEStream; FStrm: TFileStream; Result: HRESULT; Buf: Array[0..99] Of Char; Read: LongInt; begin Result := CoInitializeEx(Nil, COINIT_APARTMENTTHREADED Or COINIT_DISABLE_OLE1DDE); If Succeeded(Result) Then Begin Dialog := TAttachDialog.Create(Self); Try Dialog.Options := [fdoAllowMultiSelect, fdoPathMustExist, fdoFileMustExist]; Dialog.Title := 'Select Attachments'; If Dialog.Execute(Self.Handle) Then […]

什么是导致桌面盾牌图标覆盖* SOME *桌面上

我有一个C ++ Builder / Delphi应用程序。 它具有以下清单作为资源embedded: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" processorArchitecture="*" version="1.0.0.0" name="Manufacturer.Division.MyName" /> <description>MyName</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" /> <!– Win Vista and Win Serv […]

从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 ), […]