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. > > >> >> >>> >>> 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? >>>> >>>> >>> >>> >> >
