C-DynaLib
view release on metacpan or search on metacpan
README.win32 view on Meta::CPAN
Parse C::DynaLib::Struct('<<EOFC');
typedef struct _WNDCLASS { // wc
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS;
EOFC
# or define the pack types by yourself
Define C::DynaLib::Struct('WNDCLASS',
I => ['style'],
I => ['lpfnWndProc'],
i => ['cbClsExtra'],
i => ['cbWndExtra'],
I => ['hInstance'],
I => ['hIcon'],
I => ['hCursor'],
I => ['hbrBackground'],
p => ['lpszMenuName'],
p => ['lpszClassName'],
);
# The results of much sifting through C header files.
# These functions should be generated by parsing though
# <win32.h> also.
my $PostQuitMessage = $user32->DeclareSub("PostQuitMessage",
"i", # return type
"i"); # argument type(s)
t/03win32.t view on Meta::CPAN
#include <windows.h>
typedef struct _WNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS;
CCODE
}
Define C::DynaLib::Struct('WNDCLASS',
I => ['style'],
I => ['lpfnWndProc'],
i => ['cbClsExtra'],
i => ['cbWndExtra'],
I => ['hInstance'],
I => ['hIcon'],
I => ['hCursor'],
I => ['hbrBackground'],
p => ['lpszMenuName'],
p => ['lpszClassName'],
);
sub DeclareSubA {
my ($lib, $name, @args) = @_;
no strict 'refs';
if (DynaLoader::dl_find_symbol($lib->LibRef(),$name)) {
return $lib->DeclareSub($name, @args);
} elsif (DynaLoader::dl_find_symbol($lib->LibRef(),$name."A")) {
$name .= "A";
t/03win32.t view on Meta::CPAN
# FIXME: XP crashes with LoadIcon. Need Wide?
$rwc->hIcon(0);
$rwc->hCursor(0);
#$rwc->hbrBackground(&$GetStockObject(0)); # WHITE_BRUSH
$rwc->hbrBackground(0);
} else {
$rwc->hIcon(&$LoadIcon(0, 32512)); # IDI_APPLICATION
$rwc->hCursor(&$LoadCursor(0, 32512)); # IDI_ARROW
$rwc->hbrBackground(&$GetStockObject(0)); # WHITE_BRUSH
}
$rwc->lpszMenuName(0);
$rwc->lpszClassName("w32test");
ok ($rwc->lpszClassName, "rwc->lpszClassName");
if (($major > 5) or ($major == 5 and $minor >= 1)) {
ok 1;
exit;
} else {
# &$UnregisterClass( $rwc->lpszClassName, 0x00400000 );
unless (&$RegisterClass($wc)) {
diag "can't register window class. try again unregistering before\n";
( run in 0.653 second using v1.01-cache-2.11-cpan-49f99fa48dc )