Re: Wierd error (PING ROB)
- Posted by Brian Broker <bkb at cnw.com> Feb 17, 2005
- 459 views
Pete Lomax wrote: > > > Some wierd thing, hSaveStdout is a constant, defined as you will see > below. But using this constant /*/broke/*/ working code... > > Bizarrely, calling c_func(xGetStdHandle..) inline works, but saving > this as a constant does not !!!!!!! > > I get the same results on 2.4 and 2.5(a)... > > }}} <eucode> > -- > -- odd thing with STD_OUTPUT_HANDLE/constants > -- > include dll.e > include machine.e > > constant > kernel32 = open_dll("kernel32.dll") > > constant > xGetStdHandle = define_c_func(kernel32, "GetStdHandle", > {C_LONG}, -- DWORD nStdHandle // input, output, or > error device > C_POINTER), -- HANDLE > > xGetConsoleScreenBufferInfo = define_c_func(kernel32, > "GetConsoleScreenBufferInfo", > {C_POINTER, -- HANDLE hConsoleOutput, // handle of > console screen buffer > C_POINTER}, -- PCONSOLE_SCREEN_BUFFER_INFO > lpConsoleScreenBufferInfo // address of screen buffer info. > C_INT) -- BOOL > > constant sizeofCSBI = 18 -- (trust me!) > constant pCSBI=allocate(sizeofCSBI) > constant STD_OUTPUT_HANDLE = #FFFFFFF5 -- (-11) > > constant hSaveStdout = c_func(xGetStdHandle,{STD_OUTPUT_HANDLE}) > > puts(1,"Hello\n") > ----!!!! FINE !!!! ----- > if not > > c_func(xGetConsoleScreenBufferInfo,{c_func(xGetStdHandle,{STD_OUTPUT_HANDLE}),pCSBI}) > then > ----!!!! BROKEN !!!! ----- > -- if not c_func(xGetConsoleScreenBufferInfo,{hSaveStdout,pCSBI}) > then > ?9/0 > end if > </eucode> {{{ I don't trust you... sizeofCSBI should be 22 I've got GetConsoleScreenBufferInfo wrapped in my Console lib. The lib is still not done but it's useable. If you'd like to take a look at it, let me know... -- Brian