0

誰かがこのコードの問題を教えてもらえますか?私はコンソールではなく、Windowsアプリを構築しています。関数を正しく使用していますか。どのタイプを使用すればよいですか?さて、セミコロンのエラーを修正しました。まだ正しく動作していません。

#include <windows.h>
int WINAPI WinMain(HINSTANCE thisin,HINSTANCE previn,LPSTR lpstr,INT int_)
{
    LPTSTR buffer;
    DWORD size;
    SetConsoleTitle("Console Title");
    if(!GetConsoleTitle(buffer,size))
        cout << "error" << endl;
    else cout << *buffer << endl; 

    system("Pause");
    return 0;
 }
4

3 に答える 3

1

2 つの問題があります。最初は ';' です。それがC++のミスタイプエラーであり、すべての人がそれを言っている場合の最後ですが、2番目は、バッファを取得して何かを返すすべてのAPIに対して、有効なバッファを提供する必要があります。GetConsoleTitle次のように実装されていると仮定します。

BOOL GetConsoleTitle(LPTSTR p, DWORD dwSize)
{
    LPTSTR actualTitle = /* Get actual title from somewhere */;
    while (dwSize--)
    {
        *p++ = *actualTitle++;
        if (!*p++) return TRUE;
    }
    // Not enough buffer
    return FALSE;
}

ここでプログラムを見てください。初期化されていない を関数に渡すLPTSTRと、API 呼び出し*p++ = *actualTitle++の直後にセグメンテーション違反または が発生しAccess violationます。したがって、それを解決するには、最初の引数として有効なバッファーを渡す必要がありLPTSTRますTCHAR*

const DWORD dwSize = 128;
TCHAR buffer[dwSize];
if (GetConsoleTitle(buffer, dwSize)) std::cout << "OK!" << std::endl;
于 2013-03-06T19:38:21.670 に答える
0

最初のことが最初です。エラーがあるかどうかに関係なく、ステートメントが出力されます。そこでelseを使用します:

if(!GetConsoleTitle(buffer,size))
    cout << "error" << endl;
else
    cout << *buffer << endl; 

;あなたifのタイプミスの後、私はそれを上に修正しました。

于 2013-03-06T19:24:27.383 に答える
0

コンソール アプリの API を使用しています。コンソール アプリを作成し、このコードをコンソール プロジェクト c または cpp ソース ファイルにコピーして置き換えます。

int WINAPI WinMain(HINSTANCE thisin,HINSTANCE previn,LPSTR lpstr,INT int_)

int _tmain(int argc, char *argv[])

「;」も削除します (セミコロン) 'if' ステートメントから。

于 2013-03-06T19:26:40.767 に答える