Articles of delphi

带有多个网卡的HNetCfg.NATUPnP

我正在使用下面的代码来查找转发的端口… Nat := CreateOleObject('HNetCfg.NATUPnP'); Ports := Nat.StaticPortMappingCollection; if not VarIsClear ( Ports ) then begin Enum := Ports._NewEnum; foreach := enum as IEnumVariant; while foreach.Next(1, Port, PDWORD(0)^) = 0 do begin Desc := Port.Description; //str Enabled := Port.Enabled; //bool ExtIP := Port.ExternalIPAddress;//str ExtPort := Port.ExternalPort; //int IntClient := Port.InternalClient; //str IntPort := Port.InternalPort; //int Protocol […]

使用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 […]

DateTimeToUnix在UTC?

我需要函数DateTimeToUnix和UnixToDateTime UTC变体,因此中国客户可以与德国的服务器进行交互。 双方应该能够交换Unix时间戳(UTC,没有DST),并能够通过这种方式进行通信。 在HeidiSQL的bugreport中 ,用户讨论了DateTimeToUnix和UnixToDateTime不关心时区,在那里我find了下面的代码: function DateTimeToUTC(dt: TDateTime): Int64; var tzi: TTimeZoneInformation; begin Result := DateTimeToUnix(dt); GetTimeZoneInformation(tzi); Result := Result + tzi.Bias * 60; end; MSDN 解释 twi.Bias如下: UTC时间和当地时间之间的所有翻译均基于以下公式: UTC =当地时间+偏差 UTC时间和当地时间之间的差异,以分钟为单位。 这听起来合乎逻辑,但是由于我不确定上面的代码是否正确,我做了下面的程序来检查它: // A date in summer time (DST) Memo1.Lines.add('1401494400'); // 31 May 2014 00:00:00 GMT according to http://www.epochconverter.com/ Memo1.Lines.add(inttostr(DateTimeToUnixUTC(StrToDate('31.05.2014')))); // A date in […]

Indy“无法加载SSL库”与Delphi 2007 / Apache

我知道这个问题已经被问了很多次了。 我似乎有一个不同的问题。 在我的情况后,最初抛出exception,它工作正常(和没有;我没有closuresexception)。 所以我所做的就是例外,我简单地转发: IdHTTP1.Post(……. 我已经将libeay32.dll和ssleay32.dll都放在Apache的bin目录和我的ISAPI DLL所在的目录中。 任何人有任何build议?

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

Windows视觉主题:部件和国家图库?

Microsoft Windows允许程序员使用DrawThemeBackground和DrawThemeText等DrawThemeBackground使用当前主题的外观和感觉来绘制GUI元素。 元素由Class,Part和State指定,如MSDN的“ 部件和状态”页所述。 不幸的是,这个页面并不是非常有用的信息(完全可以!)。 所以问题是:是否有一个所有这些部分和状态的参考,最好与元素的图像(在默认的Windows Vista / 7主题)?

如何读取/写入Windows 7库位置?

介绍 在Windows 7中,您有一些文件,图片和音乐等特殊文件夹,称为库。 如果你不知道他们,基本上每个库文件夹可以包含位置(path),这基本上是每个库的快捷方式。 一些例子: Documents (Library) E:\个人\文件(Location) F:\ Backups \ Documents (Location) Music (Library) E:\ Media \ Music \ Albums (Location) E:\ Media \ Music \ Singles (Location) Pictures (Library) E:\媒体\照片(Location) 当您从Windows资源pipe理器或“开始”菜单中单击任何这些库文件夹时,Windows资源pipe理器将显示该库中定义的位置。 任务 我需要做的是读取每个库types的位置,并能够用我自己的位置写回(更新)库。 我发现这些库存储在用户的AppData文件夹中,如下所示: C:\Users\SOMEUSER\AppData\Roaming\Microsoft\Windows\Libraries 这些库是这种文件types: 库(.library-ms) – 如果你右键点击一个,select属性,库选项卡,你可以看到与该库相关联的库位置。 我没有看到解压缩这些方法,并把它们放在一个TStringList中,以便在Delphi中进行编辑。 我想知道,如果这些库位置实际存储在Windowsregistry,所以从谷歌的一些研究,我发现这些path: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ […]

我可以确定我的单位已经初始化的顺序吗?

我正在寻找可能连接到单元初始化顺序的错误。 有没有办法看到哪个initialization部分被执行? 我需要知道顺序。 这是在debugging期间,所以我拥有Delphi IDE的全部function,在我的案例Delphi 2009中。 我可以设置断点,但有很多单位时,这是相当乏味的。 你有什么build议吗?

什么能使程序第二次运行得更快?

当我testing编写代码时,我注意到的一点是,长时间运行的程序在运行程序的第一次运行时往往比在后续运行时运行时间要长,有时甚至超过10倍。 很明显,这里有一些冷caching/热caching的问题,但我似乎无法弄清楚它是什么。 这不是CPUcaching,因为这些长时间运行的操作往往是循环,我提供了大量的数据,并且应该在第一次迭代之后完全加载。 (另外,卸载和重新加载程序应该清除caching。) 另外,它不是光盘caching。 我已经通过从光盘上加载所有数据并在之后处理来排除这种情况,这是实际的CPU数据处理过程缓慢的原因。 那么什么事情会导致我的程序在第一次运行时运行缓慢,但是如果closures它并再次运行它,运行速度会更快吗? 我已经在几个不同的程序中看到了这一点,它们做了很多不同的事情,所以这似乎是一个普遍的问题。 编辑:澄清,我在Delphi写,但我真的不认为这是一个Delphi特定的问题。 但是这意味着无论问题是什么,它都与JIT问题,垃圾收集问题或托pipe代码带来的任何其他包袱无关。 而我没有处理networking连接。 这是纯粹的CPU绑定处理。 一个例子:一个脚本编译器。 它像这样运行: 从光盘加载整个文件到内存中 将整个文件打包成一个标记队列 将队列parsing为树 在树上运行codegen来产生字节码 如果我把大量的脚本文件(~100K行)从光盘载入到内存中,lex步骤第一次运行需要大约15秒,而后续运行需要2秒。 (是的,我知道还有很长一段时间,我正在研究这个…)我想知道经济放缓是从哪里来的,我能做些什么。