Invalid Procedure Call or Arguement

M

Matt

I am receiving the following error from the simple script below. This works
fine from a .NET form but when I access the dll from a Classic ASP page it
fails.

Microsoft VBScript runtime error '800a0005'

Invalid procedure call or argument: 'GetGroups'


Dim oUser 'As mnaSecurityUser
Dim oDBAdapter 'As mnasecurityDBAdapter
Dim group 'As mnasecurityGroup

Set oUser = Server.CreateObject("mnaSecurityControl.mnasecurityUser")
Set oDBAdapter =
Server.CreateObject("mnaSecurityControl.mnasecurityDBAdapter")

Set oUser = oDBAdapter.GetUser("mamarsha")
'This works ok
Response.Write "'" & oUser.FirstName & "'"

'This line returns the error
Set oUser.Groups = oDBAdapter.GetGroups(oUser)

For each group in oUser.Groups
Response.Write "'" & group.name & "'"
Next

GetGroups is a method that accepts an mnasecurityUser object as a parameter.
Groups (in oUser.Groups) is a collection object property of the
mnasecurityUser object.
 
M

Matt

I have found the culprit but I am not sure why it worked in .NET ok but not
from an ASP page? The GetUsers function accepted a parameter of the type
mnasecurityUser object.



Public Function GetUsers(ByRef oUser as mnasecurityUser) as
mnasecurityGroups



From my code I passed in oUser which was instantiated as a mnasecurityUser
object (see previous post for code)



I changed the function in my object to accept a UserID as an integer and
everything worked fine.



Public Function GetUsers(ByRef iUser As Integer) as mnasecurityGroups



From my Asp page I updated the following line of code



Set oUser.Groups = oDBAdpater.GetUsers(oUser)



to



Set oUser.Groups = oDBAdpater.GetUsers(oUser.ID)



Does anyone know why I can't pass an object as a parameter from an ASP page?
Or let me know what I did wrong in my ASP page when I was trying to pass the
object?



Thanks.
 
B

Bob Lehmann

Does anyone know why I can't pass an object as a parameter

By 'parameter', I assume you mean argument.

You can pass objects to Subs and Functions in VBScript. What you can't do,
is declare the type for the Function / Sub argument.

No -
Public Function GetUsers(ByRef oUser as mnasecurityUser)

Yes -
Public Function GetUsers(ByRef oUser)

Bob Lehmann
 
B

Bob Lehmann

Oops! I didn't read your initial post.

Still pretty much the same answer.

Everything in VBScript is a variant, so, if I remember correctly, the args
in the dll's Subs / Functions need to be of type Variant.


Bob Lehmann
 
M

Matt

Thanks Bob.

If I set the argument to VariantType in my function, how can I then access
the object properties in the function?
 
A

Anthony Jones

Matt said:
Thanks Bob.

If I set the argument to VariantType in my function, how can I then access
the object properties in the function?

Your real problem is the use of a ByRef. The only argument that VBScript
can pass byref is a variant.

Change the parameter to ByVal oUser as mnasecurityUser. You really should
use ByVal for most parameters anyway regardless of whether they are to be
called from script or not.

Anthony.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,969
Messages
2,570,161
Members
46,705
Latest member
Stefkari24

Latest Threads

Top