如何从经典ASP调用参数化函数在C#中创建

问题描述:

我已经在C#(框架3.5)中创建了一个DLL,并且我已经向该dll声明了一个参数化函数。我已经成功编译了dll。之后,我创建了一个经典的ASP页面,我想从该页面调用参数化的函数,该函数生成以下错误。如何从经典ASP调用参数化函数在C#中创建

Microsoft VBScript runtime (0x800A01C2) Wrong number of arguments or invalid property assignment: 'GetData'

我附上下面

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 
using System.Text.RegularExpressions; 

namespace SayHello 
{ 
    [ComVisible(true)] 
    public class SayHello : IMyStorage 
    { 
     [ComVisible(true)] 
     public string GetData([In, MarshalAs(UnmanagedType.BStr)] string Name) 
     { 
      return "hello " + Name; 
     } 

     #region IMyStorage Members 
     [ComVisible(true)] 
     public void GetData(string name, out string helloName) 
     { 
      helloName = "hello " + name; 
     } 

     #endregion 
    } 

    [ComImport] 
    [Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")] 
    public interface IMyStorage 
    { 
     [DispId(1)] 
     void GetData([In, MarshalAs(UnmanagedType.BStr)] String name, 
      [Out, MarshalAs(UnmanagedType.BStr)] out String helloName); 
    } 
} 

代码现在我贴的ASP代码

Dim obj 
Set obj = Server.CreateObject("SayHello.SayHello") 
' Set obj = Server.CreateObject("SayHello.dll") 
' Set obj= obj.Load("SayHello.dll") 
inputStr = "myString" 
GetObj = obj.GetData(inputStr) 
SET Obj = NOTHING 
Response.Write (GetObj) 

请帮助我。

当您调用GetData函数时,您是否错过了第一个参数? Microsoft VBScript运行时(0x800A01C2)的参数或无效的属性赋值错误号码: '的GetData'

GetObj = obj.GetData(inputStr) ' where is the string name? 

也许下面的修复问题:

Dim sName 
GetObj = obj.GetData(sName, inputStr) 
Response.Write (inputStr) 

你非常接近。

它在我看来像你的电话object.GetData()只传递一个参数。 同时,该COMVisible对象上有两个GetData()方法。

但COM不支持重载:两个方法具有相同的名称和不同的参数集。

COM->.NET - can't access overloaded method

如果你看一下生成的COM接口,将有两种方法在其中,一个名为GetData带一个参数,一个叫GetData_2采用两个。我从来没有在任何地方发现这种记录这正是我在你的例子中所观察到的。

Overloads in COM interop (CCW) - IDispatch names include suffix (_2, _3, etc)

如果你想同时那些被访问的,我建议你其中明确区分的名称,而不是依赖于我所描述的行为。


另外:如果你继续COMVisible在两个那些GetData方法,你应该包括他们的成IMyStorage

+0

“错误的参数数量”表示过载问题。您可能会收到旧的COM注册信息。我建议完整:刷新你的指导,修复你的代码,并重试所有。 – Cheeso 2011-05-19 12:39:44

+0

同样的错误......我已经上了Plaese的项目请看链接:[url = http://hotfile.com/dl/118308637/f81b7f5/ReformatingSql.rar.html] http://hotfile.com/ DL/118308637/f81b7f5/ReformatingSql.rar.html [/ URL] – 2011-05-19 12:42:58