6

クラシックasp用のcomオブジェクトを作成する必要があります。これは、.netアセンブリを作成し、comと「相互運用」できるため、次のような.netアセンブリの作成に進みました。-

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using System.Web;


namespace LMS
{

[ComVisible(true)]
public class Calc
{

    public int Add(int val1, int val2, out string[] outputz)
    {
        int total = val1 + val2;
        outputz = new string[5];
        outputz[1] = "test2";
        outputz[2] = "test3";
        outputz[3] = "test4";
        outputz[4] = "test5";
        return total;
    }


}
}

次に、私は通常のビルドを実行しました:gacutil&RegAsm

そして私の古典的なaspページで私はこれを持っていました:-

Dim params  
dim objPassport3
set objPassport3 = Server.CreateObject("LMS.Calc")
comTest2 = objPassport3.Add(1,1,params)

そして私はエラーを受け取ります:

エラータイプ:Microsoft VBScriptランタイム(0x800A0005)無効なプロシージャ呼び出しまたは引数:'追加'/eduservice/test.asp、25行目

しかし、配列を使用しないようにアセンブリを変更すると、すべて正常に機能し、アセンブリとの間で通常の文字列またはintをクラシックaspに送信することもできます。私はたくさんのことを読みましたが、同じエラーが発生します、

誰もが以前にこれを試し、成功しました、あなたの解決策を共有してください

ありがとう

4

1 に答える 1

10

ASPは、文字列やintの配列ではなく、バリアントの配列のみを処理できます。したがって、代わりにオブジェクトを使用してみてください。たとえば、

public int Add(int val1, int val2, out object outputz)
{
    int total = val1 + val2;
    outputz = new object[5]
      {
          "test1",
          "test2",
          "test3",
          "test4",
          "test5"
      };

    return total;
}
于 2009-08-31T14:05:46.840 に答える