Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать COM-объект на C#, Помогите создать приложение с COM 
:(
    Опции темы
Ren
Дата 3.9.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



Всем привет!
Создал консольное приложение, которое принимает параметры через аргументы коммандной строки. Программа работает в локальной версии, но если запустить приложение из сети выдает ошибку, что UNC не использует сетевые имена (тоесть всё, что начинается с "\\..." не поддерживает в качестве активной директории). Как выход из этой ситуации, хочу создать приложение, котрое будет в качестве COM-объекта. Зачем это необходимо? Обьясняю: мое приложение запускается из другой програмы, в параметры заносится имя файла, а моя прога уже обрабатывает этот файл на локальной машине. Как вариант, конечно можно скопировать файлы на каждый локальный ПК и юзать эго. Но если будут изменения файла, то надо будет искачть и заменять все файлы.

В общем, расскажите как создать COM-объект (COM+)? Использую C#, framework 2.0.
Как такие задачи решаються? Может у кого-то был опыт? Если есть ссылки по COM в .Net, а ещё лучьше примеры/алгоритмы создания таковых проектов поделитесь, пожайлуста.

Зарание всем благодарин.

З.Ы. Как новичок пользовался поиском, ничего подходящего не нашел.
PM MAIL   Вверх
SpaceSpace
Дата 3.9.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



чтобы сделать оболочку COM над твоей программой .NET
почитай про CCW (Com callable wrapper)
и почитай про утилиту tlbexp.exe


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Ren
Дата 3.9.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



Где это всё можно найти?

Добавлено через 4 минуты и 56 секунд
Есть. Зацепился в MSDN. Раньше давал запрос на поиск что вроде "COM объект". А сча изменил и есть результат.
PM MAIL   Вверх
Ren
Дата 3.9.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



Брр...  smile  Там так всё заплутано. Можна как-то "от простого к сложному"? Раньше СОМ объекты не создавал и не использовал.
Возможно у кого-то есть какой-либо пример с коментариями создания найпройстейшего элемента СОМ в .Net на C#?  smile 

З.Ы. Извените за некоректность в терминалоги - я новичёк в этом.
PM MAIL   Вверх
FREEDEV
Дата 3.9.2007, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: 1
Всего: 3



Ren, создаешь ClassLibrary , в атрибутах ставишь [ComVisible(true)] , добавляешь Strong Name
пишешь нужные тебе классы, компилируешь , регестрируешь каким хочешь способом.
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
Ren
Дата 7.9.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



FREEDEV, покопавшись, попробывав ... в обще с [ComVisible(true)] немного прояснилось: можна ставить как и для класа, так и для свойств, функций и т.д.:
Код

using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

namespace NetForComDemo
{
    [ComVisible(false)]
    class ComVisiblePerson
    {
        private String firstName;
        private String lastName;
        private Int32 salary;

        /// <summary>
        /// Имя ф.л.
        /// </summary>
        [ComVisible(true)]
        public String FirstName
        {
            get { return firstName; }
            set { firstName = value; }
        }
        
        /// <summary>
        /// Фамилия ф.л.
        /// </summary>
        [ComVisible(true)]
        public String LastName
        {
            get { return lastName; }
            set { lastName = value; }
        }
        
        /// <summary>
        /// ЗП у ф.л.
        /// </summary>
        [ComVisible(false)]
        public Int32 Salary
        {
            get { return salary; }
            set { salary = value; }
        }

        /// <summary>
        /// Установить значения по умолчанию: 
        /// FirstName="Василий",
        /// LastName="Иванов".
        /// </summary>
        [ComVisible(true)]        
        public void SetDateDefault()
        {
            FirstName = "Василий";
            LastName = "Иванов";
        }

        /// <summary>
        /// Получает значение 
        /// FirstName ,
        /// LastName
        /// </summary>
        [ComVisible(true)]
        public String GetDateDefault()
        {
            return FirstName + ", " + LastName;
        }

        //static void Main(string[] args)
        //{
        //}

    }
}


Класс есть. Откомпилировав, получил библиотеку в .Net, а как что полноценный СОМ получился.
Если в библиотеке два и более класса, у них совпадают свойства или функции (их названия, параметры), то как клиент СОМ будет их отличать? Например к приведущему коду добавлено:
Код

namespace NetForComDemo
{

    //...

    [ComVisible(false)]
    class ComVisibleMainPerson
    {
        private String firstName;
        private String lastName;

        /// <summary>
        /// Имя ф.л.
        /// </summary>
        [ComVisible(true)]
        public String FirstName
        {
            get { return firstName; }
            set { firstName = value; }
        }
        
        /// <summary>
        /// Фамилия ф.л.
        /// </summary>
        [ComVisible(true)]
        public String LastName
        {
            get { return lastName; }
            set { lastName = value; }
        }

        /// <summary>
        /// Получает значение 
        /// FirstName ,
        /// LastName
        /// </summary>
        [ComVisible(true)]
        public String GetDateDefault()
        {
            return FirstName + ", " + LastName;
        }
    }
}



И как использовать Strong Name?

PM MAIL   Вверх
FREEDEV
Дата 7.9.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: 1
Всего: 3



Нужно создать snk файл и прицепить его к проекту, проще всего это сделать в properties проекта -> signing -> sign the assembly
Там же в application -> assembly information можно выставить make assembly com visible
в build можно выставить Register for COM interop
это для 2005 студии
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
Ren
Дата 10.9.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



Как проверю, отпишу. Вдруг ещё что-то по теме вспывёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0889 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.