是否可以在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. 我们可以每天进行30,000次Office 365 API调用吗?
- 5. ActiveRecord可以调用native db函数吗?
- 6. 我们可以使用Highcharts和React-Native吗?
- 7. 我可以触发API调用吗?
- 8. Windows有一个可以从C调用的JSON API吗?
- 9. 我可以从我的Axis2 Web服务调用Hadoop API吗?
- 10. 我们可以调整QR码吗?
- 11. 我们可以从ASP.NET MVC 3项目中调用Webservice吗?
- 12. 我们可以从函数调用存储过程吗?
- 13. 我们可以从html文本框中调用java函数吗?
- 14. 我们可以从适配器调用startActivityForResult吗?
- 15. 我们可以从java调用python方法吗?
- 16. 我可以在Windows Azure上从PHP调用.NET函数吗?
- 17. 我可以从Windows服务调用MVC操作吗?
- 18. 我们可以从Worldweatheronline api获得多个天气数据吗?
- 19. 我们可以从DialPlan Ping延伸吗?
- 20. 我们可以在TGIFImage delphi组件中停止动画吗?
- 21. Windows和Native API中的系统调用?
- 22. 我可以从wsdl调用方法吗?
- 23. 有什么办法从用户模式调用Windows Native API函数吗?
- 24. Windows API可以使用C吗?
- 25. 我们可以在PayPal REST API中使用引用事务吗?
- 26. 我们可以在后端的Api类中有Api方法吗
- 27. 与Windows用户名和密码的connectionstring,我们可以吗?
- 28. 我们可以在Windows上使用git-cvs吗?
- 29. 我们可以更改Windows应用程序app.config的设置吗?
- 30. 我们可以在Windows Powershell ISE中使用SQLTransaction吗?
但我们可以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