0

私はクロス プラットフォーム アプリケーションを作成しています。そのために、GCC/Mingw のヘッダー ソース コード ファイルを開き、必要に応じてそこからヘッダー ファイルに定義をコピーしました。プロジェクトは現在正しく実行されていますが、エラーが発生し、コードは

console.c

     #include<console.h>
     HANDLE write_Console


int get_console_size(){
    if( ( write_Console = CreateFile( "CONOUT$", 
                  GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | 
                  FILE_SHARE_WRITE, 0L, OPEN_EXISTING, 
                  FILE_ATTRIBUTE_NORMAL, 0L) ) == (HANDLE) -1 
             ) {
        printf("opened");
    }
    }


void console_settings_init(){

    //For writing on the console
    write_Console = GetStdHandle(STD_OUTPUT_HANDLE);

    //For Reading from Console
    read_Console = GetStdHandle(STD_INPUT_HANDLE);

    // Set up the required window size:
    SMALL_RECT windowSize = {0, 0, CONSOLE_WIDTH-1, CONSOLE_HEIGHT-1};

    // Change the console window size:
    SetConsoleWindowInfo(write_Console, TRUE, &windowSize);


    // Create a COORD to hold the buffer size:
    COORD bufferSize = {CONSOLE_WIDTH, CONSOLE_HEIGHT};

    // Change the internal buffer size:
    SetConsoleScreenBufferSize(write_Console, bufferSize);

    recheck_console():
}

*関数 get_console_size を書かない場合、非常にうまくコンパイルされます*

しかし、get_console_size を追加すると、CreateFile 関数を __cdecl として次のエラーが発生します。

 console.c:(.text+0x4a): undefined reference to `_CreateFile'

しかし、__declspec(dllimport) を使用してコンパイルしようとすると、次のエラーが発生します。

 console.c:(.text+0x4a): undefined reference to `__imp__CreateFile'

使用した GCC コンパイル コマンド:

 gcc -DHAVE_CONFIG_H -I. -I..  -I../include    
     -nostdinc -Wall -fno-builtin -Wno-pragmas -Werror -MT 
      console.o -MD -MP -MF .deps/console.Tpo -c -o console.o console.c
      mv -f .deps/console.Tpo .deps/console.Po

Google を検索したところ、Kernel32.dll に組み込み関数であることがわかりました。

さて、コンソールのサイズが適切に設定されているかどうかを確認したいだけですか?

そうするために他の方法または他のものを使用できますか?

_ imp _CreateFile および `_CreateFile 関数とは何ですか? また、それらはどこで定義されていますか?

Windows Kernel32.dll を GCC プロジェクトにリンクするにはどうすればよいですか?

4

1 に答える 1

1

Windows では、あなたがやろうとしていることはhereで説明されていると思います。基本的に、リンクされた記事ではAllocConsole、新しいコンソールのハンドルを取得しGetConsoleScreenBufferInfo、幅や高さなどのコンソールに関するメタデータを取得するように呼び出します。

于 2013-03-05T14:47:24.820 に答える