LB Booster
Programming >> Compatibility with LB4 >> handle variable with files
http://lbb.conforums.com/index.cgi?board=compatibility&action=display&num=1495042333

handle variable with files
Post by wscbill on May 17th, 2017, 5:32pm

Getting the "handle used for incompatible devices" error in LBB when using a handle variable for files. Works successfully in LB.

The situation involves opening an unknown number of files, some of which may need to be open concurrently.

The troubleshooting write-up indicates this error occurs when the same handle is used for file and window, etc. Only files used here.

Some example code that generates the error.

Code:
    fn = fn+1
    hvar$ = "#B" + str$(fn)
    print hvar$
    open "errors1.txt" for input as #hvar$
    line input #hvar$, s$ 
    print s$
    close #hvar$

    fn = fn+1
    hvar$ = "#B" + str$(fn)
    print hvar$
    open "errors2.txt" for input as #hvar$
    line input #hvar$, s$ 
    print s$
    close #hvar$

    end

 

Re: handle variable with files
Post by Richard Russell on May 17th, 2017, 6:58pm

on May 17th, 2017, 5:32pm, wscbill wrote:
Getting the "handle used for incompatible devices" error in LBB when using a handle variable for files. Works successfully in LB.

If it works successfully in LB4 I think that's an anomaly, since my understanding is that handle variables can't be used in an OPEN statement. The correct method is surely to use MAPHANDLE as follows:

Code:
    fn = fn+1
    hvar$ = "#B" + str$(fn)
    print hvar$
    open "\temp\errors.txt" for input as #hvar
    maphandle #hvar, hvar$
    line input #hvar$, s$ 
    print s$
    close #hvar$ 

Richard.

Re: handle variable with files
Post by Richard Russell on May 19th, 2017, 3:45pm

on May 17th, 2017, 6:58pm, Richard Russell wrote:
If it works successfully in LB4 I think that's an anomaly, since my understanding is that handle variables can't be used in an OPEN statement.

Just to confirm that I've checked the LB4 documentation and nowhere is there any suggestion that a handle variable can be used in an OPEN statement: none of the examples show that and the description of the statement only mentions the use of a regular handle.

If the OP's report is correct and you can, at least in some circumstances, use a handle variable this is another example of LB working differently from what the documentation states. I would not consider the usage to be safe, and it does not work in LBB.

The correct, documented, method is to use MAPHANDLE as I showed in my example, which works in both LB 4 and LBB.

Richard.
Re: handle variable with files
Post by Richard Russell on May 25th, 2017, 4:42pm

on May 19th, 2017, 3:45pm, Richard Russell wrote:
If the OP's report is correct and you can, at least in some circumstances, use a handle variable...

The report is not correct. The listed code which purports to demonstrate it working does nothing of the kind, as can be shown by running this example in LB 4.04:

Code:
    fn = fn+1
    hvar$ = "#B" + str$(fn)
    print hvar$
    open "\temp\errors.txt" for input as #hvar$
    print hvar$
    line input #B1, s$ 
    print s$
    close #hvar$ 

Printing hvar$ after the file has been opened shows that rather than the OPEN statement having opened the file with the handle #B1 as the OP claimed, it has in fact been opened with the handle #hvar1, so a subsequent attempt to read from the file with the expected handle given as a literal fails.

Richard.