Как вызвать параметризованную функцию из классического ASP, созданного в C # - PullRequest
1 голос
/ 19 мая 2011

Я создал dll в C # (framework 3.5) и объявил параметризованную функцию в эту dll. Я успешно скомпилировал dll. После этого я создал классическую ASP-страницу и хочу вызвать на этой странице параметризованную функцию, которая генерирует следующую ошибку.

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)

Пожалуйста, помогите мне.

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Ты очень близко.

Мне кажется, что ваш вызов в object.GetData() передает только один параметр.В то же время, есть два GetData() метода для этого объекта COMVisible.

Но COM не поддерживает перегрузку: два метода с одинаковым именем и разными наборами параметров.

COM -> .NET - не может получить доступ к перегруженному методу

Если вы посмотрите на сгенерированный интерфейс COM, в нем будет два метода: один с именем GetData, который принимает один параметр, и один с именем GetData_2, который принимает два.Я никогда не обнаруживал это нигде;это именно то, что я наблюдал в таких случаях, как ваш.

Перегрузки в COM-взаимодействии (CCW) - имена IDispatch включают суффикс (_2, _3 и т. д.)

Если вы хотитеоба из них должны быть доступны, я бы посоветовал вам различать их по имени, а не полагаться на поведение, которое я описал.


Также: если вы сохраняете COMVisible на обоих этих GetData методах, вы должны включить их обоих в IMyStorage.

0 голосов
/ 19 мая 2011

Не пропускаете ли вы первый параметр при вызове GetData?Microsoft VBScript runtime (0x800A01C2) Неправильное количество аргументов или неверное присвоение свойства: 'GetData'

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

Возможно, следующее устраняет проблему:

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