Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
17 / 17 / 3
Регистрация: 09.12.2011
Сообщений: 64

Как использовать COM-объект (dll)

21.12.2012, 00:36. Показов 4659. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь разобраться с COM-объектами на C#. Решил начать с "Hello world!", но это оказалось совсем не так просто, как я думал. Понял что нужно:
1. Создать COM. => Создал по примерам, указав в свойствах "Регистрация для COM взаимодействия" и [assembly: ComVisible(true)].
2. Зарегестрировать. => Нашел 2 противоречивых информации: первая что наша .dll регистрируется автоматом, вторая - что надо зарегистрировать её при помощи RegAsm.
3. Использовать. => Вот как её использовать я и не пойму. Подключить как dll библиотеку в Ссылках? - зачем тогда такая морока. Во вкладке Ссылки->Добавить ссылку->COM моего COM нет.

Подскажите пожалуйста, что я сделал не так, или пример с "hello World" - ом для COM.
Мой код:
Кликните здесь для просмотра всего текста
AssembleyInfo.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
 
// Управление общими сведениями о сборке осуществляется с помощью 
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
// связанные со сборкой.
[assembly: AssemblyTitle("CLCom")]
[assembly: AssemblyDescription("TCOM")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("This Is COM")]
[assembly: AssemblyProduct("CLCom")]
[assembly: AssemblyCopyright("Copyright ©  2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
 
// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми 
// для COM-компонентов.  Если требуется обратиться к типу в этой сборке через 
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(true)]
 
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("d652fa53-43d5-4452-a819-4933561a724f")]
 
// Сведения о версии сборки состоят из следующих четырех значений:
//
//      Основной номер версии
//      Дополнительный номер версии 
//      Номер построения
//      Редакция
//
// Можно задать все значения или принять номер построения и номер редакции по умолчанию, 
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Код приложения
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace QuoteQuad
{
    public delegate void EventDel();
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
    public interface UserEvents
    {
        [DispId(5)]
        void MyEvent();
    }
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface _Demo
    {
        [DispId(1)]
        int MyMethod(int numarg);
        [DispId(2)]
        string MMethod();
        [DispId(3)]
        int MyProperty { get; set; }
        [DispId(4)]
        void eventm();
    }
    
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("CLCom.Demo")]
    [ComSourceInterfaces(typeof(UserEvents))]
    [ComVisible(true)]
    public class Demo : _Demo
    {
        public event EventDel MyEvent;
        public Demo()
        {
        }
        private int myVar;
        public int MyProperty
        {
            get { return myVar; }
            set
            {
                MyEvent();
                myVar = value;
            }
        }
        public int MyMethod(int numarg)
        {
            return numarg + 10;
        }
        public string MMethod()
        {
            return "Ajay Askoolum";
        }
        public void eventm()
        {
            MyEvent();
        }
    }
}
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2012, 00:36
Ответы с готовыми решениями:

Как заставить программу использовать \system32\shell32.dll, а не \путь к проге\Interop.Shell32.dll
Это неудобно для Portable программы..

Как использовать dll библиотеку?
Добрый день! У меня есть приложение c# (winforms). Мне его нужно доработать, чтобы оно могло связаться со скадой. У меня есть...

Как использовать dll -injection ?
Здравствуйте. Подскажите пожалуйста как использовать dll-injection и каков принцип работы этого метода. Я знаю что dll-injection это способ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.12.2012, 00:36
Помогаю со студенческими работами здесь

Как использовать объект Word, если он объявлен в другой зоне видимости
Добрый день! При нажатии на кнопку приложения создаю объект Word. private void button1_Click(object sender, EventArgs e) ...

Какой объект использовать
Подскажите, нужно реализовать в форме следующий функционал. Есть строка из 3х элементов Прослушать скачать Название мелодии ...

Как получить объект Server из .dll?
Я делаю HttpModule, собираю его в .dll Подскажите плиз, как мне получить объект Server из этого класса? Ссылку на какое пространство имен...

Как из ASP освободить COM объект. (Com Multi-threaded DLL)
Сваял на фоксе Multi-threaded DLL Скопировал её на сервер в каталог SCRIPTS зарегистрировал командой regsvr32 далее в ASP написал...

Как использовать C#-ную dll на классической ASP страничке?
Есть класс, написанный на C#, с public properties and methods. Откомпилирован в MyDll.dll. Хочется использовать эту dll на classic ASP...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru