LB Booster
General >> General Board >> Problem with a Cheetah function
http://lbb.conforums.com/index.cgi?board=general&action=display&num=1473409612

Problem with a Cheetah function
Post by Jack Kelly on Sep 9th, 2016, 08:26am

Richard,

First I want to say that everything you said about "wrappers" is true. They're probably not necessary, and are rarely supported. However, I don't have sufficient documentation or expertise to access Cheetah2.dll directly. Walt Decker's LB dll wrapper has been working sufficiently well for me up to this point. I am hoping you can give this problem some thought before I go looking for Walt, or post on the LB forum.

I cannot get any output from ""DBADDDATE". It doesn't generate an error, but always returns an empty string. Two other date functions have been working correctly. I know this is outside your large area of responsibility, but any suggestions will be much appreciated. Let me know if you don't have the two Cheetah dll files handy.

Thanks,
Jack

Code:
open "LBcheetah2.dll" for dll as #DBF
print "DBaddDate$(=|"; DBaddDate$("20151231", 5); "|"
print DBdaysApart("20151231", "20160105")
[ProgramEnd]
print "Program ended."
end

function DBaddDate$(StartDate$, Days)
    StartDate$ = trim$(StartDate$) + chr$(0)
    CallDll #DBF, "DBADDDATE", StartDate$ AS PTR, AddDate$ AS PTR, _
            Days AS LONG, Result AS VOID
' "DBADDDATE", StartDate$ AS PTR, AddDate$ AS PTR,Days AS LONG, Result AS VOID
' (from LBCheat.INC.BAS)
    if DBerror("DBADDDATE") then goto [ProgramEnd]
    DBaddDate$=stripped$(AddDate$)
end function

function DBdaysApart(DateFrom$, DateTo$)
    DateFrom$ = trim$(DateFrom$) + chr$(0)
    DateTo$ = trim$(DateTo$) + chr$(0)
    CallDll #DBF,  "DBDAYSAPART", DateFrom$ AS PTR, DateTo$ AS PTR, _
            DBdaysApart AS LONG
    if DBerror("DBDAYSAPART") then goto [ProgramEnd]
end function

function DBerror(ErrorNote$)
    CallDll #DBF, "DBERROR", ErrorCode as Long
    select case ErrorCode
        case 0
            DBerror=0
            exit function
        case else
            notice "DB Error "+str$(ErrorCode)+chr$(13)+ErrorNote$
            DBerror=ErrorCode
    end select
    CallDll #DBF,"DBRESETERROR", result as Void
end function

function stripped$(a$)
    a$=trim$(a$)
        if right$(a$,1)=chr$(0) then a$=left$(a$,len(a$)-1)
    stripped$=trim$(a$)
end function
 

Re: Problem with a Cheetah function
Post by Richard Russell on Sep 9th, 2016, 08:55am

on Sep 9th, 2016, 08:26am, Jack Kelly wrote:
I cannot get any output from ""DBADDDATE". It doesn't generate an error, but always returns an empty string.

That appears to be because you don't allocate any memory to hold the returned string! Look at this code:

Code:
    StartDate$ = trim$(StartDate$) + chr$(0)
    CallDll #DBF, "DBADDDATE", StartDate$ AS PTR, AddDate$ AS PTR, _
            Days AS LONG, Result AS VOID 

StartDate$ is (I presume) an input to the function and AddDate$ is the output from the function. That means you must initialize AddDate$ to a dummy string (it doesn't matter what it contains) which is at least as long as the longest string that can ever be returned from the function. Something like this:

Code:
    StartDate$ = trim$(StartDate$) + chr$(0)
    AddDate$ = space$(MAX.DATE.LENGTH) + chr$(0)
    CallDll #DBF, "DBADDDATE", StartDate$ AS PTR, AddDate$ AS PTR, _
            Days AS LONG, Result AS VOID 

That should hopefully fix the problem. Here I'm assuming that MAX.DATE.LENGTH is a global constant.

Richard.
Re: Problem with a Cheetah function
Post by Jack Kelly on Sep 9th, 2016, 12:29pm

Thanks Richard, that did the trick! Thank you again, for the umpteenth time!