Perhaps we should have guessed that from the posted code:
Code:
CASE %WM_COMMAND SELECT CASE CBCTL [b]'*** Dialog Controls routines here[/b] END SELECT
CASE %WM_COMMAND SELECT CASE CBCTL [b]'*** Dialog Controls routines here[/b] END SELECT
#COMPILE EXE '#Win 8.04# #REGISTER NONE #DIM ALL #INCLUDE "Win32Api.inc" '#2005-01-27# GLOBAL hDlg AS DWORD %Button1 = 101 DECLARE FUNCTION ShowEula LIB "TestResourceDll.dll" ALIAS "ShowEula"(BYVAL hParent AS DWORD) AS LONG '______________________________________________________________________________ CALLBACK FUNCTION DlgProc SELECT CASE CBMSG CASE %WM_COMMAND SELECT CASE LOWRD(CBWPARAM) CASE %Button1 IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN ShowEula(CBHNDL) END IF END SELECT END SELECT END FUNCTION '______________________________________________________________________________ FUNCTION PBMAIN() DIALOG NEW %HWND_DESKTOP ,"PB ver. " & Hex$(%PB_REVISION), , , 200, 100, %WS_CAPTION OR %WS_MINIMIZEBOX OR %WS_SYSMENU, 0 TO hDlg SetClassLong hDlg, %GCL_HICON, LoadIcon(BYVAL %NULL, BYVAL %IDI_INFORMATION) CONTROL ADD BUTTON, hDlg, %Button1, "Call DLL", 75, 42, 50, 15 DIALOG SHOW MODAL hDlg CALL DlgProc END FUNCTION '______________________________________________________________________________
#COMPILE DLL "TestResourceDll.dll" '#Win 8.04# #DIM ALL #INCLUDE "Win32API.inc" '#2005-01-27# #RESOURCE "TestResourceDll.pbr" %USEMACROS = 1 GLOBAL ghInstance AS DWORD GLOBAL HwndDlgEula AS DWORD %TxtEula = 101 '______________________________________________________________________________ FUNCTION LIBMAIN (BYVAL hInstance AS LONG, _ BYVAL fwdReason AS LONG, _ BYVAL lpvReserved AS LONG) AS LONG SELECT CASE fwdReason CASE %DLL_PROCESS_ATTACH ghInstance = hInstance FUNCTION = 1 CASE %DLL_PROCESS_DETACH FUNCTION = 1 CASE %DLL_THREAD_ATTACH FUNCTION = 1 CASE %DLL_THREAD_DETACH FUNCTION = 1 END SELECT END FUNCTION '______________________________________________________________________________ FUNCTION LoadEula ALIAS "LoadEula"(BYVAL hParent AS DWORD) AS LONG LOCAL ErrorBuf AS ASCIIZ * %MAX_PATH LOCAL lResult AS LONG LOCAL EulaSize AS LONG LOCAL EulaAddr AS DWORD LOCAL hResource AS DWORD LOCAL hGlobal AS DWORD LOCAL Style AS DWORD LOCAL ExStyle AS DWORD LOCAL EulaString AS STRING hResource = FindResource(BYVAL ghInstance, "EULA_AGGREEMENT", BYVAL %RT_RCDATA) IF hResource THEN hGlobal = LoadResource(ghInstance, hResource) EulaSize = SizeofResource(ghInstance, hResource) IF hGlobal THEN EulaAddr = LockResource(hGlobal) IF EulaAddr THEN EulaString = PEEK$(EulaAddr, EulaSize) END IF END IF END IF MSGBOX FUNCNAME$ & $CRLF & _ "HwndDlgEula& = " & STR$(HwndDlgEula) & $CRLF & _ "Parent = " & STR$(GetModuleHandle(BYVAL %NULL)) & $CRLF & _ "Dll = " & STR$(GetModuleHandle("TestResourceDll.dll")) & $CRLF & _ "Hinst = " & STR$(ghInstance) & $CRLF & _ "EulaString = " & EulaString Style = %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR %DS_MODALFRAME OR %WS_CAPTION OR %WS_CLIPSIBLINGS ExStyle = 0 DIALOG NEW hParent, "Eula", , , 330, 145, Style, ExStyle TO HwndDlgEula CONTROL ADD TEXTBOX, HwndDlgEula, %TxtEula, "", 5, 5, 320, 110, _ %WS_CHILD OR %WS_VISIBLE OR %ES_MULTILINE OR %ES_NOHIDESEL OR %ES_WANTRETURN OR _ %ES_LEFT OR %ES_AUTOVSCROLL OR %ES_READONLY OR %WS_VSCROLL OR %WS_TABSTOP CONTROL SET TEXT HwndDlgEula, %TxtEula, EulaString DIALOG SHOW MODAL HwndDlgEula END FUNCTION '______________________________________________________________________________ FUNCTION ShowEula ALIAS "ShowEula"(BYVAL hParent AS DWORD) EXPORT AS LONG LoadEula BYVAL hParent END FUNCTION '______________________________________________________________________________
#COMPILE DLL #DIM ALL %USEMACROS = 1 #INCLUDE "Win32API.inc" '*** Load the resource file #RESOURCE "TestResourceDll.pbr" GLOBAL ghInstance AS DWORD GLOBAL HwndDlgEula& %TxtEula = %WM_USER + 100 '------------------------------------------------------------------------------- ' Main DLL entry point called by Windows... ' FUNCTION LIBMAIN (BYVAL hInstance AS LONG, _ BYVAL fwdReason AS LONG, _ BYVAL lpvReserved AS LONG) AS LONG SELECT CASE fwdReason CASE %DLL_PROCESS_ATTACH 'Indicates that the DLL is being loaded by another process (a DLL 'or EXE is loading the DLL). DLLs can use this opportunity to 'initialize any instance or global data, such as arrays. ghInstance = hInstance FUNCTION = 1 'success! 'FUNCTION = 0 'failure! This will prevent the EXE from running. CASE %DLL_PROCESS_DETACH 'Indicates that the DLL is being unloaded or detached from the 'calling application. DLLs can take this opportunity to clean 'up all resources for all threads attached and known to the DLL. FUNCTION = 1 'success! 'FUNCTION = 0 'failure! CASE %DLL_THREAD_ATTACH 'Indicates that the DLL is being loaded by a new thread in the 'calling application. DLLs can use this opportunity to 'initialize any thread local storage (TLS). FUNCTION = 1 'success! 'FUNCTION = 0 'failure! CASE %DLL_THREAD_DETACH 'Indicates that the thread is exiting cleanly. If the DLL has 'allocated any thread local storage, it should be released. FUNCTION = 1 'success! 'FUNCTION = 0 'failure! END SELECT END FUNCTION '------------------------------------------------------------------------------------ FUNCTION LoadEula ALIAS "LoadEula"(BYVAL hParent&) EXPORT AS LONG 'Load main program LOCAL Style&, ExStyle& Style& = %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR %WS_CHILD OR %DS_MODALFRAME OR %WS_CAPTION OR %WS_CLIPSIBLINGS 'OR %WS_SYSMENU ExStyle& = 0 DIALOG NEW hParent&, "Eula", %CW_USEDEFAULT, %CW_USEDEFAULT, 330, 145, Style&, ExStyle& TO HwndDlgEula& CONTROL ADD TEXTBOX, HwndDlgEula&, %TxtEula, "", 5, 5, 320, 110, _ %WS_CHILD OR %WS_VISIBLE OR %ES_MULTILINE OR %ES_NOHIDESEL OR %ES_WANTRETURN OR %ES_LEFT _ OR %ES_AUTOVSCROLL OR %ES_READONLY OR %WS_VSCROLL OR %WS_TABSTOP 'OR %ES_AUTOHSCROLL OR %WS_HSCROLL OR %WS_EX_ACCEPTFILES'Cant use acceptfiles because code is same as lowercase only DIM EulaSize AS LONG LOCAL EulaHandle AS DWORD LOCAL EulaAddr AS ASCIIZ PTR '* %MAX_PATH LOCAL EulaString AS STRING LOCAL TempFindResource AS DWORD LOCAL lResult AS LONG LOCAL ErrorBuf AS ASCIIZ * %MAX_PATH '*** Win32Api.hlp describes 'FindResource( ' HMODULE hModule, // resource-module handle ' LPCTSTR lpName, // pointer to resource name ' LPCTSTR lpType // pointer to resource type ' ) '*** However Win32Api.Inc describes 'FindResource( ' BYVAL hInstance AS DWORD, // resource-module handle <--- My dll instance ' lpName AS ASCIIZ, // pointer to resource name <--- Asciiz instead of pointer? ' lpType AS ASCIIZ // pointer to resource type <--- Asciiz instead of pointer? ' ) AS LONG ' TempFindResource = FindResource(BYVAL ghInstance, "EULA_AGGREEMENT", "RT_RCDATA") '<--- GetLastError says no error, but no handle returned TempFindResource = FindResource(BYVAL ghInstance, "EULA_AGGREEMENT", BYVAL %RT_RCDATA) '<--- Handle returned, and GetLastError says no error '*** Just to show Error or No Error lResult = GetLastError() FormatMessage %FORMAT_MESSAGE_FROM_SYSTEM, BYVAL %NULL, lResult, %NULL, ErrorBuf, SIZEOF(ErrorBuf), BYVAL %NULL MSGBOX "TempFindResource = " + STR$(TempFindResource) + $CR + ErrorBuf '*** Win32Api.hlp describes 'LoadResource( ' HMODULE hModule, // resource-module handle ' HRSRC hResInfo // resource handle ' ) '*** However Win32Api.Inc describes 'LoadResource( ' BYVAL hInstance AS DWORD, // resource-module handle ' BYVAL hResInfo AS DWORD // resource handle ' ) ' EulaAddr = LoadResource (BYVAL ghInstance, BYVAL FindResource(BYVAL ghInstance, "EULA_AGGREEMENT", byval %RT_RCDATA)) EulaAddr = LoadResource (ghInstance, TempFindResource) '*** Just to show Error or No Error lResult = GetLastError() FormatMessage %FORMAT_MESSAGE_FROM_SYSTEM, BYVAL %NULL, lResult, %NULL, ErrorBuf, SIZEOF(ErrorBuf), BYVAL %NULL MSGBOX "EulaAddr = " + STR$(EulaAddr) + $CR + ErrorBuf EulaString = @EulaAddr MSGBOX FUNCNAME$ _ + $CR + "HwndDlgEula& = " + STR$(HwndDlgEula&) _ + $CR + "Parent = " + STR$(GetModuleHandle(BYVAL %NULL)) _ + $CR + "Dll = " + STR$(GetModuleHandle("TestResourceDll.dll")) _ + $CR + "Hinst = " + STR$(ghInstance) _ + $CR + "EulaString = " + EulaString '*** <--- OK so either I REALLLLLLY do not get it, or I did it right the 1st time '*** <--- If that is the case then, why a crash unless I show the bleeping dialog???? '*** Put the results in the textbox CONTROL SET TEXT HwndDlgEula&, %TxtEula, EulaString END FUNCTION '------------------------------------------------------------------------------------ FUNCTION ShowEula ALIAS "ShowEula"(BYVAL hParent&) EXPORT AS LONG SELECT CASE HwndDlgEula& 'If handle for Eula doesnt exist then Eula doesnt exist CASE 0 LoadEula BYVAL hParent& 'Reload Eula if it doesnt exist CASE ELSE END SELECT DIALOG SHOW MODELESS HwndDlgEula& END FUNCTION
EulaAddr = LoadResource (BYVAL ghInstance, BYVAL FindResource(BYVAL ghInstance, "EULA_AGGREEMENT", BYVAL %RT_RCDATA)) EulaString = @EulaAddr
#COMPILE DLL #DIM ALL %USEMACROS = 1 #INCLUDE "Win32API.inc" '*** Load the resource file #RESOURCE "TestResourceDll.pbr" GLOBAL ghInstance AS DWORD GLOBAL HwndDlgEula& %TxtEula = %WM_USER + 100 CALLBACK FUNCTION EulaCallback SELECT CASE CBMSG 'Determine what the event is CASE %WM_INITDIALOG 'If initializing (opening the TerminalSimple) CASE %WM_MDIACTIVATE CASE %WM_MOVE CASE %WM_SETREDRAW CASE %WM_MOUSEWHEEL CASE %WM_COMMAND SELECT CASE CBCTL '*** Dialog Controls routines here END SELECT CASE %WM_SYSCOMMAND CASE %WM_DESTROY CASE ELSE END SELECT END FUNCTION '------------------------------------------------------------------------------- ' Main DLL entry point called by Windows... ' FUNCTION LIBMAIN (BYVAL hInstance AS LONG, _ BYVAL fwdReason AS LONG, _ BYVAL lpvReserved AS LONG) AS LONG SELECT CASE fwdReason CASE %DLL_PROCESS_ATTACH 'Indicates that the DLL is being loaded by another process (a DLL 'or EXE is loading the DLL). DLLs can use this opportunity to 'initialize any instance or global data, such as arrays. ghInstance = hInstance FUNCTION = 1 'success! 'FUNCTION = 0 'failure! This will prevent the EXE from running. CASE %DLL_PROCESS_DETACH 'Indicates that the DLL is being unloaded or detached from the 'calling application. DLLs can take this opportunity to clean 'up all resources for all threads attached and known to the DLL. FUNCTION = 1 'success! 'FUNCTION = 0 'failure! CASE %DLL_THREAD_ATTACH 'Indicates that the DLL is being loaded by a new thread in the 'calling application. DLLs can use this opportunity to 'initialize any thread local storage (TLS). FUNCTION = 1 'success! 'FUNCTION = 0 'failure! CASE %DLL_THREAD_DETACH 'Indicates that the thread is exiting cleanly. If the DLL has 'allocated any thread local storage, it should be released. FUNCTION = 1 'success! 'FUNCTION = 0 'failure! END SELECT END FUNCTION '------------------------------------------------------------------------------------ FUNCTION LoadEula ALIAS "LoadEula"(BYVAL hParent&) EXPORT AS LONG 'Load main program LOCAL Style&, ExStyle& Style& = %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR %WS_CHILD OR %DS_MODALFRAME OR %WS_CAPTION OR %WS_CLIPSIBLINGS 'OR %WS_SYSMENU ExStyle& = 0 DIALOG NEW hParent&, "Eula", %CW_USEDEFAULT, %CW_USEDEFAULT, 330, 145, Style&, ExStyle& TO HwndDlgEula& CONTROL ADD TEXTBOX, HwndDlgEula&, %TxtEula, "", 5, 5, 320, 110, _ %WS_CHILD OR %WS_VISIBLE OR %ES_MULTILINE OR %ES_NOHIDESEL OR %ES_WANTRETURN OR %ES_LEFT _ OR %ES_AUTOVSCROLL OR %ES_READONLY OR %WS_VSCROLL OR %WS_TABSTOP 'OR %ES_AUTOHSCROLL OR %WS_HSCROLL OR %WS_EX_ACCEPTFILES'Cant use acceptfiles because code is same as lowercase only DIM EulaSize AS LONG LOCAL EulaAddr AS ASCIIZ PTR '* %MAX_PATH LOCAL EulaString AS STRING EulaSize = SizeOfResource(BYVAL ghInstance, BYVAL FindResource(BYVAL ghInstance, "EULA_AGGREEMENT", BYVAL %RT_RCDATA)) EulaAddr = LoadResource (BYVAL ghInstance, BYVAL FindResource(BYVAL ghInstance, "EULA_AGGREEMENT", BYVAL %RT_RCDATA)) EulaString = @EulaAddr MSGBOX FUNCNAME$ _ + $CR + "HwndDlgEula& = " + STR$(HwndDlgEula&) _ + $CR + "Parent = " + STR$(GetModuleHandle(BYVAL %NULL)) _ + $CR + "Dll = " + STR$(GetModuleHandle("TestResourceDll.dll")) _ + $CR + "Hinst = " + STR$(ghInstance) _ + $CR + "EulaString = " + EulaString REPLACE CHR$(1) WITH "" IN EulaString CONTROL SET TEXT HwndDlgEula&, %TxtEula, EulaString ' '*** Message handler loop 'local Msg as TagMsg ' WHILE GetMessage(Msg, BYVAL %NULL, 0, 0) ' TranslateMessage Msg ' DispatchMessage Msg ' WEND FUNCTION=%True END FUNCTION '------------------------------------------------------------------------------------ FUNCTION ShowEula ALIAS "ShowEula"(BYVAL hParent&) EXPORT AS LONG SELECT CASE HwndDlgEula& 'If handle for Eula doesnt exist then Eula doesnt exist CASE 0 LoadEula BYVAL hParent& 'Reload Eula if it doesnt exist CASE ELSE END SELECT DIALOG SHOW MODELESS HwndDlgEula& END FUNCTION
#include "resource.h" EULA_AGGREEMENT RCDATA DISCARDABLE "TestEula.txt"
Live from NY Its SATURDAY NIIIIIIIIIiiiiight
Private Declare Function LoadEula Lib "TestResourceDll.dll" (ByVal hParent&) As Long 'Load main program Private Declare Function ShowEula Lib "TestResourceDll.dll" (ByVal hParent&) As Long Private Sub Command1_Click() LoadEula 0 End Sub Private Sub Command2_Click() ShowEula 0 End Sub
We process personal data about users of our site, through the use of cookies and other technologies, to deliver our services, and to analyze site activity. For additional details, refer to our Privacy Policy.
By clicking "I AGREE" below, you agree to our Privacy Policy and our personal data processing and cookie practices as described therein. You also acknowledge that this forum may be hosted outside your country and you consent to the collection, storage, and processing of your data in the country where this forum is hosted.
Leave a comment: