GetConsoleScreenBufferInfoEx 함수를 콘솔 응용 프로그램에서 호출하려고합니다. 중요한 경우 응용 프로그램은 64 비트 Windows 7에서 실행되는 32 비트 응용 프로그램입니다. 언어는 RealBasic입니다.GetConsoleScreenBufferInfoEx가 잘못된 매개 변수로 인해 실패합니다.
나는 내가 제대로 모든 구조를 정의한 생각하고, 버퍼 출력 핸들이 호출되고 다른 모든 API 함수를 작동 :
Declare Function GetConsoleScreenBufferInfoEx Lib "Kernel32" (cHandle As Integer, ByRef info As CONSOLE_SCREEN_BUFFER_INFOEX) As Boolean
Declare Function GetLastError Lib "Kernel32"() As Integer
Declare Function GetStdHandle Lib "Kernel32" (hIOStreamType As Integer) As Integer
Const STD_OUTPUT_HANDLE = -11
Dim stdHandle As Integer = GetStdHandle(STD_OUTPUT_HANDLE)
Dim err As Integer
Dim info As CONSOLE_SCREEN_BUFFER_INFOEX
If GetConsoleScreenBufferInfoEx(stdHandle, info) Then
Break
Else
err = GetLastError //Always 87, Invalid parameter
Break
End If
구조 :
Structure CONSOLE_SCREEN_BUFFER_INFOEX
cbSize As Integer
dwSize As COORD
CursorPosition As COORD
Attribute As UInt16
srWindow As SMALL_RECT
MaxWindowSize As COORD
PopupAttributes As UInt16
FullScreenSupported As Boolean
ColorTable(15) As UInt32
Structure COORD
X As UInt16
Y As UInt16
Structure SMALL_RECT
Left As UInt16
Top As UInt16
Right As UInt16
Bottom As UInt16
내가 갔어요 이 20 번 이상 아무것도 나에게 틀린 것처럼 보입니다. 전에 COORD 구조와 SMALL_RECT 구조를 여러 번 사용했기 때문에 번역 오류가 발생했다고 생각하지 않습니다. 그러나 CONSOLE_SCREEN_BUFFER_INFOEX 구조체는 여기서 처음으로 사용되는 것을 보았습니다. 오류가 내 번역에 어딘가에 있다는 것을 느낍니다.
그래, 그렇지만 ** 크기를 하드 코드하지 마라 **! 그것이 바로 컴파일러입니다. –
흥미롭게도, 나는 이것을 이미 시도했지만 크기를 하드 코딩하지 않았다. '96' (하드 코딩 된)을 사용하면 함수가 성공합니다. 구조체의 모든 멤버를 추가하면 정의한대로 크기는 ** 93 **입니다. 따라서 어딘가에 구조 정의에 오류가있는 것으로 보입니다. –
@Amazed - 구조적 정렬로 인한 오류는 없습니다 - http://msdn.microsoft.com/en-us/library/71kf49f1%28v=vs.80%29.aspx – shf301