【问题标题】:Calling a .NET Function that requires a .NET type from Classic ASP从经典 ASP 调用需要 .NET 类型的 .NET 函数
【发布时间】:2011-08-03 07:41:59
【问题描述】:

请帮助我。我正在努力克服过去 2 天的问题,但我无法克服。

我能够设置环境,以便我可以从经典 ASP 页面调用 .NET 方法(通过 COM)。

在我必须调用需要 .NET 类型的 .NET 方法之前,一切实际上都按预期工作。

所以我有一个名为 SetTable 的方法,如下所示

我在 .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"

CountryUtil.SetTable(City, Country)

' 我在这里收到此错误:

'Microsoft VBScript 运行时错误'800a0005''无效的过程调用或参数:'SetTable'

提前致谢。

【问题讨论】:

  • 我正在努力寻找一个理由,将其视为一种良好的编程实践。
  • @ulluoink 有最好的解决方案——你不能在经典的 asp 中做你想做的事,因为每个变量都是一个变体。

标签: asp.net vb.net asp-classic


【解决方案1】:

在 vbscript 中,您只有变体,因此 Country 和 City 只是变体类型的对象,而不是 Country 或 City 类型的对象。

您必须更改接受“变体”(对象)的 .net 方法 SetTable(或编写一个新方法),然后将这些对象转换为您的 .net City 和 Country 对象。

【讨论】:

  • 我试过了,它对我有用我已经改变了这样的功能
  • 我试过了,它对我有用想要像上面这样的函数签名。请我如何使用相同的签名来做到这一点(例如:ByVal _City As object,ByVal _Country As Object)
  • @Avinash 我不确定我是否得到你的问题,但你不能只写一个新方法,比如 Public Sub SetTableFromASP(ByVal _City as object, ByVal _Country As Object) 'cast objects to your .net 城市和国家然后调用(原始)方法 SetTable(castedCity, castedCountry)
  • 感谢 ulluoink。这是一个很好的解决方案,但我们还有其他解决方案吗?我的客户不会接受这是问题所在。
【解决方案2】:

我的 vbscript 有点生疏了,但你不需要写这个(不用括号)吗?

CountryUtil.SetTable City, Country

【讨论】:

  • 是的,我试过了,但它对我没有用,它仍然给出类似上面的错误“Microsoft VBScript 运行时错误'800a0005''无效的过程调用或参数:'SetTable'”
  • 这个括号在这种情况下不应该有任何区别,因为SetTable 声明无论如何都是ByVal
猜你喜欢
  • 2011-12-29
  • 2013-03-04
  • 2010-09-24
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 2011-03-24
  • 1970-01-01
相关资源
最近更新 更多