2012-01-14 73 views
1

一開始我有:GetCurrentConsoleFont未在範圍內聲明,我做錯了什麼?

#include <sstream> 
#include <iostream> 
#include <stdio.h> 
#include <iomanip> 
#include <string> 
#define _WIN32_WINNT 0x500 //tells that this is win 2000 or higher, without GetConsoleWindow would not work 
#include <windows.h> 

using namespace std; 

int main() { 
    PCONSOLE_FONT_INFO lpConsoleCurrentFont; 
    GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), false, lpConsoleCurrentFont); 
    return 0; 
} 

和無證功能SetConsoleFont的作品,但在編譯GetCurrentConsoleFont失敗,稱這是不是在這個範圍內聲明。

- 編輯:改爲自持代碼。

+1

_Testcase_,請。 – 2012-01-14 23:57:02

+0

我只是試了一下,它的工作 – 2012-01-14 23:58:29

+0

好吧,我把它改爲自持碼,它工作嗎? – rsk82 2012-01-15 00:04:09

回答

4

GetCurrentConsoleFont至少在NT4 +上導出,MinGW標頭必須是錯誤的。

嘗試添加該代碼後您的#包括的:

#ifdef __cplusplus 
extern "C" { 
#endif 
BOOL WINAPI GetCurrentConsoleFont(HANDLE hConsoleOutput,BOOL bMaximumWindow,PCONSOLE_FONT_INFO lpConsoleCurrentFont); 
#ifdef __cplusplus 
} 
#endif 

您的代碼也是錯誤的,它應該是:

CONSOLE_FONT_INFO ConsoleFontInfo; 
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), false, &ConsoleFontInfo); 

(任何時候你看到PSOMETYPE作爲參數,你通常分配SOMETYPE結構堆棧並傳遞指向該結構體的指針作爲參數)

+0

嗯,你是否確定*它在XP之前的版本上可用?我意識到目前的MSDN文檔通常都是關於最低版本的,但我在舊版MSDN文檔中找不到任何證據表明它是在XP之前按名稱導出的。 – 2012-01-15 09:08:33

+0

@CodyGray:是的,我檢查了導出表(這個字體索引設計看起來有點愚蠢,可能記錄爲解決方案的一部分,在Vista中增加了敏感的Ex版本...) – Anders 2012-01-15 21:29:54

2

Hans上面評論是正確的。 GetCurrentConsoleFont未在wincon.h中定義。將以下行添加到wincon.h以獲得此功能:

BOOL WINAPI GetCurrentConsoleFont(HANDLE,BOOL,PCONSOLE_FONT_INFO);

COORD WINAPI GetConsoleFontSize(HANDLE,DWORD);

GetConsoleFontSize也丟失。