【问题标题】:VB6 dll working in VB6 application, not in ASPVB6 dll 在 VB6 应用程序中工作,而不是在 ASP 中
【发布时间】:2011-11-01 23:35:21
【问题描述】:

我正在用 asp 做一个旧项目 在我成为 .net 开发人员之前,我从未使用过 vb6 或 asp

不管怎样

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

我在 vb6 中制作了一个“包装器”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)))**

有人有想法吗?

【问题讨论】:

    标签: dll com vb6 vbscript asp-classic


    【解决方案1】:
    Dim o 
    Dim message
    Dim myObject
    

    这些行令人担忧。这些将是一个变体,因为它们不是定义的类型。

    Option Explicit 是您在 VB6 中的朋友 - 始终使用它!

    查看此链接:Avoid program bugs in VB6 with the Option Explicit statement 了解更多信息。

    【讨论】:

    • 感谢有趣的链接,我不习惯使用 vb 甚至 vb.net。我写这个草率代码的原因是因为 vb6 中的智能感知不像我在 vs2010/vs2008 中习惯的那样专业。我想我采取了简单的方法:)。
    【解决方案2】:

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

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

    这两个步骤帮助了我

    8) 生成公钥/私钥对

    sn -k MarkItUp.key
    

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

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

    【讨论】:

      【解决方案3】:

      在你的错误代码中
      Set o = CreateObject("SHA1Module.Conversion")
      应该是
      Set o = CreateObject("SHA1Module.Encryption")

      【讨论】:

      • 我的问题可能看起来有点混乱。但 SHA1Module.Conversion 是 .net 类,SHAModuleWrapper.Encrypten 是 vb6 类(包装器)。我尝试包装的唯一原因是办公室里有人认为这可能有用。
      【解决方案4】:

      检查 IUSR_Machine 是否有权执行您的 dll。

      【讨论】:

        猜你喜欢
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-19
        相关资源
        最近更新 更多