従来の ASP エキスパートの皆様、こんにちは。
基本的に、私はクラシック 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;
}
}
}
ありがとう