Announcement

Collapse
No announcement yet.

GPF with Pointers in Fileversion Sample in PBDLL 6

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • GPF with Pointers in Fileversion Sample in PBDLL 6

    I used a fileversion sample in PBDLL 5 and it worked fine. Now I recompiled it in PBDLL 6 and it GPFS when trying to read the data. Is there a difference described in the docs between PBDLL5 and 6 I have not read ? I tested it on NT4 and Win2000.

    Here is the sample snipped:

    TYPE VS_FIXEDFILEINFO_x
    dwSignature AS LONG
    dwStrucVersionl AS INTEGER 'e.g. &H00000042 = "0.42"
    dwStrucVersionh AS INTEGER 'e.g. &H00000042 = "0.42"
    dwFileVersionMSl AS INTEGER 'e.g. &H00030075 = "3."
    dwFileVersionMSh AS INTEGER 'e.g. &H00030075 = "0.75"
    dwFileVersionLSl AS INTEGER 'e.g. &H00000031 = "0.31"
    dwFileVersionLSh AS INTEGER 'e.g. &H00000031 = "0.31"
    dwProductVersionMSl AS INTEGER 'e.g. &H00030010 = "3.10"
    dwProductVersionMSh AS INTEGER 'e.g. &H00030010 = "3.10"
    dwProductVersionLSl AS INTEGER 'e.g. &H00000031 = "0.31"
    dwProductVersionLSh AS INTEGER 'e.g. &H00000031 = "0.31"
    dwFileFlagsMask AS LONG '= &H3F for version "0.42"
    dwFileFlags AS LONG 'e.g. VFF_DEBUG OR %VFF_PRERELEASE
    dwFileOS AS LONG 'e.g. VOS_DOS_WINDOWS16
    dwFileType AS LONG 'e.g. VFT_DRIVER
    dwFileSubtype AS LONG 'e.g. VFT2_DRV_KEYBOARD
    dwFileDateMS AS LONG 'e.g. 0
    dwFileDateLS AS LONG 'e.g. 0
    END TYPE

    FUNCTION VersionFnS(pszFile AS ASCIIZ, nOption AS INTEGER) AS STRING

    LOCAL tptrFfi AS VS_FIXEDFILEINFO_x PTR
    LOCAL lSizeStruc AS LONG 'size&
    LOCAL lZPtr AS ASCIIZ PTR 't
    LOCAL lHandle AS LONG 'z&
    LOCAL sBuffer AS STRING 'buffer$
    LOCAL lBufferLen AS LONG

    ' ** Allocate a buffer for the version info data
    lSizeStruc = GetFileVersionInfoSize(pszFile, lHandle)
    '!!!Debugger shows lSizeStruc = 0 but the THEN block gets skipped.
    IF lSizeStruc = 0 THEN
    FUNCTION = ""
    EXIT FUNCTION
    END IF
    sBuffer = SPACE$(lSizeStruc)
    ' ** Get the version info data into the buffer
    GetFileVersionInfo pszFile, lHandle, lSizeStruc, BYVAL STRPTR(sBuffer)

    ' ** Read the VS_FIXEDFILEINFO info
    ' The following line produces a GPF in PB/DLL6
    ' VerQueryValue BYVAL STRPTR(sBuffer), "\", VARPTR(tptrFFI), lBufferLen
    ' Revised line
    VerQueryValue BYVAL STRPTR(sBuffer), "\", BYVAL VARPTR(tptrFFI), lBufferLen


    ' Format output
    ' HERE IT GPFs
    SELECT CASE nOption
    CASE 1
    FUNCTION = TRIM$(STR$(@tptrFfi.dwFileVersionMSh))
    CASE 2
    FUNCTION = TRIM$(STR$(@tptrFfi.dwFileVersionMSl))
    CASE 3
    FUNCTION = TRIM$(STR$(@tptrFfi.dwFileVersionMSh)) & "." & _
    TRIM$(STR$(@tptrFfi.dwFileVersionMSl))
    CASE 4
    FUNCTION = TRIM$(STR$(@tptrFfi.dwFileVersionMSh)) & "." & _
    TRIM$(STR$(@tptrFfi.dwFileVersionMSl)) & "." & _
    TRIM$(STR$(@tptrFfi.dwFileVersionLSh)) & "." & _
    TRIM$(STR$(@tptrFfi.dwFileVersionLSl))
    END SELECT

    END FUNCTION





    [This message has been edited by Ralph Tuenker (edited March 29, 2000).]
    Ralph Tuenker

  • #2
    I found the error.
    I use BYVAL VARPTR(tptrFFI) instead of VARPTR(tptrFFI) and it works.

    VerQueryValue BYVAL STRPTR(sBuffer), "\", BYVAL VARPTR(tptrFFI), lBufferLen

    NOTE: I change the above code.

    ------------------
    Ralph Tuenker

    Comment

    Working...
    X