我正在创建一个跨平台应用程序,为此,我打开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
搜索谷歌后,我发现它是Kernel32.dll中的内置功能。</ p>
现在,我只想验证控制台大小是否正确设置?
可以使用任何其他方法或任何其他方法吗?
什么是_ imp _CreateFile和`_CreateFile函数以及它们的定义位置?
如何将Windows Kernel32.dll与GCC Project链接?
答案 0 :(得分:1)
在Windows上,我认为你要做的是here。基本上,链接文章调用AllocConsole
来获取新控制台的句柄,然后调用GetConsoleScreenBufferInfo
来获取有关控制台的元数据,如宽度和高度。