RE: [rt.cpan.org #55660] [PATCH] Partial win64 support for Win32::API

[email protected] ("Stephen Bennett via RT")
Newsgroups perl.libwin32
Message-ID <[email protected]>
Fri Jul 09 05:26:39 2010: Request 55660 was acted upon.
Transaction: Correspondence added by [email protected]
       Queue: Win32-API
     Subject: RE: [rt.cpan.org #55660] [PATCH] Partial win64 support for Win32::API 
   Broken in: (no value)
    Severity: (no value)
       Owner: COSIMO
  Requestors: [email protected]
      Status: open
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=55660 >


Another two patches: First, don't build or test the Callback module on x86_64, since it doesn't work. Second, add support for the DWORD_PTR type, which is different sizes on 32- and 64-bit Windows.

A patch I'm about to write for Win32::SystemInfo needs this second change, even if nothing else does.

The second patch again includes rebuilt DLLs; somebody may want to check these and see if they suffer from the same mangling that my previous attempt did.

Accelrys Limited (http://accelrys.com)
Registered office: 334 Cambridge Science Park, Cambridge, CB4 0WN, UK
Registered in England: 2326316
0001-Don-t-build-or-test-Callback-module-on-x64_64-it-doe.patch (application/octet-stream, 2 KB)
From 55ffe91ab75d37a150fc396dbabbba2dfac19e03 Mon Sep 17 00:00:00 2001
From: Stephen Bennett <[email protected]>
Date: Fri, 9 Jul 2010 08:57:18 +0100
Subject: [PATCH 1/2] Don't build or test Callback module on x64_64; it doesn't work.

---
 Callback/Makefile.PL |   30 ++++++++++++++++++++----------
 Makefile.PL          |    4 +++-
 2 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/Callback/Makefile.PL b/Callback/Makefile.PL
index 1c11363..0e4c923 100644
--- a/Callback/Makefile.PL
+++ b/Callback/Makefile.PL
@@ -1,12 +1,22 @@
+
 # $Id: Makefile.PL,v 1.0 2001/10/30 13:57:31 dada Exp $
 
-use ExtUtils::MakeMaker;
-WriteMakefile(
-    'NAME'	=> 'Win32::API::Callback',
-    ($] < 5.005 ? () : (
-		'AUTHOR'        	=> 'Aldo Calpini <[email protected]>',
-		'ABSTRACT'      	=> 'Perl Win32 API Import Facility',
-    )),
-    'VERSION_FROM' => '../API.pm',
-    'dist'	=> {COMPRESS => 'gzip -9f', SUFFIX => 'gz'},
-);
+use ExtUtils::MakeMaker qw/WriteEmptyMakefile/;
+
+# Must be a better way to do this, surely...
+use Config;
+my $is_64bit_build = ($Config{ptrsize} == 8);
+
+if ($is_64bit_build) {
+    WriteEmptyMakefile();
+} else {
+    WriteMakefile(
+        'NAME'	=> 'Win32::API::Callback',
+        ($] < 5.005 ? () : (
+                'AUTHOR'        	=> 'Aldo Calpini <[email protected]>',
+                'ABSTRACT'      	=> 'Perl Win32 API Import Facility',
+        )),
+        'VERSION_FROM' => '../API.pm',
+        'dist'	=> {COMPRESS => 'gzip -9f', SUFFIX => 'gz'},
+    );
+}
diff --git a/Makefile.PL b/Makefile.PL
index 1ca78f3..75ea6a1 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -21,8 +21,10 @@ WriteMakefile(
         'API.pm'      => '$(INST_LIBDIR)/API.pm',
         'Type.pm'     => '$(INST_LIBDIR)/API/Type.pm',
         'Struct.pm'   => '$(INST_LIBDIR)/API/Struct.pm',
-        'Callback.pm' => '$(INST_LIBDIR)/API/Callback.pm',
         'Test.pm'     => '$(INST_LIBDIR)/API/Test.pm',
+        $is_64bit_build ? undef : (
+            'Callback.pm' => '$(INST_LIBDIR)/API/Callback.pm',
+        ),
 	},
 
     'VERSION_FROM' => 'API.pm',
-- 
1.7.1
0002-Add-support-for-DWORD_PTR-type-in-function-arguments.patch (application/octet-stream, 48.9 KB)
From 43ee5176a7607c14658a7393409387f2d594bb36 Mon Sep 17 00:00:00 2001
From: Stephen Bennett <[email protected]>
Date: Fri, 9 Jul 2010 09:09:21 +0100
Subject: [PATCH 2/2] Add support for DWORD_PTR type in function arguments and structs

---
 API_test.dll                  |  Bin 68608 -> 69120 bytes
 API_test64.dll                |  Bin 71680 -> 72192 bytes
 Type.pm                       |   14 +++++++++++++-
 api-test/API_test.cpp         |    8 ++++++--
 api-test/API_test.h           |    1 +
 api-test/Release/API_test.dll |  Bin 68608 -> 69120 bytes
 api-test/Release/API_test.lib |  Bin 4912 -> 4912 bytes
 t/01_Struct.t                 |   21 +++++++++++++++++++--
 8 files changed, 39 insertions(+), 5 deletions(-)
 mode change 100644 => 100755 API_test.dll
 mode change 100644 => 100755 api-test/API_test.cpp
 mode change 100644 => 100755 api-test/Release/API_test.dll
 mode change 100644 => 100755 api-test/Release/API_test.lib

diff --git a/API_test.dll b/API_test.dll
old mode 100644
new mode 100755
index a45cec55418dfc9349445c880c2fced1a96315f7..1cb36c6bd44a3afd0fe35f34de76b27669396da3
GIT binary patch
delta 5969
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

delta 5901
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

diff --git a/API_test64.dll b/API_test64.dll
index e8cb055c8bd7e136c755d2918b41c0a6335a609c..4350019a814f30bcc1acbf7b94a012a7aea810bf 100755
GIT binary patch
delta 11934
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

delta 11926
zcmeHNd0dp$yFX`OWSe0?96<JE2t*(R7X&eoL0@n*_uUjV+(=0WGdIwIbbKAtPNkOp
z(zH^uw8lLbP!m*AL@i58G_5g8Q7JLa_kPd3FLr<Tem?h~`{%v$`8@M|wzECwIom+l
zF4wZ1uB#fNqK>`amnfem5*6X4@*w0W6oX`Cb0AaEB-QLfmO_&}h#MtlO2`5>m6mpG
zsDh6Vi2J+B{;l5;gp5y`HL1W{K!`aG+6GWO=mZN>#nL9$8{h712EN;}xAEQ1epuB&
zRo7K)gKIGTiXC(vRyspPNa|%le4-0C5@OWtaT9FXzt0gOo_7p_O*$q>)s{zrb8bNY
z74#<YgdkpYbcIdyhwek@9C47quLgfl=hNT4P|z(p<!H;b;xHdrrgJY<t6WiU)<D_+
z9Em25-!WJSJ>emUV+_fHSY${OM6)4FupEyVck63*TpdBbV>i{&rH=bgBni&zozCYS
zHz0~Gf;is?&E~k@(~VTW3e!5cOa<Q4`R2HHJbJE0th2f}`pOLnPJ>ThrITH_RvgSb
z83v0Z<{$Y<9b`S^vge37QFmB3%JJBR5Z&PbIG=*iC{{ZDM8IKkT!#grTGmH`cggvE
zDCQi`0E{AQ+_Bn!|6~moEWbqvVwHGGszYrz7<KDhs{0#dZ0Zee0IT-lV-9MStYorM
z!zHWw4{o!mgPcnB9a$oNPTO5s@|SImvNWKL({@vqj;fu~RY>UBt=W<!p?_?b+Y#@P
zl#<j+!E%xc-L-GB#qK@RzeY+58RyLYVp$DFRiQSvp`^s!QP7Fkg7B+5s^QT+$K4z(
zh&evuGN+q1w2l3t`)-O%+u=Dv-{qvU%^As*IIMk~yr&Nf@#>U#R!7OLPf)YtS}#Hx
zPgT^HbQjh8p{=OYt(=F>Ni|mWR><A;udsPueZm@D(Vkc*>8GJ3K|EbiY4%U8cSJmk
zgw^+FSG|S?JG{|Hx75m8U!!8nU(~F&{G}>MHi_CZ?0HR>&@B&;IxSYCA;R*AmUOA8
zEa`;QPOZ-qYaJ`tMvWhx!gg!YX`;PJv!2qmcAIw%rQfn)KHF4&8m97nffm^dd|TSk
z*=$r`BVB6m-To1!k65qZGf@-6G5zK+OzbFdjzf8fTBX_h08ffM@oPz+!%{*rP}_`<
z54~Ug1+yS0gs3*L$k3?L4q+%2*TESiH3lM}dj{J8cMR1Us^La2+33*9Mz?)IsJd}(
z>Pf+-_d<n&wH*~KN0S9hmAhbRq-GCH(*bxl-ps}H+Vm<o<=O<7Jh8@P)6eyy=vbvt
z)uOgs3ui||bGzO^rV+E+;VbYEYkTsREXU(+eHcqfZEOC1haryn84elW%}Pf?Hn7aF
z9`rn$7nT_L;cn=$gh%t_N4m$M)pIww@2Oec;5(GngmtHbnJPR^6~CJ$gb(xG^N5fK
zIe{9)sbr$b7PHOH!hfQ47<(mhU3^HrB<U&+pjQZkBONhCg==mTlATd)j<d8pF-Myw
zR+?<u`z$>wiq^5QQT3Ft<mez8!TLrwtFX$l4Si^>-D>cq^b7mDF;oS&_hLs;8*7P;
zq!aByaeFBpZLjZ8qEe~vu)GAL%54jKJz;(Nz>l#}o)j-h`sct2Hj_b+^a)@wHJXac
zCGIvs<!H|43Fr;&fdE%hDTp<azJ<M**nu8quO}AMv2P>|r8C*Eq;QOTPExf0vzIYz
zu7ahqoi)(WMvLv$rVqHxb|g)wM_KT*qr!%NkH%7u3)XT&F<-ReT`|v9unjQ`kn~<3
z+S#+GDc!@ybxP?z{|ctdC{$cFhcsDSq!Mh->TZ{K5fe7mj2cX(PdhHE2f|aZF5Tyh
zq&kP4>SPMYyambf=t)UTwK@qr&s0fY#u8J)LtUTB{Xal=FIXNuE@>x-SUS~e2b-Fb
zuIlhD`!FS*_G5J^x&H5OBqZaQuKX8XKYAJ=o|W{oSjW`!m`Eu#o;KR!JC{*?$^|Tj
zj9Rm|!v`l^qZ{Ts`~o}DC4{E2D_w#jXCYU_9CxewB`2e?s;6+~TPvzG+0+4tSwPnr
zJ(hk;NRx#~CB8_~c@TJ&YDb)ok1=$r)9OO^BecYEKLzb{w6sVi&!Dl;^Q@|Cu0FFF
zrjmC1|Hd}sxQp*<b!;;W?v_ODEWcYl9nV73lIS^RO53W6{f0eA+eDYJce_`pG#6P^
zdNSr|aC(Z$?Hjf<J-Lhe9V`wkLMi6aI&jE)Ddr*PQY()+*MO+4zlcCTl+0R5e+L$e
zwvzpp9*x-fWF*iHEHlHX^18?@8Qp#2U>3E%B1~e7q*twDwHc9Jk3e*8eLdH5rgiIU
z#z`pYqqxq}*Ilx@G`cyqd+@WJNB;ne?s0&YvLAb-&|2o3`J88u^T?JUq{w+TDl<FE
z7b5SJ0r^v+lk|~mc+-#Sc@vjX>m~hMb|^F1O?sOUt9n0c&WsFO<1}Iq_J<O?TUcs6
zUzfFyc}M<YsXcRihMh+F)UO0<ZlF=r2mZib>)C-WWIKBXCKyo&%T|*sUNl-0Paq>3
zgC%_%XyLgRqNQc7QD^+dXw`3J%{||w3z+q}kLd;0Da%0jvSC@z)5+|ktQGWomYUs*
zE@gAFKgA>&dhJmKy}_>ZD#ZHE$$3i^+!-0b2hjO-=TZ%D40qrP!PoIUc0V_#{WMI+
z9A}DNS&7DN?>lgi8#6)&vFCeFXnzOMo)g7GSnzMwZ`rBdFSVa4ThB=P%Qjy2UrO15
zY(Sqrs?d{cU7x5B>uSD|Cc*)`xVb&{tjW+gw}xTt+dj|GZtO{)cRNi(|A_dVIS@PQ
zIPi{?P-j@(#nU*_xS|C6A4=Ernrzxn*eM~{z0@gWma*T3U_;JzRACN>F&&)as}N@e
zI_&qUC$nt>RLGC(EFmvD_ccr%)s;Vnd$oEN7r+^p#Y_fUaamV!79v*DmTRb`<6R!E
zCIKg9G6tY4e_u9Q*cW-jeN(y1o+f8RQ6l6T3(D^rJZXiqi@5;DL98hBx<FP9V$<`(
zX(1Ey!>Gu%<*&i%*{g3SdX1U;cJ#FUfX!U2wQ9@Q*1kR3_JJs<i5GUoj7zhQiP{wQ
zpl>#9X5CF;p68Gw*)GSe>KayHGPUQsAFf{+#}<?~>cr3@h<r!sGMSw)#nUnDu4xAS
znvL(568ObZKDZ_U+kiPg4>_3YoQq9tTfZ@GQP__qeKOPb??HcJ`TZm4JvP0+fxgF9
z^-uDtK&_-i?da-Eq0r&%O#f`}Pis*hX0}ogLp^F)=<`#8-{*Ocwb1QPjNKCRIz%kX
zSOnY3Has7xeFTN$$sbPRZTp$$8)?_&-^o>H+~ncP?0gEN+lN~Y&KyDf_JsNwUWcSF
zxA2-n-@=Y8STk?4I|G+{r=EnbbUL-tXbp`%$(9c4JUkD@b5n2RiC401W`im_qqZbP
z(%YBt!k6+gj+-^r>PYzTd2fuA^bZ&F<?aU!mYvRc#;SGW{6i|Aw|N;?O7xO`HfuY0
z2z{GP9-NUf3MH~Lj+b}|;u(kjo+Rao%^0$zuYy4kPc+WXIAiue!@3F+HUvq(kzE*^
z6*>aeTLiN68F3zwcc|TY0hH{)It@wo=!-1?0WiMJZVQ3zzz|QiVu;owTGocNYQsDZ
zmch@ePOM?qhD1g$ha_LQaYZ@iyljZtKdO1iO1YyY<`)(-v^U+)iiR$AkNJ`hH~LHV
zXy`L;4{)Op)qmLIhI!D^cfa7ylMKm3IFj<g)x>ojA@hAocu<Gd%3*Gt!w>&tNk488
zZ2ZL{=}lmbh-~U*NxyHwKYRjrfp=P~(GLm}%A}d_=-S5vBT3LiUlR7EqB*v6xVOd|
zjpRKzZ^BLQ3wCOFPw(l+Fipb5?@D}dcn`Pxk7%ISMIVgpq}sfLC5>*+az@>v8|;ar
zce~MF*-sPdRP8^q@1EF2MSHQv7sq-Vu*EH$YMS^Hij%L{u)>bdoIg%TzNl%y^$^|v
zdIlef_OPtH=7_n<Cn)qY`^SZ`)c0RF8+5kU&<E4RJE&p~yE-|XALWyCRX)d9?<v!;
zIe$JSGBAG^AFZZFuzERu4R&rmi8x^_?AIv+qwnHUB-j$;xACSP31T;);!kt1rPQ68
z^~fPfPm0(JQ)6)_er;-;ZV~r(LF%J6DP}D@G&Ne)(ax?<jZwvX%si$obn6WdNngWk
z(>hW!+du7DI*Hwy7VaH!n2_1e2ow25IPkFDfBH%qwCo^~`C2%?-3rrBju2clM;rM&
zmu$8lF8Y&Ff$g3VuJS2l-^?)MrP+68N8K<S<nqzwZWOgOtYT(VYQ<DOv(@}G2rA@v
z9J9MMbJY%{L{~{4@gg^B7ekbft}{lfb~gKdW<G6TF~z$B<0m<b=uKk3@pw35RcG^>
zF0*^ZHkxZMd%0Q_vwMT{%01^CHUY7(yO5#%MAl4_H9pX6WJTt<m&#;)2U#Bh{Tx{n
zAZy~FDUvm6S%W*Ec7m+AU+1hp4Vn?M=9;X@f~LQ$IV)=fXpDARa@&Rez?$Yp;kx7Z
zYAzx^^3{w8_tE?imyZO?!a(d6ZxKGrLj$w<Bj*;|_3CE2osFFL0<Jgv=B2AVN3rI4
z>GTYHcK&m8C7U^afhuw%`+a_N&||b}607-1T{V)YNE3haBy?AwW$_F41;)dS_YXWI
z{p}I3!<cBve8T=(FtfuZ97*!xuedDejF+7CnD~}bz+L64W_DLkW^XL)9i$nK^<Lv>
zzf<D3q>GLbV4U}X`|RGrcshWEF3Rn2ZoTt_ETDuemL6kJy7G6xV`FMSPqGiS!zBTC
zP?zaUT+|`1itCi!`h<GVM)*tmcZcy6fLEnWy<r+Js(puDS=6CJF`ON<8qlazi9@Kz
zoZc{v=E|{LY18L#a@L*0l1fulnrUo8=?J=<eOVfWm%}%u-7yb7WzW$YY(QDI`zL%k
zS=H;=y0R>vi4Yt=@8@f`0n6FMZj~(yIlYxXInOw{LC+uSw!ZF;j!s^^h1nJ_N}P(O
z`NQrQesXw`^Hy!443lM;0&qUzMD0+Pwq&*Ymxwp&-^I=?X=m6W3tIq35Fuh+U?{$|
z5)5wGqHHT?9+qU<$kHu6-CbqX->l5?y0-^zFXA~Xc2iM}Cs=5CG`+;K%jb0a{XH~^
zj{Na&X!$Ko(#H>UZm;~|-WZe_KuBeY*M1x!i1;0LyS#ndL%hsC?^98`-QK>!Nbx{_
z;k8)mG5U41d9<T?I9s{&M>==YOUo#o&t_ORYrnx2WnFgkw=PFBG7q!x<sStFKw}iu
z27vgZ(WUAZs^$v673}KrO<{#1rhWO@?DGu|)*H%T3a*U7cbU<vQdIY28^kKryUXq4
zUTaU;0-M%zrd4ivx|O}Y^ar|P)5|NV>h+~;rgf9|uh?E&+pd3&MJ)d?s3TNpD-G~(
zjmN&m8xNmX@jo<PP{B5esqE6~5PHe}$7;K)zhN<-<=f*k8g=FKkh}}Eg00I;`{B1!
zT<H~d_np7!MfTgfA?<ed!*=Ft%%~~J%+0t^l7{Ski-oN3Mu)N?>j$f1=CiHqhpQ46
z*j4Z4dFUb+^0?<D@wFSOS;R(t)En=MjURO^T?>m~D>p1dK=8bEN0P>Hm8f3C!K%J9
zpG)P2Roua<Zo;Wqtv&&z2OiGV>Pm1tols!+1nyxpOacG7!WZLCoXFoI$tbs<J389b
zNK)!aNuLD0kZjYI_TqhO56P102`^IODLejHjYC)8l7L4#Z_9c6yKbNVaVM&ZC}5v$
zDO3fPG5@VE(0#0AYlq~OrG#`J*$$^=Q=X{N>E1jh=|`b3zYA|x@e8xrBdh#RUHKXa
zlD-=|vo&31C}p18j;WrFXJ@ws(H!<Gz8y^c$#bC&4Bvz+fyrpg#f?c*#h=Jyc+HZ2
z1uOXEe%n=XnDI-EZ{wO^YTSqew3-!eU!pQDVCO!KrdOHwr#<Of*6-6LbS$g;)IeL<
zAD^C~-P!Ta5@-*0_cOi!&(AmyUoRKD=ZqPDmL6(!m-HuD$c{{ZrkKP91|jwGt=FBe
zwK;6&j`nmjv+mf1W!iJ6KeA@%PD%soU%}32`M^03R|WBbQ1wKOb$x`*_<W2e-{9Qf
zJSDwPH2dcB58^jRV@8aIH2%Q$lk{VwoW1bCW_x?SBsJnRKP`yIu)~S$gD)1SJm;_o
zyPiH^UG3kf5+>Wdcm1UDwBVF1@xYGw0eiG(kjIf1<=5L;Hf(R#(&CrVoeKQ$%6C)#
zn3wcJ!+4JH!$McS0(pSiPr=}v)R#lSaKmhFKsRnIac;2doDOG@b>XN`(&uqMn7@+E
z6P}vgo#uGO{86E7kA7;uTg;1lDfXo>o5V|~_7?PL*c^%8{LqP4j{D7x5V@7{ycVna
z5PTZ>g>DyTyuo||2FqwWdwE|VWo-Grp{kf-c5PpnN?Xk6{t!%k*#3Ooz5@7n64g6_
zR_!+S%KomZpcmMV{V{Ftk0nH99w*pV80rutNxy^rygyfy7lf9PauJfgE9-XP89LMc
z!hu*7{g}OWFh?`7ed{#(2C|C>Bk&&m^I%Efq3L|;mpiBazDfKkuj(<TK5-kf9BN4(
z*cUbOU!{zO0XT(m4IqWs#<R?YI2Ve>z-W2+q(tKw>&nNh9mPI59Ft_mW{ugXz&3~_
zxfO*}x(dEO;QgU@-kM4lT4Gl7%J3r_dvZ9%y%u_u|C*&83G@5W-<eN-h4|$utI@Yw
z9Xgs#J#wFJVPh*-s@k_>zgH%B>!#rPHyxK{+%?^%u-K{?`U~q<)e*lOyjnF{J7hA<
z9fXPJkU%DOt?E@;&qg180pUJyG%h^9kT-YKa$UJ9){hWGS1eGIj}LC4Ll`|4Tv`^(
zpH?UFXdqceehNwY7(W!Vs?XqJfrC_#f9OHC4>=Y1RYk+YVQwSo&$o4sXZ?RO9N-3i
z2-iw6Cwvfq7~;#nRrqfG%RynGF1+0S?y*^v_F>*%WxFjj@kmK**jL||;z@uW5rW&S
z6J1p@`YUKqu!n*}6r7^q0tMG9xJSWL3jU~Ii-H;#x&A;I+ma|nk)&W2%XS2K%uuAc
ztiTaax>=ESDR@f31_hfGe5{}=e*ohXs9?N;X$s~mI7-1O3eHpT4F$KzSW1p6itiO{
zR?r)Nzu+H(f+-4SDL6{OX$qDp_>O|x6+En9oq|^s{MCtrF+GZ+4gP|{KS>JqRB(WT
zlN6kz;1UH_DY!wwJ<Ru10DGH8_&VZ98LzXhmyB7g;8cKz&skZjWs6UZi;0byjqD|4
zVrKH(nB=s%5#T3e#uRca$c&l9kude?zHI#IW%>nva#>RFpKx`gpWUbScw65dsEN1t
z3z9#&9j;;Q=8v)dty<qeLN0-Bo+ac;Ad9-1q^c`ogRbUt_}5i`4tuUH;gH^t9#dCD
z2>*H8*VC1Fc6KA4DQ${ds~VI^$R{Am)-?n>%Qb|Rwi>Il37OvuM!w(S<J(3>+N7wG
zTkU;&V`QM9R=cx-HcuPCkxiod5RwQ=ReXAZp9&h>TE@?n_@PsNDLQATP$r0+5C~}o
zwHETo!+ro7%wD<{%X|6uwFysSlra=nIXnl7n8)>hV$_500w5m68zWio>+^WIqt}xL
zI>P}ibyMNb!SCWqM2Ra#**dDdIG26}twIku`uemXK9f9%PiJ@HGe}d}>ZhAU$WqYf
zEc>U}D6Zw>Jv|#G%!Kg2VDir!kdq+)RmYb9l=QUIeseGykRLnw({SFis2lPm-iYGT
zoE!bSw6^on3PL8^2zmCLT;qT3?|#@0f%r%dv4=N;pO##K+j#gYLUR6d$qE0AbOUTV
zK;vNF!SZhA@TOPZboStjo6kJ$YzBUM$OSECw{AvrAMc;To*Ih}60#Arj%EHF@KkF#
zgc~PlCwuYd*r(b-M{vl1*0J|~9^R8rgbzCH8{kd?CTU4PXAKD$<X7igDW?J-(EBF|
zIS$&X457UrChI5`Vi8OErB{4wjGjM3$V^bR;<iPSW5vI3@YUR~Ix^`0w{aeh|D)Tu
z-Ek{H-M#g{MYiFO?mWG;3dKPl16l=Y!fl}v)P&qD1C0k&vVM00x^oNvYua9T`M6V3
z2fPAufbM}Ffg+$!0QCU%0SyC9w7+*}BK|Lg`n++^CvSbRyyO3`(LVBCwTnmK4Y@jZ
zdxt;wwxONv*B+0fzRADH+R8>5v)I5V-SBsI>yy1I&sJl~tu@mq4a+OPBRiETxIn?V
z3KlCkMZxh34p1;l!Om;WQTlwTt0EEwAK#X%Z&9#G!3G5{C|IjtJEh!lMLwwDE(NzJ
zxIw{H3YN(jMdm6Bvw~9;9H3y<nvJ-hmpYo|e!25yfzLig_K-!gOp!emx#_;_j|^~r
z_9?QjA}>>9WQp@LUXgKzJ3q;ajFX#xN=eH-xk9`VoS!;H#*4!FS*yswiacJC@z!yE
z(i9o5H0LK!k;4^v=Uut}2t}T&$dOKYBGS7_c8F3O8kES-RpdHFepQhx6?vW_?^NW+
zio8XUTX)~Jd$+pMaq7~_NAhyoi%_lo6UzzsIl{D^^T3;+OAiPsN2s1_hnawW1d!r|
z!u77e5`SEFpq~re0IK{;#w!7`565PNmjBNX$4-c95jxhnJtA#~unGls0S6+yoG$`?
z2HFR{1{fYnNINtZ0Zc$hlfiQwis%U7M*xHIDxU;C1gMI^|B-=r1qyihzX_h>51{Sf
z8-T9373_LYDl_R2cqI6t^+OyX2jPT^B{|hW9ziYeK8TO388|pz)(-(LR`_z@_aN?b
z1?bXI=3RjoK@F($5>T6fh=cb54ll(Q590{nR!|H0?ZEg%c{&n+zG;MLS}-zTc6W>(
zyb*X3)B}9Gbc7Pb8|FAf;W@qo;`OfwCS}NVCIkI42^oO0rR~7ffr=n-9N$x(0*>Ei
zfrtJQ5Z7z6o%;Y=K)f-IvyAdw?#d;^tGC>k2Dlh>1^%0XCqdl57PzPnA&;Ri1G);B
ze;#%)Bo4%T%5iKSM)?q(0safb^&5bZ`7&<+7CevnhR-D6U!WD>9|N-o$OA9}MTK7h
zd}|=00H3wMi=a3p;H80>f8!uIEF7yr+u>9L>^E5E2LKm>cqht$`xX8muwLPR1BMU5
zeF$YEfFnVCU}Jz@xCC=v1AKcJA_$*dz~JGivlNwvfbkfGb&3#afUkgffw{nsN6T}(
z1^CKXLek(f7dYbu%rp36VAOa-0lWb?2IOoQ_@=^hYyd5Q5635558kx^^Itzf9{mO2
zT@W`k13$(dR1Url*ng57(gDEA7vT>*M+b=ebNsasa}EAC;O)sW-!dH!iXwR#7Xi<L
zcog~V@^=u*mXangCtt!f@^2&v@Pio$KPuV`oHUb=3%s#n+!a9%@H<~dM?p>Cn}M5W
zVJRV697AWz$ru5g4C0MV0gf@_kpiD7z<Z!F@Xf$iN-+O?*IQMBu+BlqVBmNV#KXw3
z<15GmRFnXmpzxD`cjuzRydt3Me1sM}$3PJGj{q)Th>k+P0;pdE8<H*%s47E(gLf?j
zV*>GP<akXn+yK6`SPoq=Fn5W}?<+?_RUi-GuK})Jik%Joo51{K^5_QuB@mA&u@Z6~
z#JAfEz=t9s%fLSdKDPq%&*v`-%n}d}S2@sX!%~6M3g9LX_t^}r2Gv4e1H7T=eO6+v
zufn`TzaDrF6oQ7Y0KHesb@~8BP!H%g05`3{V8L%*gZcmXJz3ZS-1rgJJU0NnzCdTd
zYk<S-glqvn0(cF?M|J}^Y8R#m{21VYFEIt+4+4Kbh|oSk=z%VWu`7ai1+D{CVmj6X
z&mTd4J;D56025m&_cRW;?I^;D0^5OCKzuG8z@%d`pA0m7g-*bSqZ!0~IO<OzI?x9K
zyVfAn!KVS6LA+s(np21t^c-_a@x{Y#1dce3f|86UYmpP+F96HFM(DtEbUh<C#&H|S
z#C?Fev-~u}N&xl+@hK|?9tM?RYAS*JH;FN5m?Qt)APpTV<qZFkfD0V?yPoqLO$t94
zSfubAS1LSzhJUW`9QnhVm*v=`@P7gQ&dGX?{He@+IO6e}?-cken7?#+?>H_7aVL)J
x6g@}&)Z{)K`FoP{92-Dsd#l>gfiAw6HZ^Q=Y$8nvFw%d+hg<eW`_ms>{sTl_Rtf+B

diff --git a/Type.pm b/Type.pm
index da17a57..c0f5170 100644
--- a/Type.pm
+++ b/Type.pm
@@ -17,6 +17,7 @@ package Win32::API::Type;
 $VERSION = '0.60';
 
 use Carp;
+use Config;
 
 require Exporter;       # to export the constants to the main:: space
 require DynaLoader;     # to dynuhlode the module.
@@ -51,10 +52,16 @@ foreach (<DATA>) {
     if($section eq 'TYPE') {
         my($name, $packing) = split(/\s+/);
         # DEBUG "(PM)Type::INIT: Known('$name') => '$packing'\n";
+        if ($packing eq '_P') {
+            $packing = pointer_pack_type();
+        }
         $Known{$name} = $packing;
     } elsif($section eq 'PACKSIZE') {
         my($packing, $size) = split(/\s+/);
         # DEBUG "(PM)Type::INIT: PackSize('$packing') => '$size'\n";
+        if ($size eq '_P') {
+            $size = $Config{ptrsize};
+        }
         $PackSize{$packing} = $size;
     } elsif($section eq 'MODIFIER') {
         my($modifier, $mapto) = split(/\s+/, $_, 2);
@@ -108,6 +115,10 @@ sub is_known {
     }
 }
 
+sub pointer_pack_type {
+    return $Config{ptrsize} == 8 ? 'Q' : 'L';
+}
+
 sub sizeof {
     my $self = shift;
     my $type = shift;
@@ -297,6 +308,7 @@ COLORREF				L
 DWORD                   L
 DWORD32                 L
 DWORD64                 Q
+DWORD_PTR               _P
 FLOAT                   f
 HACCEL                  L
 HANDLE                  L
@@ -396,7 +408,7 @@ q   8
 Q   8
 s   2
 S   2
-p   4
+p   _P
 
 [MODIFIER]
 unsigned    int=I long=L short=S char=C
diff --git a/api-test/API_test.cpp b/api-test/API_test.cpp
old mode 100644
new mode 100755
index 8fd9248..c9c4fbc
--- a/api-test/API_test.cpp
+++ b/api-test/API_test.cpp
@@ -88,10 +88,11 @@ API_TEST_API void __stdcall dump_struct(const char *name, simple_struct *x) {
 	printf("dump_struct: [%s at 0x%08x] ", name, x);
 	printf("a=%d ", x->a);
 	printf("b=%f ", x->b);
-	printf("c=0x%08x ", x->c);
+	printf("c=0x%p ", x->c);
 	if(x->c != NULL) {
-		printf("'%s'", x->c);
+		printf("'%s' ", x->c);
 	}
+	printf("d=0x%p ", x->d);
 	printf("\n"); 
 
 }
@@ -104,12 +105,14 @@ API_TEST_API int __stdcall mangle_simple_struct(simple_struct *x) {
 	mine.a = 5;
 	mine.b = 2.5;
 	mine.c = NULL;
+	mine.d = 0x12345678;
 
 	dump_struct("mine", &mine);
 	dump_struct("yours", x);
 
 	x->a /= 2;
 	x->b *= 2;
+	x->d = ~x->d;
 
 /*	tmp = (char *) malloc(strlen(x->c)); */
 	tmp = x->c;
@@ -123,6 +126,7 @@ API_TEST_API int __stdcall mangle_simple_struct(simple_struct *x) {
 		tmp[0] = toupper(tmp[0]);
 		tmp++;
 	}
+	printf("x.d=0x%08x\n", x->d);
 	return 1;
 }
 
diff --git a/api-test/API_test.h b/api-test/API_test.h
index 30ff440..ca4cdb2 100644
--- a/api-test/API_test.h
+++ b/api-test/API_test.h
@@ -20,6 +20,7 @@ typedef struct _simple_struct {
 	int a;
 	double b;
 	char * c;
+	DWORD_PTR d;
 } simple_struct, LPsimple_struct;
 
 // typedef int callback_func(int);
diff --git a/api-test/Release/API_test.dll b/api-test/Release/API_test.dll
old mode 100644
new mode 100755
index a45cec55418dfc9349445c880c2fced1a96315f7..1cb36c6bd44a3afd0fe35f34de76b27669396da3
GIT binary patch
delta 5969
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

delta 5901
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

diff --git a/api-test/Release/API_test.lib b/api-test/Release/API_test.lib
old mode 100644
new mode 100755
index 227de0689f9e76464d4cdbac7579b593d10602bf..d6f43665b0762f163563062bee5ccf2cd8b82de0
GIT binary patch
delta 501
zcmdm>wn1%z6o<KmnVFHLq0!_E++rIoUNNHxY<6H#VnGp^+`u8g$#B!mhmVngfn)N2
zZnMqjISw)+s}Y~Po{OIqq-NLT-`w((A8|cHmR4f{Np1ect%RhjK|p-6HLoyOYH|>-
z146?CK`m~O22BPA1||lc$pWmhli%<vAQS-IJz0xS1gyv$sE8S;NQYH>@+*EMMIiGx
z^Fhr&#fM}*NJf(%D&xR!gKF?Beu%-gK!e$U2Fo%Vq8bdcT|+<w;&2B63xxIt0WFB=
zIsrR`=mSCV$=rg%VApB^4dnnDx}H&Pvb&%>LJ^9a<_IFW2^bm>L-~YUP}LU-LH*Dn
Ngl64Sn9Ls`69C^5gMI)2

delta 501
zcmdm>wn1%z6o;{qk)ff5g~{X#++rIoUNNHxY<6H#VnGp^+`u8gxrV>UlaG;sfn)N2
zZnMqjISw)+s}Y~Po{OIqq-NLT-`w((A8|cHmR4f{Np1ect%RhjK|p-6HLoyOYH|>-
z146?CK`m~O22BPA1||lc$pWmhli%<vAQS-IJz0xS1gyv$sE8S;NQYH>@+*EMMIiGx
z^Fhr&#fM}*NJf(%D&xR!gKF?Beu%-gK!e$U2Fo%Vq8bdcT|+<w;&2B63xxIt0WFB=
zIsrR`=mSCV$=rg%VApB^4dnnDx}H&Pvb&%>LJ^9a<_IFW2^bm>L-~YUP}LU-LH*Dn
Ngl64Sn9Ls`699LHgjN6m

diff --git a/t/01_Struct.t b/t/01_Struct.t
index 0f2cae8..45799c2 100644
--- a/t/01_Struct.t
+++ b/t/01_Struct.t
@@ -28,6 +28,7 @@ typedef Win32::API::Struct('simple_struct', qw(
 	int a;
 	double b;
 	LPSTR c;
+	DWORD_PTR d;
 ));
 
 my $simple_struct = Win32::API::Struct->new( 'simple_struct' );
@@ -37,6 +38,15 @@ $simple_struct->align('auto');
 $simple_struct->{a} = 5;
 $simple_struct->{b} = 2.5;
 $simple_struct->{c} = "test";
+$simple_struct->{d} = 0x12345678;
+
+my $mangled_d;
+
+if (Win32::API::Test::is_perl_64bit()) {
+    $mangled_d = 18446744073404131719; #0xffffffffedcba987; perl errors on hex constants that large, but for some reason not decimal ones
+} else {
+    $mangled_d = 0xedcba987;
+}
 
 $function = new Win32::API($test_dll, 'mangle_simple_struct', 'S', 'I');
 ok(defined($function), 'mangle_simple_struct() function');
@@ -44,10 +54,14 @@ diag('$^E=',$^E);
 
 $result = $function->Call( $simple_struct );
 
+#print "\n\n\na=$simple_struct->{a} b=$simple_struct->{b} c=$simple_struct->{c} d=$simple_struct->{d}\n\n\n";
+printf "\n\n\na=%s b=%s c=%s d=%08x\n\n\n", $simple_struct->{a}, $simple_struct->{b}, $simple_struct->{c}, $simple_struct->{d};
+
 ok(
 	$simple_struct->{a} == 2 &&
 	$simple_struct->{b} == 5 &&
-	$simple_struct->{c} eq 'TEST',
+	$simple_struct->{c} eq 'TEST' &&
+	$simple_struct->{d} eq $mangled_d,
 	'mangling of simple structures work'
 );
 
@@ -58,13 +72,16 @@ tied(%simple_struct)->align('auto');
 $simple_struct{a} = 5;
 $simple_struct{b} = 2.5;
 $simple_struct{c} = "test";
+$simple_struct{d} = $mangled_d;
 
+printf "\n\n\na=%s b=%s c=%s d=%08x\n\n\n", $simple_struct->{a}, $simple_struct->{b}, $simple_struct->{c}, $simple_struct->{d};
 $result = $function->Call( \%simple_struct );
 
 ok(
 	$simple_struct{a} == 2 &&
 	$simple_struct{b} == 5 &&
-	$simple_struct{c} eq 'TEST',
+	$simple_struct{c} eq 'TEST' &&
+	$simple_struct->{d} eq $mangled_d,
 	'tied interface works'
 );
 
-- 
1.7.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.