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

Reply via email to