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 )