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

如何读取/写入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 \ […]

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

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

我在哪里可以find一个Windows API常量列表,在一个没有.NET的环境

我想find一些Windows API常量的值,例如但不限于LVM_ENABLEGROUPVIEW & WM_SHOWWINDOW 在网上看着我到MSDN ,告诉我他们是用什么,但不是底层的价值观。 在stackoverflow有一个非常类似的问题, 我在哪里可以find一个Windows API常量的列表 ,但所有的答案是.net,或者假设我有Windows SDK,据我所知我没有。 那我在哪里可以find他们? 如果它有所作为,我正在使用delphi2007年,虽然它在消息单位有很多的内容,它并没有包括所有这些,包括一些最新的。 谢谢

如何检查networking共享EXE文件是否被多个用户使用?

我有一个应用程序位于networking共享文件夹中的服务器上。 networking中的许多用户可以同时使用该文件。 我想执行该EXE文件的更新,为此,我想知道谁在networking(除了我)正在使用该文件。 是否有可能以编程方式检查? 例如:要列出所有正在使用该文件的用户名? 或至less检索该文件上的锁的数量? 谢谢。

检测forms最小化的所有情况

我需要检测表单何时最小化(隐藏覆盖表单)。 我拦截WM_SYSCOMMAND消息,如果我单击窗体的最小化button,它工作正常,但如果我使用[Windows] + [M]这个事件似乎不会被解雇。 另外,在这种情况下, WM_ACTIVATE和WM_ACTIVATEAPP不会被触发。 我可以使用什么事件,还有其他什么情况需要检测?

Windows api:等到所有键盘按键全系统释放

我已经在Delphi中做了一个应用程序,处理一些定义的系统范围的热键,完美的作品。 但是,对于一些热键function,我必须触发/模拟一些键盘笔画,如ALT + ENTER。 当用户直接释放热键时,这很好,但是当用户仍然按下键时,键盘模拟失败。 有没有一种方法(与Windows API)来检查是否所有的键被释放之前,我处理键盘模拟?

如何检查我的Delphi控制台应用程序是否被redirect到文件或pipe道?

我有一个控制台应用程序,当输出redirect到一个文件或pipe道(myapp.exe> Foo.bar)时,必须禁用或启用一些操作。 如何检查我的Delphi控制台应用程序是否被redirect到文件或pipe道?

Delphi – CreateProcess – 执行多个命令

我想用CreateProcess()调用来实现以下function: 更改为svn工作副本 执行svn命令 将输出传输到文件 我用下面的函数试试这个 procedure TQPortMainForm.CmdMigrationClick(Sender: TObject); var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; CreateOk: boolean; input: String; begin { fill with known state } FillChar(StartInfo, SizeOf(TStartupInfo), #0); FillChar(ProcInfo, SizeOf(TProcessInformation), #0); StartInfo.cb := SizeOf(TStartupInfo); //debug input := 'D: && cd D:\Qport\trunk\Qport\ && ' + SVN_PATH + ' log > C:\users\PhilippKober\UNIQUE_NAME_BLUB.txt'; CreateOk := CreateProcess(nil, PChar(input), nil, nil, […]

获取FileSystem限制

我想编写一个函数,告诉我是否可以将文件/文件夹写入特定的path。 我想这样做,没有实际写任何文件到磁盘。 是否有一个WINAPI函数? 感谢您的帮助。