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).]
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).]
Comment