if you send me the code, I can take a look.

On 24 Jun 2016, at 15:06, Nicolai Hess <nicolaihess@gmail.com> wrote:



2016-06-24 14:52 GMT+02:00 Esteban Lorenzano <estebanlm@gmail.com>:

On 24 Jun 2016, at 14:40, Nicolai Hess <nicolaihess@gmail.com> wrote:



2016-06-24 14:32 GMT+02:00 Esteban Lorenzano <estebanlm@gmail.com>:
��� and I enhanced the example to not induce to confusion anymore :)

Esteban

Sorry, I must be stupid, it still does not work ( and it actually looks the same as with the existing WinHandle type).

well, that I don���t know��� for me it works, I tested it in Win10 and it was fine. 

What was fine?
 
What exactly are you trying to do?

As I wrote, I try to get the vmmodule handle (WinProcess getVMModuleHandle) and assign it to the hInstance field of a WinWndClassEx,
getting the vm module handle works, (both, if I use the existing WinHandle type or (like you) a direct FFIConstantHandle).

But assigning this value to the hInstance field always gives a DNU
MessageNotUnderstood: SmallInteger>>isExternalAddress

I do understant that a WinHandle is not an external (memory) resource and has no external address.
I just don't undestand how to pass this type of arguments.
 

Esteban


 

On 24 Jun 2016, at 14:27, Nicolai Hess <nicolaihess@gmail.com> wrote:



2016-06-24 14:05 GMT+02:00 Esteban Lorenzano <estebanlm@gmail.com>:

On 24 Jun 2016, at 09:53, Nicolai Hess <nicolaihess@gmail.com> wrote:



I���m sorry��� I do not understand. This is solved in UFFI since some months, and Torsten���s OSWindow uses it. 

Sorry then it is my fault. I know that Torsten already ported OSWindow to UFFI, and that most things are already working. 

UFFI provides FFIConstantHandle type to deal with windows HANDLE types, as comment says: 

I represent a constant HANDLE, as described in  *Windows MSDN>https://msdn.microsoft.com/en-us/library/windows/desktop/ms724457(v=vs.85).aspx*

A ==HANDLE== is a special kind of external object who is accessed through numbers, therefore and ==ExternalAddress== is not appropriate to describe it (since they are constants and external addresses represents disposable spaces from memory).

Is not clear this is necessary outside Windows, but according to documentation they are somekind analogous to unix's File Descriptors (but with some remarkable diferences, as documented *here>http://lackingrhoticity.blogspot.fr/2015/05/passing-fds-handles-between-processes.html*.

Example: 
[[[
HWND := #FFIConstantHandle.
self ffiCall: #(HWND GetActiveWindow())
]]] 

is there anything I���m missing?

I don't know what else should I do, I already posted the example.
The code I provided just don't work (DNU on isExternalAddress, see other mail), and I have no idea how to make it work.
Yes, maybe I don't know enough about ffi for this type of the function argument passing.

the example is a simplification, you cannot put both definition and call in same method��� find attached a working example of what you want.


Thank you!
 





(actually I tried to port some NBOpenGL code to UFFI, for this I need to register a Window Class with WinWndClassEx (to create a gl context).
So if this *is* already working, I need to look what I have done wrong).

thanks for your response.
nicolai

 

Esteban