Valhalla Legends Archive

Programming => General Programming => Visual Basic Programming => Topic started by: Sorc_Polgara on June 28, 2004, 08:22 PM

Title: [VB6] Returning Objects with Public Functions (in Module)
Post by: Sorc_Polgara on June 28, 2004, 08:22 PM
I want to be able to return a TextStream object... I want to put it in a module and I want it to be like a Public Function.

I'm using a TextStream object frequently and repeating the same code over and I thought that I could make it function to save some time.

I've tried making a Public Function but I can't get it to work.  In order to make the TextStream object (tst) that I want, a FileSystemObject (fso) must be set.

Here is my code in the module


Public Function CreateTST(ByVal FileName As String, ByVal IOMode As Long, ByVal Create As Boolean) As TextStream
   Dim fso As FileSystemObject
   Dim tst As TextStream
   
   Set fso = New FileSystemObject
   Set tst = fso.OpenTextFile(FileName, IOMode, Create)
   CreateTST = tst
End Function


It works fine when I insert the code into the Sub that I want it to be used in.

This is the call I make


Dim tst As TextStream
tst = CreateTST(strFileName, 1, False)


the argument "1" in the function call is the numerical representation for constant ForReading which must be stated inorder to use OpenTextFile.

I think it should work!  but all I get is the "Run-time error '5':  Invalid Procedure call or argument"

Please help!  How can I return a TextStream/FileSystemObject!
Title: Re:[VB6] Returning Objects with Public Functions (in Module)
Post by: Stealth on June 29, 2004, 08:34 AM
Try returning it as a Variant into a TextStream object:


Dim objTS as TextStream

objTS = CreateTST(myFilename, 1, True)

'// ...

Public Function CreateTST(ByVal FileName As String, ByVal IOMode As Long, ByVal Create As Boolean) As Variant
Title: Re:[VB6] Returning Objects with Public Functions (in Module)
Post by: Sorc_Polgara on June 29, 2004, 01:26 PM
Quote from: Stealth on June 29, 2004, 08:34 AM
Try returning it as a Variant into a TextStream object:


Dim objTS as TextStream

objTS = CreateTST(myFilename, 1, True)

'// ...

Public Function CreateTST(ByVal FileName As String, ByVal IOMode As Long, ByVal Create As Boolean) As Variant


I changed it, but I get a different run-time error, "Run-time error '438':  Object doesn't support this property or method"

Here is the code calling to the function...

Dim tst1 As TextStream
tst1 = CreateTST(strFileName, 1, False)


... the function in the module


Public Function CreateTST(ByVal FileName As String, ByVal IOMode As Long, ByVal Create As Boolean) As Variant
   Dim fso As FileSystemObject
   Dim tst As TextStream
   
   Set fso = New FileSystemObject
   Set tst = fso.OpenTextFile(FileName, IOMode, Create)
   CreateTST = tst
End Function


When I debug it the following is highlighted in the function above,


CreateTST = tst


Is there another way to return an object like a FileSystemObject?
Title: Re:[VB6] Returning Objects with Public Functions (in Module)
Post by: Stealth on June 29, 2004, 05:58 PM
Perhaps create it ahead of time and pass it ByRef?
Title: Re:[VB6] Returning Objects with Public Functions (in Module)
Post by: Adron on June 30, 2004, 05:37 PM
You could also try adding "Set" like this:


Set tst = CreateTST(strFileName, 1, False)


Your assignments without "Set" may be trying to assign to the default property.