2012-02-10 2 views
3

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 구조체는 여기서 처음으로 사용되는 것을 보았습니다. 오류가 내 번역에 어딘가에 있다는 것을 느낍니다.

답변

7

CONSOLE_SCREEN_BUFFER_INFOEX을 보내기 전에 cbSize 매개 변수를 설정해야합니다. GetConsoleScreenBufferInfoEx은 올바른 크기인지 그리고 잘못된 매개 변수를 반환하는지 확인합니다.

그래서 이전 GetConsoleScreenBufferInfoEx 추가로 전화 :

info.cbSize = GetConsoleScreenBufferInfoEx.Size

에 대한 계산을 처리해야 : 실제 기본 당신이 structure의 크기에 액세스 할 수 있도록 않습니다

info.cbSize = 96 

또는 더 나은 아직 당신.

+1

그래, 그렇지만 ** 크기를 하드 코드하지 마라 **! 그것이 바로 컴파일러입니다. –

+0

흥미롭게도, 나는 이것을 이미 시도했지만 크기를 하드 코딩하지 않았다. '96' (하드 코딩 된)을 사용하면 함수가 성공합니다. 구조체의 모든 멤버를 추가하면 정의한대로 크기는 ** 93 **입니다. 따라서 어딘가에 구조 정의에 오류가있는 것으로 보입니다. –

+1

@Amazed - 구조적 정렬로 인한 오류는 없습니다 - http://msdn.microsoft.com/en-us/library/71kf49f1%28v=vs.80%29.aspx – shf301

관련 문제