VB6 dll在VB6应用程序中工作,而不是在ASP中

时间:2011-08-23 13:46:12

标签: dll com vb6 vbscript asp-classic

我正在使用asp开发一个旧项目 在我成为.net开发人员

之前,我从未使用过vb6或asp

反正

我创建了一个.net dll并更改了一些编译选项以使其与vb6一起使用 代码无关紧要

我在vb6

中创建了一个“wrapper kinda”dll
Public Function EncryptWrapper(ByVal parameterstring As String, ByVal isShaIn As String, ByVal HashType As String) As String
    Dim o
    Set o = CreateObject("SHA1Module.Conversion")
    EncryptWrapper = CStr(o.EncryptToSHA1(CStr(parameterstring), CBool(isShaIn), CLng(HashType)))
End Function

和vb6中的一个调用它的表单

    Private Sub Command1_Click()
    Dim message
    Dim myObject
    Set myObject = CreateObject("SHAModuleWrapper.Encryption")
    message = myObject.EncryptWrapper(txtIn.Text, "1", "2")
    Set myObject = Nothing
    txtOut.Text = message
End Sub

这完美无缺

现在在asp中我尝试调用该DLL并且出现错误

<%  Dim strMessage 
    Dim message
    strMessage = "hello"
    Dim myObject
    Set myObject = Server.CreateObject("SHAModuleWrapper.Encryption")
        message = myObject.EncryptWrapper("testdagtestdagtest", "1", "0")
    Response.Write(message)
%>

这是错误消息

SHAModuleWrapper错误'800a0005'

无效的过程调用或参数

/asptest/Default.asp,第15行

这不是参数或输出 这部分导致了麻烦

**Dim o
Set o = CreateObject("SHA1Module.Conversion")
EncryptWrapper = CStr(o.EncryptToSHA1(CStr(parameterstring), CBool(isShaIn), CLng(HashType)))**

有人有想法吗?

4 个答案:

答案 0 :(得分:1)

Dim o 
Dim message
Dim myObject

这些线条值得关注。这些将是一种变体,因为它们不是定义的类型。

Option Explicit是你在VB6中的朋友 - 永远使用它!

请查看此链接:Avoid program bugs in VB6 with the Option Explicit statement了解详情。

答案 1 :(得分:1)

很多挫折和批处理文件后来我找到了解决方案。 我需要为我的程序集创建一个强名称并在GAC中注册它

这是一个关于如何解决此问题的好的分步教程 Tutorial

这两个步骤帮助了我

8)生成公钥/私钥对

sn -k MarkItUp.key

9)将属性添加到我的程序集中进行注册:

<Assembly: AssemblyKeyFile("C:\MarkItUp.key")>

答案 2 :(得分:0)

你的坏代码中你有 Set o = CreateObject("SHA1Module.Conversion")
应该是 Set o = CreateObject("SHA1Module.Encryption")

答案 3 :(得分:0)

检查IUSR_ 计算机是否有权执行您的dll。