私はクロス プラットフォーム アプリケーションを作成しています。そのために、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 プロジェクトにリンクするにはどうすればよいですか?