Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^2: Win32-Registry build failure on windows

by bulk88 (Priest)
on Sep 17, 2012 at 09:01 UTC ( #993995=note: print w/ replies, xml ) Need Help??


in reply to Re: Win32-Registry build failure on windows
in thread Win32-Registry build failure on windows

It is used in some places sortof. I added "FILETIME T_IV" to the typemap. It works, but it isn't correct. For the record, Win32API::Registry treats FILETIMEs as 8 byte strings.

bool RegQueryInfoKey(hkey,kclass,classsz,reserved,numsubkeys,maxsubkeylen,m +axclasslen,numvalues,maxvalnamelen,maxvaldatalen,secdesclen,lastwrite +time) HKEY hkey char *kclass = NO_INIT DWORD classsz = NO_INIT DWORD reserved = NO_INIT DWORD numsubkeys = NO_INIT DWORD maxsubkeylen = NO_INIT DWORD maxclasslen = NO_INIT DWORD numvalues = NO_INIT DWORD maxvalnamelen = NO_INIT DWORD maxvaldatalen = NO_INIT DWORD secdesclen = NO_INIT FILETIME lastwritetime = NO_INIT CODE: char keyclass[TMPBUFSZ]; FILETIME ft; LONG result; /* supress unreferenced variable warning */ (void)kclass; (void)reserved; (void)lastwritetime; classsz = sizeof(keyclass); result = RegQueryInfoKey(hkey, keyclass, &classsz, 0, &numsubkeys, &maxsubkeylen, &maxclasslen, &numvalues, &maxvalnamelen, &maxvaldatalen, &secdesclen, &ft); RETVAL = SUCCESS(result); if (!RETVAL) SetLastError(result); OUTPUT: RETVAL kclass SETPV(1, keyclass); numsubkeys maxsubkeylen maxclasslen numvalues maxvalnamelen maxvaldatalen secdesclen lastwritetime if (RETVAL) { ft2timet(&ft); } //////////////////////////////// bool RegEnumKeyEx(hkey,idx,subkey,classname,lastwritetime) HKEY hkey DWORD idx char *subkey = NO_INIT char *classname = NO_INIT FILETIME lastwritetime = NO_INIT CODE: char keybuffer[TMPBUFSZ]; DWORD keybuffersz = TMPBUFSZ; char classbuffer[TMPBUFSZ]; DWORD classbuffersz = TMPBUFSZ; FILETIME ft; LONG result = RegEnumKeyEx(hkey, idx, keybuffer, &keybuffersz, 0, classbuffer, &classbuffersz, &ft); /* supress unreferenced variable warning */ (void)subkey; (void)classname; (void)lastwritetime; RETVAL = SUCCESS(result); if (!RETVAL) SetLastError(result); OUTPUT: RETVAL subkey if (RETVAL) { SETPV(2, keybuffer); } classname if (RETVAL) { SETPV(3, classbuffer); } lastwritetime if (RETVAL) { SETNV(4, ft2timet(&ft)); }
Notice lastwritetime output is broken in RegQueryInfoKey.


Comment on Re^2: Win32-Registry build failure on windows
Download Code
Re^3: Win32-Registry build failure on windows
by syphilis (Canon) on Sep 17, 2012 at 09:20 UTC
    I added "FILETIME T_IV" to the typemap

    You can actually specify whatever you like for "FILETIME" and it "will work" :-)
    Perl is satisfied if it can find a typemap entry - it doesn't care what type that entry specifies, or even if the specified type is one that it knows about.

    Of course, there should be no need for the typemap to mention FILETIME at all - and there isn't if Registry.xs is fixed.
    (I'm not sure that I made that clear.)

    Cheers,
    Rob

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://993995]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (11)
As of 2014-08-30 19:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (293 votes), past polls