Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Регистрация COM-exe компонента  [new]
Игорь Горбонос
Member

Откуда: Днепропетровск
Сообщений: 4236

Нужно опрашивать веб-сервис под разными логинами, для "сброса" идентификаторов сессии нужно или выжыдать паузу порядка
минуты-двух или выгружать программу. С паузой долговато, поэтому решил сделать COM-компонент Out of Process (ActiveX
EXE) и постоянно загружать/выгружать его.
Сделал, проверил, работает. Хотел перенести на работающий сервер, но столкнулся с проблемой. Не могу зарегистрировать
получившийся exe-файл как СОМ-компонент.
При попытке регистрации (набираю в командной строке)
c:\vfpcom.exe /regserver
показывается окно фокспро и
сообщение об ошибке
Не найдена инструкция PARAMETER


Поиск информации на тему какой код нужен для регистрации EXE-сервера ничего не принёс. Везде написанно что после сборки
нужно просто зарегистрировать компонент, запустив exe-файл с ключем. И должно быть счастье. Но его нет. Нашел редкие
примеры использования COM-компонент Out of Process (ActiveX EXE) на сайте Михаила Дроздова -
tmcomexe.zip компонент не регистрируется как написанно в
рекомендациях и там же другий пример, который не ругается при
регистрации, но при попытке обращения выдает ошибку
OLE error code 0x8002801d: Library not registered.


Как мне зарегистрировать компоненту?
Спасибо.

Posted via ActualForum NNTP Server 1.4

30 ноя 10, 12:53    [9862384]     Ответить | Цитировать Сообщить модератору
 Re: Регистрация COM-exe компонента  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Сообщение об ошибке говорит о том, что файл vfpcom.exe не есть COM-компонент.

Собственно, COM-компоненты в FoxPro создаются при помощи довольно специфических настроек загрузочных (стартовых) классов. В данном случае должно быть следующее

1. Главный стартовый файл проекта - это файл PRG в котором одна единственная команда

return

По сути, главный стартовый файл - это просто "заглушка чтоб было". Но он вообще ничего не делает

2. Далее создаете класс, на основе любого базового класса FoxPro. Например, я создал на основе класса Line, поскольку он самый "легкий" (в версии VFP6). В этом классе предусматриваете "входы/выходы". Т.е. те методы и свойства к которым будете обращаться как к свойствам и методам COM-объекта

3. При создании класса надо сделать небольшое дополнение. Зайти в его свойства (Class Info) и поставить птичку в пункте "OLE Public". Именно эта птичка и определяет тот факт, что будет создаваться COM-библиотека, а не "обычный" EXE.

Теперь, если зайти в окно Project Info \ закладка "Servers", то этот класс будет указан как серверный класс и можно будет (если необходимо) изменить свойство Instansing.

4. Все. Теперь, если при компиляции проекта выбрать пункт "Win32 executable / COM server (exe)" как раз и будет создан файл EXE как COM-сервер и он будет требовать регистрацию описанным способом.
30 ноя 10, 22:50    [9866072]     Ответить | Цитировать Сообщить модератору
 Re: Регистрация COM-exe компонента  [new]
Игорь Горбонос
Member

Откуда: Днепропетровск
Сообщений: 4236
ВладимирМ,

Спасибо, я собирал проект с двумя файлами - config.fpw и MyClass.prg. В MyClass.prg объявление класса с одним методом. Вот этот вариант и не работал. Ближе к вечеру сделал новый проект в котором было тоже два файла - config.fpw и MyClass.vcx. MyClass.vcx содержал мой класс с одним методом. И собранный проект завелся с полоборота. Оба класса делал производными от Custom и оба указывал как OlePublic.
30 ноя 10, 23:44    [9866194]     Ответить | Цитировать Сообщить модератору
 Re: Регистрация COM-exe компонента  [new]
Игорь Горбонос
Member

Откуда: Днепропетровск
Сообщений: 4236
Странно, хотел сделать два тестовых проекта для иллюстрации проблемы, сделал с реализацией класса в prg-файле и ... регистрация/разрегистрация заработала. Взял вчерашний exe-файл, не перекомпилируя, который вчера не работал и выдавал ошибку, сегодня работает без вопросов.

Наверное фазы луны, но зато узнал несколько новых особенностей фокса

ВладимирМ
Собственно, COM-компоненты в FoxPro создаются при помощи довольно специфических настроек загрузочных (стартовых) классов.


А какие настройки?

ВладимирМ
В данном случае должно быть следующее

1.
2.
3.
4.

Все это сделал, только базовым взял класс Custom, т.к. у меня 9 версия.

Приложил два тестовых проекта, оба работают. Один на основе класса в prg, другой на основе класса в VCX. Регистрировать нужно запуском с ключём - /regserver. Разрегистрировать - с ключём - /unregserver.
Может кому-то будет интересно :)

К сообщению приложен файл (test.zip - 37Kb) cкачать
1 дек 10, 14:38    [9869362]     Ответить | Цитировать Сообщить модератору
 Re: Регистрация COM-exe компонента  [new]
Игорь Горбонос
Member

Откуда: Днепропетровск
Сообщений: 4236

> Автор: Игорь Горбонос
> Приложил два тестовых проекта, оба работают.


Да забыл
+ Пример использования
o = Createobject("comprg.myclassprg")
d = o.test("ddd")
Xmltocursor(d, "dd")
If Used("dd") Then
 Select dd
 Browse
Endif
Release o
Use In dd
o = Createobject("comvcx.myclassvcx")
d = o.test("ddd")
Xmltocursor(d, "dd")
If Used("dd") Then
 Select dd
 Browse
Endif
Release o
Use In dd


Posted via ActualForum NNTP Server 1.4

1 дек 10, 14:50    [9869474]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить