Andres, gracias por la aclaración, es verdad es un tanto peligroso, aún así es ampliamente usado, supongo que eso hace que a veces se informe cualquier error.
Lo mismo pasa, y es mucho mas gracioso, con Float invalidOperation cuando alguien interrumpe, realiza un calculo, no limpia los flags del coprocesador y en Smalltalk nos da un error como si hubiera una Float exception. Suele pasar bastante con los ocx. Saludos GallegO El 26 de agosto de 2010 16:03, Andres Valloud <[email protected]>escribió: > Como sabes si no hubo un process switch en Smalltalk a otro proceso con mas > prioridad que el tuyo, y que ese proceso no llamo tambien a GetLastError()? > Como sabes si la maquina virtual no llamo a GetLastError() por la suya para > procesar eventos de red despues de llamar a SomeFunction() pero antes de > volver a Smalltalk, por ejemplo? El problema basico es que hacer > > | returnValue errorCode | > returnValue := self callSomeFunction. > returnValue = 0 ifFalse: [^value]. > errorCode := self callGetLastError. > self functionFailedWith: errorCode > > no es atomico con respecto a process switches o a actividades de la maquina > virtual. Por lo tanto, en general es incorrecto (o por lo menos peligroso) > llamar a GetLastError() directamente desde un FFI. > > Andres. > > > 2010/8/26 GallegO <[email protected]> > > Andres: >> >> En la documentacion de GetLastError dice que es devuelve el ultimo error >> en el thread que llama a la funcion. Qué posibilidades ves que en un >> Smalltalk como Dolphin cambie el thread si la llamada a GetLastError se >> produce un statement mas abajo? >> >> Saludos >> GallegO >> >> El 25 de agosto de 2010 18:28, Andres Valloud >> <[email protected]>escribió: >> >> En general no se puede* llamar explicitamente a GetLastError() desde un >>> FFI porque puede suceder cualquier cosa entre las dos llamadas a funcion... >>> si tenes a mano la ultima version de VisualWorks, fijate el ultimo apendice >>> de la guia de DLLCC. Hay un monton de otras cosas que tampoco se pueden* >>> hacer. >>> >>> Andres. >>> >>> * por supuesto que se "puede", pero el problema es que no "funciona" >>> :)... >>> >>> 2010/8/25 Juan <[email protected]> >>> >>> Kiko >>>> Sera que se hizo otra llamada a otro mensaje que usa el SO? entonces te >>>> cambia el valor del >>>> getLastError? >>>> se me ocurren 2 cosas. >>>> 1) que lo setees si mal no recurdo setLastError: >>>> 2) que lo hagas dentro de un critical para q no te interrumpan >>>> el el scheduler. >>>> >>>> saludos >>>> MDC >>>> >>>> >>>> >>>> >>>> 2010/8/25 Jose Gregoris <[email protected]> >>>> >>>> Hola >>>>> >>>>> En un ejemplo de OpenGL que estoy haciendo , tengo un error medio raro >>>>> y no entiendo bien porque occurre. >>>>> Para mejor entendimiento deberán mirar la captura que adjunto. >>>>> El tema esta en este método: >>>>> >>>>> OpenGLLibrary>>createContext: aDCHandle >>>>> "The wglCreateContext function creates a new OpenGL rendering >>>>> context, >>>>> which is suitable for drawing on the device referenced by >>>>> hdc. >>>>> The rendering context has the same pixel format as the device >>>>> context.." >>>>> >>>>> | context error | >>>>> context := self wglCreateContext: aDCHandle. >>>>> error := KernelLibrary default getLastError. >>>>> context ifNil: [^self error: 'Can''t Create A GL Rendering Context. >>>>> Error: ' , error printString]. >>>>> ^context >>>>> >>>>> >>>>> Luego de llamar a #wglCreateContext: este retorna un contexto no >>>>> valido "nil" y luego chequeo si hay algun error para poder informar. >>>>> Pasa que ese chequeo retorna "0" como si no pasara nada, pero en >>>>> realidad algo paso por lo que fallo #wglCreateContext: >>>>> >>>>> Como se ve en la captura desde el debug intento de nuevo llamar a >>>>> getLastError y hay si me retorna un error !! >>>>> >>>>> No tengo idea de porque pasa esto y me gustaría saber :) >>>>> >>>>> Es un error que parese ser de la librería Kernel, pero no sé. >>>>> Alguna idea ? >>>>> >>>>> saludos kiko >>>>> >>>>> >>>>> >>>>> -- >>>>> To post to this group, send email to [email protected] >>>>> To unsubscribe from this group, send email to >>>>> [email protected]<clubsmalltalk%[email protected]> >>>>> >>>>> http://www.clubSmalltalk.org >>>> >>>> >>>> -- >>>> To post to this group, send email to [email protected] >>>> To unsubscribe from this group, send email to >>>> [email protected]<clubsmalltalk%[email protected]> >>>> >>>> http://www.clubSmalltalk.org >>>> >>> >>> -- >>> To post to this group, send email to [email protected] >>> To unsubscribe from this group, send email to >>> [email protected]<clubsmalltalk%[email protected]> >>> >>> http://www.clubSmalltalk.org >>> >> >> -- >> To post to this group, send email to [email protected] >> To unsubscribe from this group, send email to >> [email protected]<clubsmalltalk%[email protected]> >> >> http://www.clubSmalltalk.org >> > > -- > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected]<clubsmalltalk%[email protected]> > > http://www.clubSmalltalk.org > -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
