是否可以在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