свойства класса c # не видны в Visual Basic 6.0 - PullRequest
2 голосов
/ 13 июля 2009

Я создал класс в c # и сделал свойство com visible видимым. Но я не мог видеть его свойства в Visual Basic 6.0. в чем может быть проблема? пожалуйста, помогите мне

Ответы [ 3 ]

4 голосов
/ 13 июля 2009

Определите открытый интерфейс, который также является ComVisible, и пусть ваш класс реализует это.

Затем с помощью tlbexp.exe создайте библиотеку типов из сборки C #:

tlbexp ComServer.dll /out:ComServer.tlb

Вам нужно добавить ссылку на библиотеку типов из VB6, а не сборку. Как VB6 узнает, где ваша сборка? Регасм это как. Это эквивалент regsvr32 для сборок .net.

regasm ComServer.dll
1 голос
/ 13 июля 2009

Пока вы делаете свой класс ComVisible в свойствах (Visual Studio 2005 или 2008 или устанавливаете для атрибута ComVisible значение True в файле Assembly), вы сможете видеть свой класс в VB6. Чтобы получить intellisense, вам нужно объявить интерфейс, присвоить ему 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 голос
/ 13 июля 2009

Применяешь ли ты ComVisible(true) к классу?

...