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 zcmeHtd0bTG+xNK#Mh0XU5JnaOS%y_1HWvgG1oWVjk{j+z8o5-W4*qZ*azGuAW7^$f zWo24wWu=ZKnhTo(>Q50hcg3_CLk&}N&GUTka}M_W-uLtV_5S%h^Z8u!y|#P1?(5zL zO1C+e?sQ(=9Cq$>cO$2KTDh>0_9|D7tA%2StTgyj6^U2fNu)_6-qq8Ea3;cWE9o?1 z?(SI)A5ReTcb5IzzC$=}V*KnWlT4F1t}GhbW>74so(8L;$e*+yzTM~>`1Yai;k%=K zzp9z2Iylkw&Yj48y4QJx`4bh#C12o$XS&Wg9G9c}!G*VJ|31NS!b!&x*u)xMtg}1` znR^}jgU}m=L%eX>Q3#vR5xOs-bBu%p{$22Y>O2Q&3VGe)!;Zd8D~#}jWe)R7YLm;G zOzu#QIKd@zjv!g<2Ssn@rIqW72hR&*4GFyPnxQ8zm<*Y`r8Z>3jazi5I)pr;r`6$R zzAnemvt&d{2gmtmqKF!(RO*c52t>h!7Y6&GKm9d->PD%HB+~@X5BLWs{?vK(*L11o zt%F&!gJ3!FP-wKeI0_JXXi}g-!NJNvvY1vVU;}Z3#gVAUW+;Adgd!A*(lpK#r`zA& zp}{=q_Itzj18g}$r9%ZXv)pz<Jz~xBY!S}ICs8G9zLeE)1@p#+n_mH64kOK+P;>O3 zPv%hGax;V%s)WO0Bg)jGjL=AbYWITq%2W8;)azXUR&4{5tm-CNNoD0lS$R-a21rWv z0a@a_r2<v5)KRwmC`<Y6B-{70RIQez?;xRTH|B_<hz`;+mjfO#gmB4~yrqHgsoE*@ zB~9;MA0v<Xv=gR|LTNolRIc`EN4R2*V^Sik#fcZxPn_YAnyoQ);)QHaVY%d{y`{D{ zXuc=pU21k4saH2hZT3zeoWt5*;?L{oO}E6jPj!U5@il68T<yzoEr-jSic<x(725Jj z-KzQMoLFyF&x4$*?@tG`?;rdlYfoqt^}Wy%FB~baG<8gFa)i8qEY}Cq@7fRVRN;X> zx+GWL_%|xHJSHZ!<*}+b!6<0IrJdco1(iHNT0OMp7(y&hNO8CF%Hl+<hvcR_;izLQ zo#pOLcv|k>i)ihY?&}CCv5)hpCuA3m^!!S7tvzk>98c2iiCz!ek!%|4*Fp;H9sQpW za)fs1bSx~nGp61YjM<F^=h&Brs8yOg_OOJ=6aFpgy{RfNjclg91HbUd`wg=oXN8~+ zq;~?t%#VUlDmq3A(rGQmitZU~`5Fw>8g!8v+snoZ#pqHIfT~+ck{fuN{=%=Upbz0K z)d{?%O2b=Ph{+Yxv;y8OzvN<iZTcoS<=S|sJfYrb)AQ{KI#$V7Jyct+cBXF!<#yls zH)=Gg9bP;OvDSmNWT}n5@kJEJ9c@eEa~NV*)?C`T*}agu+o(1;oou87g5yGqzlR>{ zd<@He<a{(*{p=U!dw6ya_(ssR!KoyiHU&qk9`B@2gGYEReZp}Mvi;l<r{c**Tf}_( z<j&U!iKP8QKZw0~LKJo7d(bO{!O;sbMTM{4=D4i1I#aae;WJaXadM^6rmdlFVPRxF zjSFico^OW-kObN({GRI4HR@&PPuAH-8N3KtVxJK~RPcH|YBU)~>!U(Rvi<j{U4(S8 zZ-^;YsZQUf{#|oaXExIbUDx#r-Hgq(K{zYwb>MiL(ZGxPr<>Tk7Q2^UDAw3`mE&F( z%fHLe?(uczDtVz^)YsE)aWP~Soe)<<;%H;saMFiH#&^cJ`^ATM6whPUoOw&7kJZo7 zPK!O+rvL3cHOJ2&Z_}3e(ZNx0;FD{4Ynh>lEn4A@kmt<Xh8glj{e{o%lV3PO$Wr=3 zVp8hBi<qt)zWjnIu+`!u7Gp<OyPRc3jM#b8>M@m`K1@`H!jrcytB@k8_NE^u8hy1l zAX%O~D~_mBKXY&#%T!UHPybHr9CYfr9J~SDJ!N_FwAhCiuypFw6*M)em+H|^v^Xi2 z1kv?LxgBSI#&Kyix-z6S0yWGKA{-a>ed&{=lbFck$+6@|`{U$NqF0^5Vn{n`@^E;1 zqFNWs_a7(eTipVQhHmW^5ZV{HB4lf<>I{i-x2k(G=8P3p8g1&|_R-(Ey^&sUhT~c- zoLKCIBpm>ORjGDF>)05BQYEVs*^SV0j=M={r;FvGSR9GQZZ*+0-E;NYdoUII?EV|u zjN=Zz>(meK(w6S=#6kmlG$DCz^@t~*(ZHTxsvexCbv-wdA#_G+x$5F6`e$ka<|({a zlIqN9TF@(@+vyLmIIsxCh$D<c-ir|plCH8wS_6W1!)XNik!aG2`U9|7w5#dfUg5}% z=3ZS%5!I&Us4kqML(@_{AFjo4wR;dI;i0H+T1(fZg?4`nqO|pS!1~YDcMqqesQ>eQ z=qv*@qSdLz#j(|uT?kn8SJ1m@d&mU(ZF&+}N3W*$adSV3YzaV$Y^1RnSz%Y3<W3oo zKgBvxf9E~c^bu%z;cRk~sOPCIBf;f3)K;~X)@FnTzbYBA2mku6w7Uf-H?ehj^eOAe zVd~U7+cWYA$|oP>t+{?Vg5GhFj_4hOwN~2Oud5Gg!m@SG6;9_^<K9C?wsaEpKcOmk zE`w-!Sdyd5`6<V$pGRwZze9|4RG-b{b4oG|WEqXj987x9xtS};SJWx1FDan?vcAD2 z-OKtx_4^vSwQnI7xOeuus!q<x05$;Ux1_b|>nL#GdchWQHLc0b_V0!1m@B2|)>UZS z_NfCWdrn$V813BeW&Z<+_S`TQ!o>fuZl)jhd)+@(wjLApU)xyOPn5EuG^Brj)vbCu zt$$eHv^8ucCBp%`xXB-TR)1)uy&;lr?jK29=&}AEB@RIUIN_X$T_gH{cO(T#Vbusn zM14F{6gRPZk$wZK$);UEKjb@U21`OlKHbN6GI;-tDomYWbOYx&7${Ys!+xLKkY&qP zAwRCtr+ilK2uvN(l|6-fow_d*z~wBD=mEC;g0B2HM69NgtEi>R9Tu)u9w%i22B0hZ zR5lK!OY#c5oS4fGtx`l$;$}1bJ+FJGl$BB!^#I3StSIz4QC5Y~v;mz-cRFT3Fd0MV z4|pG^XNQ4_WIN3n*u`z!C2Z!xQL8qe&KsEC!51R0=GtRdOglTfM$oEg-M}nTOI?k@ zZl57XvYcwI>a{e{X!K{hAFj7)H4DpHbV5)%M7E=J>p|Z$#*(hI%J>HPm?pfK<hNuQ z8(b@oZNM}j4>_1C&BYu#|HZK`e`328^&GwQVmh(YfI%Uonx+jhkk{$NLGhl$Q7c!h zc666gC@6}4GAPSq(NWZgnXTl7pmRs)twB>e&189xwb0`)jNKA30V0-V6oNg977Y&7 z9)ZH~?7n2&Z~tU)3+X=koLqI<FDzUc&WAC&3fyvV=<vdsL+ZbvK+lF*Sj|DNV7KP2 z8T;vhmsWT<HNaOql3bZ%4Z2%T3x=c=_`^Fl`FfskG0SE$sIt<I7AJ{%%Mw=jY+hQe z$-Pc}2gTUDw}guNhBw)AzXlDKoi68?ReOf<kBEHU=A~UM){FXV`ty)sq>%O)nwAuc z5?N`r#qD|Fm_z@kDCP<GFl14`1_oX@)G{aSn8_6l>&lJT5Jdef`uWhzplDccaFC_9 z2d>Ta4z-3AKuLE>h9zjaU}Hc440P78a5{FF*40T?Jbjn$=l$r4VZp8|OW|Tw|6ND7 z4+{++4XN#>9bF^cGX(9yIu@<L%+V6Di{2mBk63B?@MW6&xIYNmyL;%7;gK$NOi&-R zKOF8#%rkZ{=P8B+jz5sJ;Y!>GT_Ce9iht0E)`r2{GM63v38Mam#jvp#ji?U<n}eVx zUl8@n7yiRPT?7|+_iQs>gTjb1J&kyzRj`<dA~fM=`HEyTM@tJl+%Ip(`SswW5tqE} z^uvPQ9%(h0A%60?Vo#jgQTAU8nhAN4){RP3nZBdXM*CCm(Kkqu{qND=yO2H9{&J)0 z#uxVT$=y_>1O4%paUS=uLoJ$SoO}(%8*6D~VVB5_cz+HM+?#PTME5^_gN;PHN>*NV zL|kEW6SUa=ufize^#)D}ooy-lV4VC1s^~|*d$lt=#b3=;HCNM)Q>SBJesgN5U%*Z_ zTK9V1+TQVdCu!e_!{IWN?wR^hc$IWxihKMeYw8Iv^x(_?GIg?;HN>Px`iT0*88m)c z6t2S~rbX)pF>fbiJ!%sprc&FqaMhC?bjP#^)%{KM+_Xh59pNGB*V1v*yO11eo&Ewz zp}VJd_GsP5adRU1$?Oj7*k}KB`YIAIaxe1uYG-z_<!3aE<el8BTiCm}aie|JYkv{q zN6X*ntZIIRZhFH+zNDRIcF{$Chz>}nmL^BguBF3gh9$o;jm>NwI|zP%g<Wq<8f(VH z?~oGRMSbfOX4Jj}Q9iYf<yf`Z^sAWz$ToU^=J$S&Crd^2M&ZSYctm1BXR(^Trqx9@ zqPOSIs#8Ujua|Dyb8*S#g@GDAO}jwWOp!I7(9ELgrs&u6WqpjS4}rd)tnrmK(a@yJ z8nvv!^-r55Ywk8m_4kA(TGm{ZHJQ)^%bMe|hKI(-e!_IyiF`vVOTuu|xmJ>kh{w!J z3pqQQo!|0lU|HmcjRHqEQee1W7JJ|9re*U!CktuJ{PDOIE}!2^b$%4Bo!^UmLdE%g z$avak!9vxY^>p8Y@PMOe)hN`lLwe09mLjd}xzjaO{V9FCpu+Dl4jepv;34YwkAxk@ zI7`McdU)Z?m^m=Yi@*E=ugf_r)njD4Ng{KVtD2dr?m=H()Gy%T2(0&dhyON_U64*Y zMuL&90yVUHQ7j3ew-)8be6~(H948TudsBRhLFvjq1dlyw8#<b`&&LVfwW+U7r(+h! zM6Y2wWurc%UiumQMg0u4gI*@Wt#mpos+~@^E{=)GgtKFIGa3~uasH&w?FUmArX0tV zHhsWGsqS$4Y;lt6<}{jQ9!aKC!5n}`!zObo=Aqf#hwP*wrCFK<U!i8J`ZYSOG}AK~ zg5%fSZ0$B<IS10+rON|9!h*}g_S^${_D;7A)Hu3Gyt;&rdvkGIDw<|*x*Gi2(2em{ zZFd=Z$j}oYz1{?E1l25ALr*O6q2Dag7|e(}yCDD$AUK?Lp`qvoZb*ns#2DE&jGkMP zKz^idmfo6EpGfZirumk)JkH@NAe^vbBNfyqR?=IRaI%GZmCfz3?_;!vJ{<fHwA}0| z>L2GzJ1cvxw*+MPa$IF```tJ=5bOhVf0=&=8!PkAt5nb~wBIPpA$XR@FO4FuU2uUC zs=KJ8==f!q3BNI8IUxgSZ|mpUP3X-BS>b1#s?#!7(Lb!40)7)%Tk3lN;c|{s)eTh5 z6xRg$-HMID-J#D~aXjl}^MiGUQkXhbM&P?Nr+uZM4x&Xum1@Qc`wL6`3B_B~t&df1 zIn7EZEW1R;Zp>OmR1=obKGuyMd$6;%wY^~}ZMA+8@T6R7O9RV)H2$ERHQspu%>U2E z6U*r=A(?Jj6G*n$53aF0cf5!G@s`^Y(^_<8^O3iUw7jibAN#8JlAOs_TJ_;$@;%-A zQJ~N27qOFh<)qaYXXK`xD(;EIEv7d=>Os0u!@8lW`}66%bp@)Y3+zqn@?3Ry7P7c| z$FpS{ba4@l-P8}Sidmbwn5Qm6d$uyeas&jAS`G5^KAdrK3}P0m`oIDvl^Iqu2dlag z#ya(TP`cv1T&G?Qj-?X{l)ub8atu?!zp3y=_;DwWy+AmW+szyu?dnA_xk1!F>k9V- zn|4B9*0&pwEE(rf8&~WmJ6^8Cd8@C7VGnCdy7TR@58RwcRIL-~;w^<LhnfDmWjt9< zbH9v97;omd)KNY-C|mOccb)E?8c`pM!t4h8xr$wrO|F?`f9cBJhal=*=qF$HQr%lj z&wp8?5@YD6Uj-0vx(DAC^z>JKf+{e4BW?r699u5#N$yqbVLX=AEb7P7#INsmm>7*2 zKil#iZV1Mf&v16WPrGkjqVictKl>(}d`B;D?M<fApl_DorMUhZ1F5G6zd1%+={w(c zCGNE9TYbkLBBgV;y_3nn=cN5*-q)fL^&ili-)3~2teAv_20r=1jklyXT0h$7JAY!L zqrTgTW$Ll5BeEu98;-;c|H7tc*&xls6<&D2S3Of>UB5+pZy)O(V377UH&NdlMmKHW z5Nis@jNrFh_N?|6^>JZRFI=(D-d-SzEjY-J@InnXw=s0~j)ki8#k6&Yp48EH_McQw z3+<Qf*Hmspae@}RVl$jgkNhyi^{rRrH`}K)a#weA<}7rlypeUsrahU&!W|LJa)g}| zy0VqX1JwQ%4AP`#1%Y9PIn01=TwfyXt@9*@W5~KcidY@~%n#;+vbpbb^I6IKI8Zik zDwOR`&+S!`{eog&2D4E(i)wd6kA_X5=*_-FRvK5Eor>E;R*O|_gHH>)%at+41Iz+2 zSVjwJR)rs#Oh;D?SKXgUw^szKF3qGTDgrU}w<`wdmQR9zqM$AXTD9|O|J~hHzmKEl z-4PvX#&Mj=G=aCRG&CYeqTWn@*q!U{AAl|(<w8V#JL<A0lJv31?}<{8f6)<pv)z;Z z+otiVFa2U~2wtIw_7?luX0WMWAx-^Vqi`*+>M5o^Zay8l?_omdK-9>7i^?(N;{YB5 zuR?6&nWjP<1?gj9v^;uN?Cu!n%m%NGr3>~)#OGkM#%z>h8^n^Fhe9e{Iolub>d;FU zrs74Gh)Jw6{I*7q?N8FIgC6BSrkVr6-rshV^2xgpzc*#Jc-5(Iji#vw?vfH3SGh`c z!<+7_?CNplRowh$;GWFe;?BHEA5=!*m)fAJF8IA5uWF3ez|1lH<P%7sK)StZ9@#*< zRF6lvS5!xL4k%>JRa<^mZi!7JdBGVA)adDn3#fsfsP1H*7{wk`4R|kbnK|qf67}~x zpqN$tNddr8%gaCSpxZV{fggC>SvXAXMEyqQDQI8&zYHswft|lc#fbMj5rBwB>AMNv zZGSK*EYx)_v(KoRO^7eOT$|<cqLD@FIE_4b-rm~UNX)JH#h!iIvA<2=<D+1tf+-3b z6`Z1AiGnK?+@jzi1<xyZTS1MJTz{Z~(K5PmNs6L3U319SwMdZ`)9r_R&07>{r-HQ# zo>#C{L5{t3@o`tsN5N<Xdnw2(I9kE!3YI9iLct9(nmOrihKidM!|w_@tK|lR6--gE zuY&msPFHZgf~yt$O2NGf9#gPc!J85e<+#U+q8<Kd!af}p?5*G+1t%(KQgEq)Z!5T7 z!ELnaH(#e;+Y!2kM0okdaHUec*)kT<N%g+2na5@6DSfkkLd2Aegp!D&5H2cWPE-hb zFj<jb&WI>v@}!K2DIrwdFwmnUUh+-oS>gsg9n`Qwztvl=Dq+%p!!@DaI}X=&@Oll) zg0=4J!*N4Ft@QN8sE%#gEI*FZV4u-rTXOfO9WKSIxYudlO9L3Jy3~=urc3zK<m)u{ za<2&Pb&g}daeKKrb8aavoLf@6qPD7*WN_RCP$IQn?j)7F9Bghg-pS&)ulvG?cG$<O zor-Ihq)KSBFX+c{Yd{0q>{0{mo;QFKoEy@g<Hms|D?YQqe*m(ymGO4wywNG|B%RbL zlnLPe;yKQc_fMfz@I@dC9d{*)^>XQzm!HRI#&A6F@Gw|MA6@w;Mr>0k0kJ6hjHcb2 z=d*G<n&V%R!T~LDQE@KhBixV(=ZsOdjp{cXivhE76GjgidU>|vJg2yFo+%p6bBKFo zn_nN;c7d+a#H&$ZOv}dmWDYKpCS<2FzG}$hA;+Ge^RLD~?{xNDj0TiVcV8`FJ?rqZ zJc&PtF{$w9LEYNg`DrD`y>H{V2`5lJKL2NbZ@_j7#726H-uSuG^OAdUIUl?lTl9Y~ z`SL#_ZG`O#=q=c<(9~<$tm(zqq#kUz7WurhGj`$@0oqQ_T?=PE&#nbOH?H4{zYK#K zXxw$*=UV$d{J{y-Oov~Odahk^faAUgHBj62g5GQ*Jke<{Uk&FwMa%i7xO2Wkyc@kL z<y2q;I^Mu>_dw0c5d6I{S=BJSPQ!lb8`~Bm^D&P56!buGs}SL$eD1OJ-Ml6=;D0xC z7Los98#?*be&V-eb!yvxnC!vd+*x9273vB3HPCuch&OiH4j^P@DQF_7k!IZTO=TAL z$Fw@;r6F81@FwUXNCmk)C;^lXGJ*;~g`hch+pWo}w_82)juy$={Qo!FN43^Dxkg`? ztMjwR+}qWT<k+u1o<O`Zf0MP1Ei&fQm!9?@^>*viU8>kNW8WLHas3}Mu2XQWg75r6 z2Z+I5rHWXhU=dv-`iABxQcnd_6iiUCE8Q**&f^rR^|su^bp<afXi)5@6#1xvwF*`! zxb59Z#5Z)gB9$pvqToaY^WXi9Y&Ji<C%2_xNsdpwBD=~Ww^ota0W5tK8M7*V>hH?s zy%c$^A|oH9Pmv-c6Qob3BI7J(A2X*>6gZfrPxGI0g?KJVpDl{qNs)^b84nrh!z(hL zVA3aAkvl7L<sG@c5Jg_D$f1%vnd4Ts$_`<QL#q<y5=CxS<avtRsL1mbxl)mzDsqJ) zx9z1{c73TL6V&F$C-M@hL#Vd=g(U*~1!39?o-H3eLgaYBaXW!CeJ~TyF9#;#`N8xl zz%M#-+)e1W02>)SmeC#IWIhZHh~z`~Fq{Nhh>lJ1N2ISoSdRkNfo~$bj9&-545|nJ z5I8sp1yNBxa4bTa37%m&qB9cwa^OHbxlQ1Wz@!NLKN<KGU`Zs$eGZ<X7U%k2@SeaF zQ0)V=%uI*CBEgOzZ4BNOaKfdLdkkVDcnS=Ul}Ba(T0l%+2HdXjJArOpWFL26vcjhT z)%a1Q75*Av28erzK>(MT@x>}y4m=0az;F>bI!>OBvB0dJ92W?^5jZOq1;Lwuk3dH7 zIlT}{5DPoQGKFV&7{uy73LKv%*EtcGoq-(@Wz9KYxZao#2n<()*c32y$pR0(2FPV2 zbj$}B4PuQk+>j&B<@H?r)Q#&SYb+hO9dr}^r+|+@%>OCy+y2OhM;x~en8IWJS=hmF zBSEY%Lt7q338&S-V<4t)1imyt=7#~-3`P{-^A0dJA2|cQD{vNw4ZsBaQQ`Lj55B~4 zTj5g=R1e{}o=8B=5X`>`0?T}c4?uh2^bojcsLYoFzX7pMYy;j<_?tl0Fj*f691J>z zviU$Ohz)EdFb!8)#-{@hjlk^%KG%T*3sBaKN{wJrM<XlI>vZ5|5G$|+cxH?|$7g|? z$KfFipDn;o#$&F*uLlm9h|Yr_23!e}8V1%XJVVb(u)&96Jcvz43ec>YERWt97z$zr z1Mm#!9q`-~j#~_3AuR>Az5;*n4E+jae})0CVvm465EwjF=A&Q3^8mz_@j9RgVo_vw z#UK#cGIJqd9)T+VMuGsF-r%^iC~yk+&P;@gHCBXs|13-k_-0_}Y*c~>8GxriA>bLl zI7d##eBk>a*4SF$N)x69K5Kzt#mFmG7Pz?>^UvnK62g|b*eGCNcoW3J$Z*WR<V|BN z@NI>E2N*gJOO;gwOj&?Vf@jEs*d~(?+_MNBMWXEm<}SvH0nY=IN|E5;Q_Nr%f><^( z^m<b^_y9i!vCypt7B7)`M;Q{T9F@R79ayytD+YWmaQ<?6^rgTTta3yXfKDr9y)!Uo zC87ZTuE3cfGn?-sFgrjjTswigZCEOB+6z1hVm_yU4?yf+D<1-VR>}HI;P%xRB=kpt zWDP3ERJsFugIJxJz#l<I=o^72-^cb1{?z-J|1%%U!dc*nP3R0W0MmA0{=ugMm)h|M zEbz;LUOVNH`2bgdjzYf@`1_BT0`ND1LHp3bXUGd+@_y`);8TDNpvEUC19Ymys(FU_ zcLq}cVm%!RJYS7Gc!rSz-D~8z^aGAp_=&(_2hj=mF#H_E=9^*eAtW#KJg~4H$qIfd z(9j?^%rN~hq6Iy}Ic9vZhE2fbN01<*jE{~YC%`-Z8=DTu2%cfeF}X2@=Rsqc&vB0H z1FA(m_)UXb0Af?N9(WtH8dK8>WWO-HhK3okUjcYT!ps=<<Yxjy_Oxd_!-WdZp7-k% zp5cClXOHTu3eS)|lUZ4YAtz)$7MQK@4B5k%`7p#&c7P<XH!XX&vfeS=4q{FW8x%c5 u_HblA4B6|D@eDni;J>TNlf2~Q<=EJ|@!>|U6_dvyW?xk73ilzGoc;@<jb*d| delta 11926 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 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