Hi Ville,
This tip allows you to embed an Excel spreadsheet or any other type of document as a resource within the executable file.
When the program runs, the code will write the contents of the spreadsheet to a file on the hard drive.
WARNING: The document must be renamed to .BMP and then added to the project as an image. (Example: _accordions.html renamed to _accordions.html.bmp works fine as long as you set ResNameStr = _accordions_html_bmp, since the periods are replaced by underscores.)
After Global INCLUDEs:
INCLUDE('Winequ.clw')
FilName CSTRING(256)
GENERIC_WRITE EQUATE(40000000H)
CREATE_ALWAYS EQUATE(2)
FILE_ATTRIBUTE_NORMAL EQUATE(80H)
hFile LONG
lpRes LONG !,Auto
cbRes LONG !,Auto
cbWri LONG
hRes LONG !UnSigned,Auto
hgMem LONG !UnSigned,Auto
ResTypeStr CSTRING('IMAGE')
ResNameStr CSTRING(200)
Inside the Global Map:
MODULE('Win32.lib')
GetModuleHandle(*LPCSTR), HMODULE, PASCAL, RAW, NAME('GetModuleHandleA')
FindResource(UNSIGNED, LONG, LONG), UNSIGNED, PASCAL, RAW, NAME('findResourceA')
SizeOfResource(UNSIGNED, UNSIGNED), ULONG, PASCAL
LoadResource(UNSIGNED, UNSIGNED), UNSIGNED, PASCAL, RAW
LockResource(UNSIGNED), LONG, PASCAL
FreeResource(UNSIGNED), BOOL, PASCAL, PROC
CreateFile(*CSTRING, LONG, LONG, LONG, LONG, LONG, LONG), LONG, RAW, PASCAL, NAME('CreateFileA')
WriteFile(LONG, LONG, LONG, LONG, LONG), LONG, RAW, PASCAL, NAME('WriteFile'), PROC
CloseHandle(UNSIGNED), BOOL, PASCAL, PROC, NAME('CloseHandle')
GetLastError(), ULONG, PASCAL
END
In a procedure:
ResNameStr = 'Prononcer_html_bmp'
FilName = LONGPATH(PATH()) & '\Prononcer.html'
hRes = FindResource(SYSTEM{Prop:AppInstance}, ADDRESS(ResNameStr), ADDRESS(ResTypeStr))
hgMem = LoadResource(SYSTEM{Prop:AppInstance}, hRes)
lpRes = LockResource(hgMem)
cbRes = SizeOfResource(SYSTEM{Prop:AppInstance}, hRes)
hFile = CreateFile(FilName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
CLEAR(cbWri)
IF NOT WriteFile(hFile, lpRes, cbRes, ADDRESS(cbWri), 0) END
CloseHandle(hFile)
FreeResource(hgMem)
HTH