Benoit, Here is more detail on the problem... What I'm attempting to do is read/write CISAM files from Gambas3. I am using the external VBISAM library "libvbisam.so". I have a VBISAM class and a driver program. Here is the VBISAM Class:
---------------------------------------------Begin VBISAM------------------------------------- Class VBISAM Const ISFIRST As Integer = 0 Const ISLAST As Integer = 1 Const ISNEXT As Integer = 2 Const ISPREV As Integer = 3 Const ISCURR As Integer = 4 Const ISEQUAL As Integer = 5 Const ISGREAT As Integer = 6 Const ISGTEQ As Integer = 7 Const ISLOCK As Integer = &H100& Const ISSKIPLOCK As Integer = &H200& Const ISWAIT As Integer = &H400& Const ISLCKW As Integer = &H500& Const ISKEEPLOCK As Integer = &H800& Const ISAUTOLOCK As Integer = &H200& Const ISMANULOCK As Integer = &H400& Const ISEXCLLOCK As Integer = &H800& Const ISINPUT As Integer = 0 Const ISOUTPUT As Integer = 1 Const ISINOUT As Integer = 2 Const ISTRANS As Integer = 4 Const ISNOLOG As Integer = 8 Const ISVARLEN As Integer = &H10& Const ISFIXLEN As Integer = 0 Extern isopen(FNAME As String, MODE As Integer) As Integer In "libvbisam" Extern isread(FD As Integer, BUFF As Pointer, MODE As Integer) As Integer In "libvbisam" Extern isclose(FD As Integer) As Integer In "libvbisam" Public RecLen As Integer = 768 Private FD As Integer Public ReturnCode As Integer Private BUFF As Pointer = Alloc(RecLen) Public DataRecord As String Private Dictionary As Collection Private Sub ReadDict(FName As String) Dim items As New String[30] Dim DictIn As File Dim TextLine As String Dim i As String Dim x As Integer Dim Dict As DictEntry DictIn = Open FNAME & ".dic" For Read ' Loop through each line until the end of file. ' Eof() returns true at the end of the file. Dictionary = New Collection While Not Eof(DictIn) Line Input #DictIn, TextLine ' Split each line into fields ' Note that we set the " char as an escape char items = Split(TextLine, ",", "\"") Dict = New DictEntry items[3] = Replace$(items[3], "-", "_") Dict.DataName = items[3] Dict.Pos = items[4] + 1 Dict.Len = items[5] Dict.Type = items[6] Dict.Occurs = items[8] Dict.Edit = items[12] Dict.SerialNo = items[19] Dictionary[items[3]] = Dict Wend Close #DictIn End Public Sub _new(FNAME As String, Optional MODE As Integer = ISINPUT + ISMANULOCK) FD = isopen(FNAME, MODE) ReadDict(FNAME) End Public Sub close() Dim ReturnCode As Integer ReturnCode = isclose(FD) Free(BUFF) End Public Sub first() As Integer Dim ch As Byte Dim tmp As Pointer = BUFF Dim I As Integer Dim BuffStream As Stream ReturnCode = isread(FD, BUFF, 0) If ReturnCode < 0 Then Return ReturnCode Endif BuffStream = Memory BUFF For Write DataRecord = Read #BuffStream As String Return ReturnCode End Public Sub _next() Dim ch As Byte Dim tmp As Pointer = BUFF Dim I As Integer Dim BuffStream As Stream BuffStream = Memory BUFF For Write ReturnCode = isread(FD, BUFF, ISNEXT) If ReturnCode < 0 Then Enum.Stop DataRecord = Read #BuffStream As String Return End Public Function _unknown(...) As Variant Dim Params As Integer = Param.Count Dim D As DictEntry = Dictionary[Upper$(Param.Name)] Dim Value As Variant If Param.Property If Params = 0 Then Return Mid$(DataRecord, D.Pos, D.Len) Else Value = Param[0] Mid$(DataRecord, D.Pos, D.Len) = Value Endif Endif End -----------------------------------------------End VBISAM------------------------------------- And here is the driver: ----------------------------------------------Begin MMain--------------------------------------- ' Gambas module file Public Sub Main() Dim CUSTOMER As VBISAM Dim RESULT As Integer Dim CustCount As Integer = 0 Dim Branch As String CUSTOMER = New VBISAM("/data/CUSTFILE") RESULT = CUSTOMER.first() For Each CUSTOMER Branch = CUSTOMER.Branch If CUSTOMER.Branch = "000" Then Goto ReadNext Print CUSTOMER.Key, CUSTOMER.Name, CUSTOMER.City, CUSTOMER.State, CUSTOMER.Zip_Code CustCount += 1 ReadNext: Next CUSTOMER.close() Print "Total Customers: " & CustCount End -------------------------------------------End MMain---------------------------------------- The error message I get in line 12 of MMain is: Type mismatch: Wanted Number, Date, or String, got Function instead in MMain:12. Without the "If CUSTOMER" statement, everything is fine (i.e., I can use a property as as string when I print or do other opeations). However, the "IF" statrement (line 12) doesn't like the unknown property at all! I set a breakpoint in the _unknown method of VBISAM and it gets there when using the unknown properties in print statements (or other expressions), but does not when using it in a conditional. Hope that helps, gwalborn -- Gary D. Walborn gwalb...@gmail.com ------------------------------------------------------------------------------ All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-d2d-c2 _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user