我在Windows 7 Ultimate 32位上使用DevC++,並且在我的程序中包含了windows.h和psapi.h。到目前爲止,我所使用的所有Windows API除了GetProcessId和DebugActiveProcessStop之外都是有效的。編譯器在兩種情況下返回指定的函數未聲明。但是,當我查看winbase.h時,我可以清楚地看到GetProcessId已被聲明。即使將鼠標懸停在該功能上,也會顯示結構信息。那麼,爲什麼編譯器似乎無法識別這兩個函數呢?未找到Win32 API函數
回答
當使用Win32 API標頭時,你需要指定你的目標操作系統的版本。這在MSDN library中有記錄。
現在,你應該通過定義NTDDI_VERSION來做到這一點。如果您查看GetProcessId的文檔,您會注意到它需要Windows XP SP1,因此您至少需要指定NTDDI_WINXPSP1作爲目標操作系統版本。事實上,因爲SP1不再支持你可能與SP2更好:
#define NTDDI_VERSION 0x05010200
在過去,我發現,定義NTDDI_VERSION並不總是按預期工作,但希望大部分的毛刺的已到現在爲止已經被解決了。如果它不起作用,請嘗試使用舊的宏_WIN32_WINNT,這也記錄在上面給出的鏈接中。在這種情況下,你想:
#define _WIN32_WINNT 0x0502
如果以後需要使用Vista或Windows 7中引入的功能,適當地改變NTDDI_VERSION或_WIN32_WINNT的值。每個函數的MSDN庫文檔說明了它所引入的操作系統版本。
是的!第二個#定義工作。謝謝!!!!! – 2012-03-10 04:36:09
當你在windows api中編碼時,有時會彈出這個問題。您可以看到該函數位於頭文件中,但由於某種原因,編譯器不同意。當遇到此問題時,請在頭文件中找到該函數,並在其周圍查找預處理器指令。您可能需要定義一些內容才能使用該功能。
在這種情況下,這裏就是我發現你有問題的功能:
#if (_WIN32_WINNT >= 0x0501)
WINBASEAPI DWORD WINAPI GetProcessId(HANDLE);
#endif
和
#if (_WIN32_WINNT >= 0x0501)
WINBASEAPI BOOL WINAPI DebugActiveProcessStop(DWORD);
#endif
所以,在你的主代碼文件,在這裏你有窗戶頭,把這個定義之前,你的Windows頭包括:
#define _WIN32_WINNT 0x0501
這應該sol有你的問題。祝你好運^ _^
如果這不能解決問題(我認爲它應該),那麼我會確保你沒有從你的鏈接器設置中刪除kernel32.lib。 – 2012-03-10 02:21:43
@druciferre這不會導致一堆鏈接器錯誤嗎? – Gogeta70 2012-03-10 02:53:52
他沒有發佈確切的錯誤,所以它可能是一個鏈接器錯誤。此外,他從未明確表示這是** only **錯誤。我願意打賭'_WIN32_WINNT'的定義是根本原因。但我想我會添加評論,以防萬一。 – 2012-03-10 03:40:33
- 1. Perl Win32 :: API()調用()函數
- 2. GMAPS API找不到函數
- 3. SFML - gluPerspective函數未找到
- 4. DbUnit - JdbcSQLException:函數「*」未找到
- 5. Javascript函數未找到ID
- 6. 未找到XSLT matches()函數
- 7. 創建函數未找到
- 8. 構造函數未找到
- 9. com/jniwrapper/win32/ie/WebBrowser類未找到
- 10. Win32 API來枚舉dll導出函數?
- 11. Win32 API函數需要什麼編碼?
- 12. 關於Win32 API中的GetTempPath函數
- 13. Win32 Api函數的調試中斷
- 14. GoogleClientSecrets.cs未找到youtube api v3
- 15. YouTube Data API v3未找到
- 16. Github API未找到404
- 17. API Steam - 帳戶未找到
- 18. API密鑰未找到
- 19. OpenFileDialog的Win32函數?
- 20. Karaf Shell:命令未找到函數
- 21. 未找到Facelets自定義函數
- 22. Observable/toObservable未找到靜態函數?
- 23. 如何找到未執行的函數?
- 24. 未找到C++默認構造函數
- 25. 未找到Webpack優化構造函數
- 26. 未找到存儲的MySQL函數
- 27. OL3 layer.Tile ZIndex函數未找到
- 28. cordova ./create函數未找到Ubuntu 12.04
- 29. 未找到函數「DATE」; SQL語句:
- 30. 未找到函數內的對象
它可能被預編譯器指令排除。你檢查過了嗎? – 2012-03-10 01:46:31
除非您被要求使用Dev-C++,否則我會考慮仔細關注[Dev-C++標記wiki]的內容(http://stackoverflow.com/tags/dev-c%2b%2b/info )。 – 2012-03-10 01:50:15
作爲一種事後考慮:Windows SDK的v7.0A中既沒有GetProcessId也沒有DebugActiveProcessStop條件,可能是因爲Windows 2000和XP Gold現在都不支持。所以它看起來像你的SDK標題可能會過時。 – 2012-03-13 19:59:25