具有VB6/asp错误的C#COM对象 [英] C# COM objects with VB6/asp error

查看:77
本文介绍了具有VB6/asp错误的C#COM对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to expose a C# class library via COM so that I can use it in a classic asp web site.

我使用过sn-k,regasm和gacutil.我现在所能做的就是回显字符串.

I've used sn - k, regasm and gacutil. About all I can do now though is echo back strings.

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

Methods which take Class variables as input are not working for me. ie my test method EchoPerson(Person p) which returns a string of the first and last name doesn't work. I get a runtime error 5 - Invalid procedure call or argument.

请让我知道我在想什么.另外,我在VB中没有智慧.我需要做些什么才能使智能发挥作用.

Please let me know what I am missing. Also I have no intellisence in VB. What do I need to do to get the intellisence working.

下面是我的C#测试代码

Below is my C# test code

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

推荐答案

以下是您应考虑使用的模式:-

Here is the pattern you should consider using:-

[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接口.仅暴露由接口定义的成员,以供COM客户端使用.

This approach gives you much more control over the COM Interface exposed by the .NET components. Only the members defined by interface are exposed for consumption by COM clients.

这篇关于具有VB6/asp错误的C#COM对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆