C#类的属性在Visual Basic 6.0中不可见。

3

我在C#中创建了一个类,并将COM可见属性设置为true。但是,我无法在Visual Basic 6.0中看到它的属性。可能出了什么问题?请帮帮我。


1
有时候我会忘记包含一些通用的词语,比如public等等,这种情况发生在每个人身上,你可能需要重新检查类及其属性的访问修饰符。 - Shimmy Weitzhandler
3个回答

5

定义一个同时可见的公共接口,并让你的类实现该接口。

然后使用tlbexp.exe从你的C#程序集生成类型库:

tlbexp ComServer.dll /out:ComServer.tlb

你需要在VB6中添加对类型库的引用,而不是程序集。那么,VB6如何知道程序集实际的位置呢?这就需要使用Regasm了。它相当于.NET程序集的regsvr32。

regasm ComServer.dll

1
只要在 Visual Studio 2005 或 2008 的属性中将你的类设置为 ComVisible,或者在程序集文件中将 ComVisible 属性设置为 True,你就可以在 VB6 中看到你的类。为了获得智能感知,你需要声明一个接口,给它一个 GUID,并按照下面的示例代码实现它(注意:你必须为接口和具体类创建自己独特的 GUID)。
using System.Runtime.InteropServices;
using System.Drawing;

namespace example_namespace
{

    [Guid("1F436D05-1111-3340-8050-E70166C7FC86")]    
    public interface Circle_interface
    {

        [DispId(1)]
        int Radius
        {
            get;
            set;
        }

        [DispId(2)]
        int X
        {
            get;
            set;
        }

        [DispId(3)]
        int Y
        {
            get;
            set;
        }

    }


    [Guid("4EDA5D35-1111-4cd8-9EE8-C543163D4F75"),
        ProgId("example_namespace.Circle_interface"),
        ClassInterface(ClassInterfaceType.None)]
    public class Circle : Circle_interface
    {

        private int _radius;
        private Point _position;
        private bool _autoRedeye;

        public int Radius
        {
            get { return _radius; }
            set { _radius = value; }
        }


        public int X
        {
            get { return _position.X; }
            set { _position.X = value; }
        }


        public int Y
        {
            get { return _position.Y; }
            set { _position.Y = value; }
        }
    }


}

1
你是否将 ComVisible(true) 应用于类?

如何将ComVisible(true)设置到类中?实际上,我在assemblyinfo.cs中设置了true。 - Partha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接