是否可以在Delphi应用程序中调用内核Native API?像nt
和zw
系统调用。我们可以从Delphi调用Native Windows API吗?
回答
你确实可以从Delphi调用本地API。
Delphi不附带本地API的标题翻译。所以你需要提供你自己的,或使用预先存在的翻译。例如。 NT API的JEDI翻译。
的确,您需要Jedi Apilib的JwaNative.pas(+1) – Remko 2013-02-17 13:26:13
正如David Heffernan所说,从usermode和Delphi使用Native API是完全可能的。您将需要Jedi Apilib的JwaNative设备。
下面是小例子使用原生API来枚举进程: (TProcessList是TObjectList的后裔,但相关的部分是调用NtQuerySystemInformation)
function EnumProcesses: TProcessList;
var
Current: PSystemProcesses;
SystemProcesses : PSystemProcesses;
dwSize: DWORD;
nts: NTSTATUS;
begin
Result := TProcessList.Create;
dwSize := 200000;
SystemProcesses := AllocMem(dwSize);
nts := NtQuerySystemInformation(SystemProcessesAndThreadsInformation,
SystemProcesses, dwSize, @dwSize);
while nts = STATUS_INFO_LENGTH_MISMATCH do
begin
ReAllocMem(SystemProcesses, dwSize);
nts := NtQuerySystemInformation(SystemProcessesAndThreadsInformation,
SystemProcesses, dwSize, @dwSize);
end;
if nts = STATUS_SUCCESS then
begin
Current := SystemProcesses;
while True do
begin
Result.Add(TProcess.Create(Current^));
if Current^.NextEntryDelta = 0 then
Break;
Current := PSYSTEM_PROCESSES(DWORD_PTR(Current) + Current^.NextEntryDelta);
end;
end;
FreeMem(SystemProcesses);
end;
您是JwaNative的作者吗? – 2013-02-17 15:10:47
@DavidHeffernan:我是Jedi Apilib项目的管理员之一...... – Remko 2013-02-17 15:15:40
题外话:是我吗,还是真的很难通过网络搜索找到JEDI。每当我尝试时,我总能找到大量不同网站的链接。有很多不同的项目吗?也许这就是让我困惑的原因。 – 2013-02-17 15:17:29
- 1. 我们可以从基于JavaScript的Office插件调用Native API
- 2. 我们可以从Delphi 5应用程序调用.net(2.0)dll
- 3. 我们可以禁用AOP调用吗?
- 4. 从Native Client/Pepper Plugin调用Windows API
- 5. 我们可以调用android原生API
- 6. 我们可以每天进行30,000次Office 365 API调用吗?
- 7. 我们可以从ExitInstance中调用FreeLibrary
- 8. ActiveRecord可以调用native db函数吗?
- 9. 我们可以使用Highcharts和React-Native吗?
- 10. 我可以触发API调用吗?
- 11. Windows有一个可以从C调用的JSON API吗?
- 12. 我们可以从c#中的Windows窗体调用接口方法吗?
- 13. 我可以从我的Axis2 Web服务调用Hadoop API吗?
- 14. 我们可以调整QR码吗?
- 15. 我们可以给参数回调吗?
- 16. 我在哪里可以找到针对Windows API调用的Delphi声明?
- 17. 我们可以从Phonegap项目调用一个android活动吗?
- 18. 我们可以从函数调用存储过程吗?
- 19. 我们可以从img tag src调用servlet的doPost方法吗?
- 20. 我们可以从java调用python方法吗?
- 21. 我们可以从适配器调用startActivityForResult吗?
- 22. 我们可以从ASP.NET MVC 3项目中调用Webservice吗?
- 23. 我们可以从WebService调用JavaScript函数吗?
- 24. 我们可以从html文本框中调用java函数吗?
- 25. 我们可以在Google Map API v3中使用Mapstaction API吗?
- 26. 我可以在Windows Azure上从PHP调用.NET函数吗?
- 27. 我可以从Linux客户端调用Windows DLL吗?
- 28. 我可以从Windows服务调用MVC操作吗?
- 29. 我们可以在TGIFImage delphi组件中停止动画吗?
- 30. 我可以在Windows Embedded 8 Standard中使用Windows 8.1 API吗?
但我们可以NT打电话的ZW系统调用usermode c/C++程序,它们不仅适用于驱动程序 – n1kita 2013-02-17 12:33:17
正式的,你可以像在c/C++中一样在Delphi中编写驱动程序,没有语言限制。唯一的实际问题是delphi驱动框架不存在。 – kludg 2013-02-17 13:01:26
@Serg我不确定在Delphi中编写驱动程序是否实用。你如何打包代码?驱动程序不是DLL或EXE文件。 – 2013-02-17 13:07:12