经典ASP C#COM Microsoft VBScript运行时错误

时间:2013-03-27 14:55:48

标签: c# com asp-classic vbscript

Hi Classic ASP Experts,

基本上,我是Classic ASP和VBScript的新手,并且在尝试将复杂类型的参数传递给COM方法时获得了这个“VBScript运行时错误:无效的过程调用或参数”(下面的视频截图)。在创建服务器对象并将字符串传递给COM方法时,任何传递复杂类型参数的尝试都是徒劳的。

请帮忙。

以下是代码段:

ClassicASPHome.asp页面上的VBScript(服务器端):

<%
response.write("My first ASP script!")  

set co = Server.CreateObject("ClassicASPCOM.ComplexObject")

co.Message = "Messi"
co.Number = 100


Dim ccom
Set ccom = Server.CreateObject("ClassicASPCOM.ClassCOM")


response.Write(ccom.GetMessage("1234567890"))

'---------------直到这里工作正常

Dim ret

'---------------以下语句抛出错误

ret = ccom.PaymentDetails(co)

response.Write("Fine")

代码段(C#):

// C# Code (ClassicASPCOM.dll) built with Strong Name and Registered for COM Interop:

// Executed the following in Visual Studio Command Prompt in bin\Release folder
// Regasm ClassicASPCOM.dll

// Regasm ClassicASPCOM.dll /codebase

// Regasm ClassicASPCOM.dll /tlb

// gacutil/i ClassicASPCOM.dll

using System;
using System.Runtime.InteropServices;

namespace ClassicASPCOM
{
    [ComVisibleAttribute(true)]
    [Guid("D355BC25-B85F-4476-8D38-582F92F7B6F4")]
    public interface IComplexObject
    {
        [DispId(2221)]
        int Number {get; set;}
        [DispId(2222)]
        string Message { get; set; }
        [DispId(2223)]
        DateTime Dtime { get; set; }
    }

    [ComVisibleAttribute(true)]
    [Guid("4E602191-8D09-458E-A0D0-A0A267696F78"),
    ClassInterface(ClassInterfaceType.None)]
    public class ComplexObject : IComplexObject
    {
        int Nmbr;
        public int Number
        {
            get
            {
                return Nmbr;
            }
            set
            {
                Nmbr = value;
            }
        }

        string Msg;
        public string Message
        {
            get
            {
                return Msg;
            }
            set
            {
                Msg = value;
            }
        }

        DateTime Dt;
        public DateTime Dtime
        {
            get
            {
                return Dt;
            }
            set
            {
                Dt = value;
            }
        }
    }

    [ComVisibleAttribute(true)]
    [Guid("4042FE79-8ACA-4E5D-9F14-2FF7C6AE8D88")]
    public interface IGetMessage
    {
        [DispId(2224)]
        string GetMessage(string Message);
        [DispId(2225)]
        string PaymentDetails(ComplexObject cObject);
    }

    [ComVisibleAttribute(true)]
    [Guid("9A133858-5893-4CA7-9048-345CD0FCF535"),
    ClassInterface(ClassInterfaceType.None)]
    public class ClassCOM : IGetMessage
    {
        public string GetMessage(string Message)
        {
            return "Your Message: " + Message;
        }

        public string PaymentDetails(ComplexObject cObject)
        {
            return " Message: " + cObject.Message + " Number: " + cObject.Number;
        }
    }  
}

enter image description here

由于

2 个答案:

答案 0 :(得分:1)

  

[我在尝试将类型类的参数传递给COM方法调用时遇到错误。

您没有将类型类的参数传递给COM方法调用。您传递的是字符串"co",而不是存储在变量co中的对象引用。

答案 1 :(得分:0)

除了Eric Lippert的回答,我想知道你为什么要发表评论“工作正常到这里”因为这部分:

set co = Server.CreateObject("ClassicASPCOM.ComplexObject") ' <- variable co is now an object
co = ""                ' <- variable co is now a string with value ""
co.Message = "Messi"   ' <- You should get an "Object required" error on this line
co.Number = 100