Found another "incompatibility" with PB9 and XP SP3.
This forum contains a small debug info inc file to be included in DLL code named 'debug info' or similiar.
For my own purpose here, I made some adds to it and some small changes in code. All changes were made at times of PB8 and XP SP2.
With XP SP3 and PB9 it's behavior changed:
All variants are now precharged with a long integer: -2147352572 and as far as used by the debug command replaced by the debug result.
The following code contains a line with "<=========================", where I show the number and filter it from being output by the routine.
Any idea by what this phenomene is produced?
This forum contains a small debug info inc file to be included in DLL code named 'debug info' or similiar.
For my own purpose here, I made some adds to it and some small changes in code. All changes were made at times of PB8 and XP SP2.
With XP SP3 and PB9 it's behavior changed:
All variants are now precharged with a long integer: -2147352572 and as far as used by the debug command replaced by the debug result.
The following code contains a line with "<=========================", where I show the number and filter it from being output by the routine.
Any idea by what this phenomene is produced?
Code:
'include file for adding debug messages --------------------------------------------- 'original code by Gary Peek (05/14/2004) 'http://www.powerbasic.com/support/forums/Forum7/HTML/002320.html ' 'Name this file "debug.inc" (I keep it in my WinAPI folder) 'This version was concepted as an .inc file to be used with debugging DLLs. 'To use, just include "DebugWin.inc" and add debug statements where ever needed: ' ' In the DLL source code write: debug v1 [, v2, ... , v6] ' ' first debug statement creates the debug window ' where vn can be any string type, integer type, or float type ' set v1 = "cls" --> clear dialog box ' = "file" --> begin writing to a new file named "debug.txt" ' ('clear' and 'To File' also from system menu) ' stop or restart the list to be continuously filled by pressing a NumPad number key ' this way the debugger can be triggerd by a number from 0 to 9 for any task ' the sys menue was extended by On/Off menu command also stopping/continuing the list ' for cases when NumPad must be used by another operation. 'The specified debug items are posted to a resizable dialog box 'and optionally written to a file named "debug.txt" '------------------------------------------------------------------------------------ Declare Function GetSystemMenu Lib "USER32.DLL" Alias "GetSystemMenu" (ByVal hWnd As Dword, ByVal bRevert As Long) As Long Declare Function AppendMenu Lib "USER32.DLL" Alias "AppendMenuA" (ByVal hMenu As Dword, ByVal uFlags As Dword, ByVal uIDNewItem As Dword, lpNewItem As Asciiz) As Long Declare Function DrawMenuBar Lib "USER32.DLL" Alias "DrawMenuBar" (ByVal hWnd As Dword) As Long Declare Function GetSystemMetrics Lib "USER32.DLL" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long Declare Function GetActiveWindow Lib "USER32.DLL" Alias "GetActiveWindow" () As Long Declare Function SetActiveWindow Lib "USER32.DLL" Alias "SetActiveWindow" (ByVal hWnd As Dword) As Long Declare Function InsertMenu Lib "USER32.DLL" Alias "InsertMenuA" (ByVal hMenu As Dword, ByVal dwPosition As Dword, ByVal dwFlags As Dword, ByVal dwIDNewItem As Dword, lpNewItem As Asciiz) As Long Declare Function RemoveMenu Lib "USER32.DLL" Alias "RemoveMenu" (ByVal hMenu As Dword, ByVal nPosition As Long, ByVal wFlags As Dword) As Long Declare Function WindowMessage Lib "WINMSG.DLL" Alias "WindowMessageA" (ByVal MsgNum As Long) As String Declare Function KeyboardHook(ByVal iCode As Integer, ByVal wParam As Long, ByVal lParam As Long) As Dword Declare Sub AddDebug() Declare CallBack Function AddDebugProc() Declare Sub Debug(Optional ByVal v1 As VARIANT, Opt ByVal v2 As VARIANT, Opt ByVal v3 As VARIANT, Opt ByVal v4 As VARIANT, Opt ByVal v5 As VARIANT, Opt ByVal v6 As VARIANT) Global ghKbrdHook As Long %MF_SEPARATOR = &H800 %MF_STRING = &H0 %SM_CXSCREEN = &H0 %SM_CYSCREEN = &H1 %WS_SYSMENU = &H00080000 %WS_THICKFRAME = &H00040000 %WS_VSCROLL = &H00200000 %LBS_NOSEL = &H00004000 %WM_USER = &H400 %WM_SIZE = &H5 %WM_SYSCOMMAND = &H112 %MF_BYPOSITION = &H400 #If Not %Def(%SC_CLOSE) %SC_CLOSE = &HF060& #EndIf %ID_Debug = %WM_USER + 1 %ID_Button = %WM_USER + 2 Global StopDebug As Long GLOBAL hDebugDlg AS LONG GLOBAL hDebugCalled AS LONG GLOBAL hDebugMenu AS LONG GLOBAL debugCount AS LONG GLOBAL debugFile AS STRING DECLARE SUB debug(OPTIONAL BYVAL v1 AS VARIANT, _ OPTIONAL BYVAL v2 AS VARIANT, _ OPTIONAL BYVAL v3 AS VARIANT, _ OPTIONAL BYVAL v4 AS VARIANT, _ OPTIONAL BYVAL v5 AS VARIANT, _ OPTIONAL BYVAL v6 AS VARIANT) Sub AddDebug() 'Create dialog box for debugging info Local nStyle As Long, wi As Long, ht As Long, x As Long, y As Long hDebugCalled = GetActiveWindow wi = CLng(GetSystemMetrics(%SM_CXSCREEN) \ 4) 'make dlg 1/4 screen width ht = CLng(GetSystemMetrics(%SM_CYSCREEN) \ 6) 'and 1/6 screen height nStyle = %WS_SYSMENU Or %WS_THICKFRAME Dialog New 0, "IBD PBDebug", 0, 0, wi, ht, nStyle To hDebugDlg Dialog Pixels hDebugDlg, wi, ht To Units wi, ht Dialog Set Size hDebugDlg, wi, ht Dialog Get Client hDebugDlg To x, y nStyle = %WS_VSCROLL Or %LBS_NOSEL Control Add ListBox, hDebugDlg, %ID_Debug, , 0, 0, x, y, nStyle hDebugMenu = GetSystemMenu(hDebugDlg, 0) InsertMenu hDebugMenu, 5, %MF_BYPOSITION Or %MF_SEPARATOR, -1, "-" InsertMenu hDebugMenu, 6, %MF_BYPOSITION Or %MF_STRING, %ID_Debug + 1, "&Anzeige leeren" InsertMenu hDebugMenu, 7, %MF_BYPOSITION Or %MF_STRING, %ID_Debug + 2, "&C:\PBDEBUG.LOG schreiben" InsertMenu hDebugMenu, 8, %MF_BYPOSITION Or %MF_STRING, %ID_Debug + 3, "&Start/Stop Debugger" RemoveMenu hDebugMenu, 4, %MF_BYPOSITION RemoveMenu hDebugMenu, 3, %MF_BYPOSITION RemoveMenu hDebugMenu, 0, %MF_BYPOSITION DrawMenuBar hDebugDlg Dialog Show Modeless hDebugDlg, Call addDebugProc End Sub '------------------------------------------------------------------------------------------------------- ' CALLBACK FUNCTION AddDebugProc '------------------------------------------------------------------------------------------------------- CallBack Function AddDebugProc() Local i As Long, x As Long, y As Long, fileNo As Long, msg As String Select Case CbMsg Case %WM_SIZE Dialog Get Client CbHndl To x, y Control Set Size CbHndl, %ID_Debug, x, y SetActiveWindow hDebugCalled Case %WM_SYSCOMMAND If CbWParam = %SC_CLOSE Then hDebugDlg = 0: debugCount = 0 ElseIf CbWParam = %ID_Debug + 1 Then ListBox Reset hDebugDlg, %ID_Debug: debugCount = 0 ElseIf CbWParam = %ID_Debug + 2 Then debugFile = "debug.txt" Kill debugFile Open debugFile For Output As fileNo For i = 1 To debugCount ListBox Select CbHndl, %ID_Debug, i ListBox Get Text CbHndl, %ID_Debug To msg Print #fileNo, msg Next i Close #fileNo ElseIf CbWParam = %ID_Debug + 3 Then StopDebug = 1 - StopDebug End If Case %WM_INITDIALOG ghKbrdHook = SetWindowsHookEx(%WH_KEYBOARD, CodePtr(KeyboardHook), 0, GetCurrentThreadId) Case %WM_DESTROY UnhookWindowsHookEx ghKbrdHook End Select End Function '------------------------------------------------------------------------------------------------------- ' FUNCTION Debug '------------------------------------------------------------------------------------------------------- Sub Debug(Optional ByVal v1 As VARIANT, _ Optional ByVal v2 As VARIANT, _ Optional ByVal v3 As VARIANT, _ Optional ByVal v4 As VARIANT, _ Optional ByVal v5 As VARIANT, _ Optional ByVal v6 As VARIANT) Local Msg As String, i As Long, n As Long Static fileNo As Long Dim v(6) As VARIANT If hDebugDlg = 0 Then AddDebug v(1) = v1 v(2) = v2 v(3) = v3 v(4) = v4 v(5) = v5 v(6) = v6 For i = 1 To 6 n = VariantVT(v(i)) If n = 8 Then If i = 1 And UCase$(Variant$(v(i))) = "CLS" Then 'clear window ListBox Reset hDebugDlg, %ID_Debug msg = "" debugCount = 0 ElseIf i = 1 And UCase$(Variant$(v(i))) = "FILE" Then 'write to debug file debugFile = "C:\PBDEBUG.LOG" Kill debugFile msg = "" Else msg = msg & Variant$(v(i)) & ", " End If ElseIf n <> 0 Then If Str$(Variant#(v(i))) <> "-2147352572" Then '<================ just To Show the Long Integer =================== msg = msg & Str$(Variant#(v(i))) & ", " End If End If Next If StopDebug = 0 Then msg = RTrim$(msg, Any ", ") If Len(msg) = 0 Then Exit Sub If Len(debugFile) Then Open debugFile For Append As fileNo Print #fileNo, msg: Close #fileNo End If ListBox Add hDebugDlg, %ID_Debug, msg Incr debugCount ListBox Select hDebugDlg, %ID_Debug, debugCount End If End Sub '------------------------------------------------------------------------------------------------------- ' FUNCTION KeyboardHook '------------------------------------------------------------------------------------------------------- Function KeyboardHook(ByVal iCode As Integer, ByVal wParam As Long, ByVal lParam As Long) As Dword 'KeyBoardHook looks For one of the NumPad number keys beeing pressed. 'Each key press stops or restarts the debugger list to be continuously filled. Local ScanCode As Long, t As String, Enhanced As Long If iCode = %HC_ACTION Then If (lParam And &H80000000) = 0 Then ' Pressed Enhanced = IsTrue(lParam And &H01000000) ScanCode = Asc(Mkl$(lParam), 3) Select Case ScanCode Case &H52 '0 StopDebug = 1 - StopDebug If StopDebug = 1 Then ListBox Add hDebugDlg, %ID_Debug, "================================================" End If Case &H4F '1 Case &H50 '2 Case &H51 '3 Case &H4B '4 Case &H4C '5 Case &H4D '6 Case &H47 '7 Case &H48 '8 Case &H49 '9 End Select If EnHanced Then t$ = "" End If End If Function = CallNextHookEx(ghKbrdHook, iCode, wParam, lParam) End Function
Comment