使用.NET DLL的经典ASP类型不匹配

时间:2014-07-25 11:30:38

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

我在尝试访问从VB.NET DLL中作为数组提取的数据时遇到问题。

DLL已正确注册并在为asp经典页面提供服务的Web服务器上工作。

我使用vb6程序测试了dll,它检索了我期望的数据。 这是我用过的代码。

Dim commItems
commItems = c.GetCommTypes

For i = LBound(commItems) To UBound(commItems)
    Me.Label2.Caption = "Item: " & commItems(i).CommTypeID & " - " & commItems(i).CommTypeName
    DoEvents
    Sleep (1000)
Next

我得到的错误信息如下,当尝试做同样的事情是asp clasic

Microsoft VBScript runtime error '800a000d'

Type mismatch

/commtype.asp, line 13  

这是我的asp代码

Dim Core    
Set Core = Server.Createobject("Advantage.Dealer.Email.CoreClassLibrary.CoreClass") 

dim commItems
commItems = Core.GetCommTypes

For i = LBound(commItems) to UBound(commItems)
    Response.Write commItems(i).CommTypeID

Next

我不确定我做错了什么,但如果我运行此代码

Dim Core    
Set Core = Server.Createobject("Advantage.Dealer.Email.CoreClassLibrary.CoreClass") 

dim commItems
commItems = Core.GetCommTypes

For i = LBound(commItems) to UBound(commItems)
    Response.Write  i
Next

我得到了

0123

所以有些东西在起作用,但不是我想要它。

请注意,它应该返回4行数据

2 个答案:

答案 0 :(得分:0)

我会通过Core.GetCommTypes()方法查看数组中返回的类型的COM接口。

< InsiderKnowledge>

Advantage.Dealer.Email.ModelClassLibrary.CommType类似乎没有声明COM接口。

这与您的VB6客户端无法成功使用其属性相符。您是否在对它们执行VB6和VB脚本测试之间修改了程序集/程序集?

< / InsiderKnowledge>

答案 1 :(得分:0)

好的,经过几个小时的搜索,我找到了我想要的解决方案。

我在这里找到了答案 http://bytes.com/topic/asp-classic/answers/167046-type-mismatch-error-when-accessing-array

就在帖子的底部。

基本上我传递的是我的类类型的数组,而我应该做的是返回一个System.Object类型的数组。我对.net DLL进行了一些更改,以便返回一个CommType类的数组,而不是返回一个System.Object数组