How can I generate a binding for winuser.h?
Jorn Vernee
jorn.vernee at oracle.com
Wed Mar 29 13:47:49 UTC 2023
Hello,
The error you're seeing is a parsing error in clang, which usually means
there is an issue with the provided headers.
Typically you can not include windows API headers directly, and you have
to include Windows.h instead. If I look at some of the functions in
winuser.h [1], that also seems to be the case for that header.
Filtering can be used to extract just the items in winuser.h. For
example, in powershell:
# find windows SDK header files, and create an array with -I arguments
for jextract
> $WinSDK = 'C:\Program Files (x86)\Windows
Kits\10\Include\10.0.19041.0'
> $WinIncludes = '-I', "$WinSDK\um", '-I', "$WinSDK\winrt", '-I',
"$WinSDK\ucrt", '-I', "$WinSDK\shared"
# dump all the includes in Windows.h to 'inc.conf'
> jextract --dump-includes inc.conf $WinIncludes"$WinSDK\um\Windows.h"
# filter 'inc.conf' for the entries found in 'winuser.h', write the
result to 'inc_winuser.conf'
> sls -Path inc.conf -Pattern 'winuser.h' | %{$_.Line} >
inc_winuser.conf
# extract with the filtered includes
> jextract --output out --source -t org.jextract
$WinIncludes'@inc_winuser.conf' "$WinSDK\um\Windows.h"
HTH,
Jorn
[1] https://learn.microsoft.com/en-us/windows/win32/api/winuser/
On 29/03/2023 14:22, Anivie wrote:
> I am trying to generate a java binding with winuser.h, I am use this
> command:jextract -t com.unix
> C:\SDK\Mingw64\x86_64-w64-mingw32\include\winuser.h -I
> C:\SDK\Mingw64\x86_64-w64-mingw32\include
> And then, I got this error:stdlib.h:388:47: error: expected ';' after
> top level declarator
> Is there any mistake in my command? How can I fix it?
More information about the jextract-dev
mailing list