2

嗨经典 ASP 专家,

基本上,我是 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;
        }
    }  
}

在此处输入图像描述

谢谢

4

2 回答 2

1

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

您没有将 class 类型的参数传递给 COM 方法调用。您传递的是 string "co",而不是存储在 variable 中的对象引用co

于 2013-03-27T14:58:59.143 回答
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
于 2013-03-27T15:32:40.727 回答