2016-05-30 14:59 GMT+02:00 Nicolai Hess <[email protected]>: > > > 2016-05-19 8:56 GMT+02:00 Nicolai Hess <[email protected]>: > >> >> >> 2016-04-25 10:17 GMT+02:00 Nicolai Hess <[email protected]>: >> >>> >>> >>> 2016-04-25 9:28 GMT+02:00 Esteban Lorenzano <[email protected]>: >>> >>>> Hi Nicolai, >>>> >>>> On 25 Apr 2016, at 09:14, Nicolai Hess <[email protected]> wrote: >>>> >>>> >>>> >>>> 2016-04-24 15:26 GMT+02:00 Torsten Bergmann <[email protected]>: >>>> >>>>> Hi Nicolai, >>>>> >>>>> missed this thread - sorry. To my knowledge there was a call in NB for >>>>> CreateWindow >>>>> but there was no example in opening a new window. For X-Windows there >>>>> was an example >>>>> if I remember correctly. >>>>> >>>> >>>> Hi Torsten, >>>> >>>> yes there is an "example" in NBOpenGL. On Windows, it registers and >>>> creates window for getting an opengl context. >>>> The code and classes for registering and creating a window are similiar >>>> to what is now in your os-windows. >>>> I needed to define some more pool variables for some style attributes, >>>> all that is working. >>>> What did not work is storing the hInstance attribute in the WndClass >>>> struct. >>>> >>>> >>>> what and how it does not work? >>>> can you paste the code? >>>> >>> >>> >>> Sure. >>> Load stable version of Torstens OSWindows. >>> Change WinProcess class>>getVMModuleHandle (it has to use HINSTANCE >>> instead of HMODULE (or just define a new pool variable HMODULE in WinTypes)) >>> >>> getVMModuleHandle >>> "The GetModuleHandle function retrieves a module handle for the >>> specified module if the file has been mapped into the address space of the >>> calling process." >>> >>> ^ self ffiCall: #( HINSTANCE GetModuleHandleA (0)) module: #Kernel32 >>> >>> >>> Now create a new WinWndClassEx and set the hInstance field: >>> >>> |hInst wndClass| >>> hInst := WinProcess getVMModuleHandle. >>> wndClass := WinWndClassEx new. >>> wndClass hInstance: hInst. >>> >>> >>> -> Message not understood SmallInteger>>isExternalAddress >>> >>> >>> The equivalent code with NB that was working: >>> >>> |hInst wndClass| >>> hInst := NativeBoostWin32 getVMModuleHandle. >>> wndClass := NBWndClassEx new. >>> wndClass hInstance: hInst. >>> wndClass >>> >>> >> Any more ideas? >> > > > From my observation, > > hInst := NativeBoostWin32 getVMModuleHandle. > > hInst is not considered an external object, or its handle is not an > ExternalAddress, although the object is a WinHandle that is a subclass > of FFIExernalReference :-( > > I am lost here, > any help appreciated. >
Please. (I do undestand that a winhandle is only a number and not a external memory. But how to handle this "handles" when passing to a external function ?) > > >> >> >>> >>> >>>> >>>> cheers! >>>> Esteban >>>> >>>> With NBOpenGL (and non-spur resp. NativeBoost) this works. >>>> With the new UnifiedFFI this gives an error from: >>>> >>>> pointerAt: byteOffset put: value >>>> "Store a pointer object at the given byte address" >>>> value isExternalAddress >>>> >>>> >>>> >>>>> >>>>> Basically I would like to add support for this into OS-Windows, yes. >>>>> Some parts are there and UFFI now has easy callbacks. Havent looked >>>>> at OSWindow yet - but I guess the goal is to create native windows as >>>>> well. >>>>> Also I would like to add more support in manipulating/quering other >>>>> external windows (which can be done using the already built in support >>>>> for process and window handles). >>>>> >>>>> In Win32 to create a window one has to register a window class first >>>>> and >>>>> use the window class name afterwards in the CreateWindow API function. >>>>> >>>>> No time to look into this this week ... but can give a try afterwards. >>>>> The WNDCLASS/WNDCLASSEX structure needs to be wrapped, RegisterClass >>>>> called and CreateWindowEx with a callback for a function to process >>>>> window messages. >>>>> >>>>> Dont know how if this interferes with the VM's own processing loop ... >>>>> but we should give a try. If you catch me on Slack next week we can >>>>> try together. >>>>> >>>>> Bye >>>>> Torsten >>>>> >>>>> >>>>> Gesendet: Sonntag, 24. April 2016 um 12:17 Uhr >>>>> Von: "Nicolai Hess" <[email protected]> >>>>> An: "Pharo Development List" <[email protected]> >>>>> Betreff: Re: [Pharo-dev] OS-Windows and UnifiedFFI >>>>> >>>>> >>>>> >>>>> 2016-04-15 21:58 GMT+02:00 Nicolai Hess <[email protected]>: >>>>> >>>>> Hi Torsten, Esteban, >>>>> I try to use OS-Windows (not OSWindow :) ) with latest spur VM and >>>>> UnifiedFFI.As far as I can see, you (Torsten) already ported some parts to >>>>> UnifiedFFI - great, thanks! >>>>> I now try to open a new window withWinWindow>>createWindowEx ....as I >>>>> took this example originally from NBOpenGL, it seems I have to define >>>>> a Window Class first, with >>>>> WinWndClassEx >>>>> This seems to work in the old NBOpenGL/NBWin32 code but not with >>>>> OS-Windows >>>>> WinWndClassEx >>>>> first, NBOpenGL uses >>>>> NativeBoostWin32 getVMModuleHandle for an HModule instance >>>>> there is a similar call in OS-Windows, WinProcess getVMModuleHandle >>>>> (I needed to define a missing type, HMODULE, but that works). >>>>> >>>>> What does not work is this part: >>>>> >>>>> | hInst wndClass | >>>>> hInst := WinProcess getVMModuleHandle. >>>>> wndClass := WinWndClassEx new. >>>>> wndClass hInstance: hInst. >>>>> >>>>> FF complains about >>>>> pointerAt: byteOffset put: value >>>>> "Store a pointer object at the given byte address" >>>>> value isExternalAddress >>>>> >>>>> here value is not a handle, but a small integer, and it does not >>>>> define isExternalAddress >>>>> >>>>> I tried to put the handle instead of the handles value, but this does >>>>> not work either. >>>>> >>>>> Any Idea what is missing here, I need a way to store the HMODULE handle >>>>> in the structure of the WinWNdClassEx >>>>> >>>>> Thanks in advance. >>>>> >>>>> Anyone? >>>>> >>>>> >>>> >>>> >>> >> >
