0

我正在创建一个跨平台应用程序,为此我打开 GCC/Mingw 的头源代码文件,并在需要时将定义从那里复制到我的头文件中。该项目现在运行正常,但现在遇到错误,代码是

控制台.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

谷歌搜索后发现它是 Kernel32.dll 中的内置函数。

现在,我只是想验证控制台大小是否正确设置?

可以使用任何其他方法或任何其他事情来做到这一点吗?

什么是 _ imp _CreateFile 和 `_CreateFile 函数以及它们的定义位置?

如何将 windows Kernel32.dll 与 GCC 项目链接?

4

1 回答 1

1

在 Windows 上,我认为您正在尝试做的事情在此处进行了解释。基本上,链接文章调用AllocConsole以获取新控制台的句柄,然后GetConsoleScreenBufferInfo获取有关控制台的元数据,例如其宽度和高度。

于 2013-03-05T14:47:24.820 回答