2011-10-26 7 views
1

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684969(v=vs.85).aspx エラーC2664: 'ReadConsoleOutputCharacterWは': 'にのchar *' からパラメータ2を変換することはできません 'LPWSTR'ReadConsoleOutputCharacterエラー用いて、第2パラメータ

#include <windows.h> 
#include <stdio.h> 

int main(void) 
{ 
    HANDLE hOut; 
    char letter; 
    char letters[5]; 
    DWORD numberRead; 
    COORD where_; 

    SetConsoleTitle(L"Hello!"); 
    hOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    where_.X = 0; 
    where_.Y = 0; 
    ReadConsoleOutputCharacter(hOut, &letter, 1, where_, &numberRead); 
    printf("letter at (0,0) is %c letter", letter); 
    return 0; 
} 

答えて

2

それはあなたが(有効UnicodeサポートでコンパイルされているようだReadConsoleOutputCharacter解決されるためReadConsoleOutputCharacterWに、そうでない場合はReadConsoleOutputCharacterAに解決されます)。

これは、任意のWinAPIの関数で使用されるすべての文字列と文字がワイド文字WCHARの代わりに、charLPWSTRの代わりLPSTRする必要があることを意味....それとも、適切なプリプロセッサシンボル(UNICODE_UNICODEを未定義でUnicodeを無効にし、I思う)。しかし、この場合は、明示的にワイド文字列を渡すので、SetConsoleTitle呼び出しはもう機能しません。

しかし、最も柔軟性がTCHAR代わりのcharLPTSTRの代わりに、LPSTRなどを使用することです。これらは、UNICODEプリプロセッサシンボルの定義に応じて正しいタイプに定義されているだけです。この場合、コードはユニコードのサポートとは無関係に広範にとどまります。しかし、あなたは_TTまたはマクロTEXT内のすべての文字列リテラルをラップする必要があり、この場合には:

//non-unicode 
const char *str = "something"; 

//unicode 
const WCHAR *str = L"something"; 

//unicode-agnostic 
const TCHAR *str = _T("something"); 

は、問題への導入のためのhereを参照してください。

Unicodeのサポートが必要なく、単純なWinAPI関数が必要で、C標準ライブラリとうまくやり取りしたい場合は、UNICODEを定義解除することをお勧めします_UNICODEであり、標準charを使用してください。この場合は、文字列リテラルから修飾子Lも削除してください。

+0

thx、あなたは正しいです – gameboy

関連する問題