Announcement

Collapse
No announcement yet.

GetLastError - SetLastError

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
    Josef Lindinger
    Member

  • Josef Lindinger
    replied
    Lance,

    Originally posted by Lance Edmonds:
    R&D are certainly on the ball today... here is their response:
    The ByVal string requires use of a temp buffer allocated from OLE string space. That space must be allocated and released by PB with Win32 API calls.

    GetLastError MUST be called IMMEDIATELY after an API function call, with no intervening API function calls, if it is to be of any value.

    That is simply not possible in a case like this. GetLastError is of little value except when called inline, immediately after another function call.

    No intervening compiler function calls or compiler function exits. That's how Windows works...
    Thank you for this information. But in this case, there must be a function like VB´s LastDllError.
    Please add this to the request-list for the next version.



    ------------------

    mailto:[email protected]t.com[email protected]</A> www.selisoft.com

    Leave a comment:

  • Lance Edmonds
    Member

  • Lance Edmonds
    replied
    R&D are certainly on the ball today... here is their response:
    The ByVal string requires use of a temp buffer allocated from OLE string space. That space must be allocated and released by PB with Win32 API calls.

    GetLastError MUST be called IMMEDIATELY after an API function call, with no intervening API function calls, if it is to be of any value.

    That is simply not possible in a case like this. GetLastError is of little value except when called inline, immediately after another function call.

    No intervening compiler function calls or compiler function exits. That's how Windows works...

    ------------------
    Lance
    PowerBASIC Support
    mailto:[email protected][email protected]</A>

    Leave a comment:

  • Guest
    Guest

  • Guest
    Guest replied
    If ByVal is not used in "fctTest" there appears to be no problem.
    Excerpt from "Win32.hlp":
    You should call the GetLastError function immediately when a function's return value indicates that such a call will return useful data.

    It appears the stack popping when returning from the function plays some role.
    If the function return value is assigned the value of GetLastError(), all is well.
    Or, if s$ is set to "" before SetLastError is called, all is well.
    Code:
     
    #Register None
    #Dim All
    #Option Version4
    #Include "WIN32API.INC"
     
     
    Function fctTest(ByVal s As String) As Long
      Static Cnt As Long
      Dim lRet As Long
      Incr cnt
      SetLastError 123+cnt
     
      Function = GetLastError()
    End Function
     
    Function WINMAIN (ByVal CurInst As Long, _
        ByVal PrvInst As Long, _
        CmdLine As Asciiz Ptr, _
        ByVal CmdShow&) As Long
         
      Dim lRet As Long
      Dim sTmp As String
      sTmp = ""
      lRet = fctTest(sTmp)
     
      StdOut "1st GLE:" & Str$(lRet)
     
      sTmp = "abc"
      lRet = fctTest(sTmp)
     
      StdOut "2nd GLE:" & Str$(lRet)
    End Function
    ------------------
    Ron

    [This message has been edited by Ron Pierce (edited November 02, 2000).]

    Leave a comment:

  • Semen Matusovski
    Member

  • Semen Matusovski
    replied
    Well ...
    For dynamic strings - OLE.
    But what is here ? MoveMemory ?

    Code:
       #Compile Exe
       #Register None
       #Dim All
       #Include "WIN32API.INC"
    
       Function PbMain
          Dim sTmp As String * 4
          SetLastError 123
          sTmp = "abc"
          MsgBox Str$(GetLastError)
       End Function
    ------------------
    E-MAIL: [email protected]

    Leave a comment:

  • Lance Edmonds
    Member

  • Lance Edmonds
    replied
    There is *nothing* wrong with the string routines themselves, so the problem is most likely to be connected to the Windows OLE string engine which is clearing SetLastError(). In other words, I do not believe it to be a PowerBASIC problem per se.

    I'll ask R&D about it and let you know what I find out.

    Thanks!


    ------------------
    Lance
    PowerBASIC Support
    mailto:[email protected][email protected]</A>

    Leave a comment:

  • Josef Lindinger
    Member

  • Josef Lindinger
    started a topic GetLastError - SetLastError

    GetLastError - SetLastError

    Hi,

    please take a look at the following program:
    Code:
    #COMPILE EXE "c:\temp\test.exe"
    #INCLUDE "WIN32API.INC"
    
    SUB fctTest(BYVAL s AS STRING)
        CALL SetLastError(123)
    END SUB
    
    FUNCTION WINMAIN (BYVAL CurInst AS LONG, _
                      BYVAL PrvInst AS LONG, _
                      CmdLine AS ASCIIZ PTR, _
                      BYVAL CmdShow&) EXPORT AS LONG
    DIM lRet AS LONG
    DIM sTmp AS STRING
    
        sTmp = ""
        CALL fctTest(sTmp)
        lRet = GetLastError()
        MSGBOX STR$(lRet)
        
        sTmp = "abc"
        CALL fctTest(sTmp)
        lRet = GetLastError()
        MSGBOX STR$(lRet) 
    
    END FUNCTION
    What´s wrong with the string-routines in PBDLL?
    API-LastError must not be changed by PBDLL!
    (and if there must be an internal function like
    VB´s Err.LastDLLError)

    Thank you!
    ------------------

    mailto:[email protected][email protected]</A> www.selisoft.com

    [This message has been edited by Josef Lindinger (edited November 01, 2000).]
Working...
X