带有 VB6/asp 错误的 C# COM 对象

标签 c# com asp-classic vb6

我正在尝试通过 COM 公开 C# 类库,以便我可以在经典的 asp 网站中使用它。

我用过 sn - k、regasm 和 gacutil。我现在能做的就是回显字符串。

以类变量作为输入的方法对我不起作用。即我的测试方法 EchoPerson(Person p) 返回名字和姓氏的字符串不起作用。我收到运行时错误 5 - 无效的过程调用或参数。

请让我知道我缺少什么。而且我对VB一窍不通。我需要做什么才能让智能发挥作用。

下面是我的 C# 测试代码

namespace MrdcToFastCom
{

    public class Person : MrdcToFastCom.IPerson
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }


    public class ComTester : MrdcToFastCom.IComTester
    {
        public string EchoString(string s)
        {
            return ("Echo: " + s);
        }

        public string Hello()
        {
            return "Hello";
        }


        public string EchoPerson(ref Person p)
        {
            return string.Format("{0} {1}", p.FirstName, p.LastName);
        }

    }

}

和VB6调用

Private Sub btnClickMe_Click() 

    Dim ct
    Set ct = New MrdcToFastCom.ComTester

    Dim p
    Set p = New MrdcToFastCom.Person
    p.FirstName = "Joe"
    p.LastName = "Test"

    Dim s
    s = ct.EchoPerson(p) ''#Error on this line
    tbx1.Text = s


End Sub

最佳答案

这是您应该考虑使用的模式:-

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("B4CAC74B-ADE0-4ac7-AD0E-26E6439F9CF7")]
public interface _IPerson
{
    string FirstName { get; set; }     
    string LastName { get; set; }     
}

[ClassInterface(ClassInterfaceType.None)]
[Guid("A3C553DC-A348-43e4-957A-F94D23E3300E")]
public class Person :  _IPerson      
{      
    public string FirstName { get; set; }      
    public string LastName { get; set; }      
}

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("4B527235-6738-4853-BEA0-FB3087C89291")]
public interface _ComTester
{
     string EchoPerson(Person person);
}

[ClassInterface(ClassInterfaceType.None)]
[Guid("C753D72B-C802-44ae-946A-E3F6D7C5D14B")]
public class ComTester : _ComTester
{
    public string EchoPerson(Person person)
    {
        return person.FirstName + " " + person.LastName;
    }
}

这种方法使您可以更好地控制 .NET 组件公开的 COM 接口(interface)。仅公开由接口(interface)定义的成员以供 COM 客户端使用。

关于带有 VB6/asp 错误的 C# COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2791996/

相关文章:

c# - 这足以签署数据吗?

c# - 防止程序在控制台窗口关闭时关闭

com - 使用 PowerShell : how to save IStream to file? 创建 ISO 镜像

debugging - 使用console.log进行经典ASP调试

c# - 如何使用 C# .net 计算 gridview 中特定列值的总和

C++、COM 和传递字符串

.net - 在 VB6 或经典 ASP 中使用 .NET

sql - 使用变量名称创建新的 mdb 表

jquery - 将字符串添加到使用 jquery 动态生成的属性中

c# - 在 OnInit() 中获取控件值的最佳方法是什么?