这对我来说很奇怪。我能够设置环境,以便我可以从传统的ASP页面调用.NET方法(通过COM)。
所有内容实际上都按预期工作,直到我必须调用需要.NET类型的.NET方法。
所以我有一个名为
的方法我在.Net
中有这样的功能Public Sub SetTable(ByVal _City As City, ByVal _Country As Country)
'doing some thing
End Sub
我有这样的asp代码:
dim CountryUtil, City, Country
set CountryUtil= Server.CreateObject("mydll.CountryUtil")
set city = Server.CreateObject("mydll.City")
set Country = Server.CreateObject("mydll.Country")
city.id= 123
city.property = "so and so"
Country.id= 123
Country.property = "so and so"
categoryUtil.SetTable(City, Country)
'我在这里得到这个错误:
'Microsoft VBScript运行时错误'800a0005' '无效的过程调用或参数:'SetTable'
提前致谢。
答案 0 :(得分:0)
如果countryUtil
是一个类,您可能必须首先启动它的新实例
而且,您可以创建新变量,而不是Set
ting。不要忘记区分大小写。如果你试图通过城市而不是城市,它会给你带来麻烦。
''# Create a new instance of the categoryUtil Class
Dim countryUtil As New mydll.CountryUtil
Dim city As New mydll.City
Dim country As New mydll.Country
city.id= 123
city.property = "so and so"
country.id= 123
country.property = "so and so"
''# Instead of using the Class directly, you use the new instance of the Class
''# and pass the lowercase variables instead of the UpperCase Classes.
countryUtil.SetTable(city, country)
如果您使用的是.NET框架的更高版本,则可以像这样缩短它
''# Create a new instance of the categoryUtil Class
Dim countryUtil As New mydll.CountryUtil
Dim city As New mydll.City With {.id = 123, .property="so and so"}
Dim country As New mydll.Country With {.id=123, .property="so and so"}
''# Instead of using the Class directly, you use the new instance of the Class
''# and pass the lowercase variables instead of the UpperCase Classes.
countryUtil.SetTable(city, country)
查看此链接,了解如何混合asp和asp.net
http://knol.google.com/k/from-classic-asp-to-asp-net-and-back#
答案 1 :(得分:0)
您设置为参数值的ASP值为VARIANT
。
但是你在函数中定义了不同的变量类型。
示例:
.NET代码:
Public Sub Test(param as String)
经典ASP:
Dim yourParam : yourParam = "Testvalue"
YourClass.Test(yourParam)
这会失败。
经典ASP:
Dim yourParam : yourParam = "Testvalue"
YourClass.Test(CStr(yourParam))
这样可行。
因此,在调用函数时,您需要注意设置正确的变量类型!在经典ASP中,一切都是VARIANT
。
旁注:字典对象,数组很难处理,我设法在.NET中将变量定义为object[]
并在类中转换它们。