Array can be local, threaded or global.
Code:
#DIM ALL 'ReadWriteArray.bas '%MakeEXE = 1 'remark to create DLL then unremark to test #IF %DEF(%MakeEXE) #COMPILE EXE DECLARE FUNCTION WriteArray LIB "MyDLL.DLL" (sFileName AS STRING,temparr() AS STRING,ecode AS LONG) AS LONG DECLARE SUB DllLoadGlobal LIB "MyDLL.DLL" (sFileName AS STRING) DECLARE FUNCTION ReadArray LIB "MyDLL.DLL" (sFileName AS STRING,temparr() AS STRING,ecode AS LONG) AS LONG FUNCTION PBMAIN AS LONG LOCAL ecode AS LONG REDIM s(1) AS STRING s(0) = "Saved to disk and" s(1) = "loaded into DLL global array" WriteArray "temp.txt",s(),ecode& DllLoadGlobal "temp.txt" 'calls ReadArray and fills gs() array in DLL END FUNCTION '==================================================================================================================== #ELSE 'DLL #COMPILE DLL "MyDll.Dll" GLOBAL gs() AS STRING FUNCTION WriteArray(sFileName AS STRING,temparr() AS STRING,ecode AS LONG) EXPORT AS LONG LOCAL hFile AS LONG hfile = FREEFILE OPEN sFileName FOR OUTPUT AS #hfile IF ERR THEN ecode = ERR:FUNCTION = ecode:BEEP:EXIT FUNCTION PRINT #hFile, temparr() IF ERR THEN ecode = ERR:BEEP:FUNCTION = ERR CLOSE #hfile END FUNCTION FUNCTION ReadArray(sFileName AS STRING,temparr() AS STRING,ecode AS LONG) EXPORT AS LONG LOCAL hFile AS LONG LOCAL elements AS LONG ERASE temparr IF ISFILE(sFilename) THEN hfile = FREEFILE OPEN sFileName FOR INPUT AS #hfile IF ERR THEN ecode = ERR:FUNCTION = ecode:BEEP:EXIT FUNCTION FILESCAN #hfile, RECORDS TO elements IF elements < 1 THEN ECODE = -1:FUNCTION = ecode:BEEP:CLOSE #hfile:BEEP:EXIT FUNCTION REDIM temparr(1 TO elements) LINE INPUT #hfile, temparr() TO elements IF ERR THEN ecode = ERR:FUNCTION = ecode:BEEP CLOSE #hfile ELSE ecode = 53:FUNCTION = ecode END IF END FUNCTION SUB DllLoadGlobal(sFileName AS STRING) EXPORT LOCAL ecode AS LONG ReadArray sFileName,gs(),ecode ? JOIN$(gs(),$CRLF),,"DLL Load Global" END SUB #ENDIF
Leave a comment: