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

Reply via email to