как подружить два приложения

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

как подружить два приложения

Сообщение kuhtiov » 12.11.2008 (Ср) 9:38

Доброго вам времени суток. Помогите решить задачу. Пишу програмку бэкапщик. На данный момент, она состоит из двух отдельных компонентов (из планировщика и програмки которая выполняет скрипт). Необходимо, чтобы планировщик получал результаты выполнения скриптов и т.к. это два разных приложения, я не очень представляю, как можно их научить общаться между собой. Предложите пожалуйста какое ниб. Решение.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: как подружить два приложения

Сообщение Sebas » 12.11.2008 (Ср) 9:52

Программу бэкапа релизовать в виде ActiveX.exe
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: как подружить два приложения

Сообщение SSecurity » 12.11.2008 (Ср) 11:07

2 Sebas +1
Прально сказал, только ActiveX EXE :)

2 kuhtiov Реализация одного из приложений как Сервера ActiveX EXE даст возможность Приложениям-Клиентам выполнять определенные инструкции на стороне сервера A-EXE. Все легко делается, если на самом сервере тебе вдруг не захочется самостоятельно управлять уже работой клиентов, вот тогда тебе задуматься прийдется:))

С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: как подружить два приложения

Сообщение kuhtiov » 12.11.2008 (Ср) 11:10

Не совсем понял, как я из обычного exe сделаю ActiveX.exe, учитываю что в проекте используются контролы типа Listbox, Text и т.д.

Если не сложно, дайте ссылку на хорошую статейку, а то google пока ничего хорошего не откопал :oops:

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: как подружить два приложения

Сообщение SSecurity » 12.11.2008 (Ср) 11:20

kuhtiov писал(а):Не совсем понял, как я из обычного exe сделаю ActiveX.exe, учитываю что в проекте используются контролы типа Listbox, Text и т.д.


Project -> ProjectProperties... ->
ProjectType = ActiveX EXE

и надо будет классы добавлять ... которые функционал будут реализовывать.
А потом просто создаешь класс своего своего приложения если его ещё нет оно запустится если уже есть - значит будет работать (если ты новый экземпляр не захотишь открыть). Вообщем как Excel - классический пример такого приложения.
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: как подружить два приложения

Сообщение SSecurity » 12.11.2008 (Ср) 11:27

kuhtiov писал(а):Если не сложно, дайте ссылку на хорошую статейку, а то google пока ничего хорошего не откопал :oops:


Не совсем хорошая но логику объяснит поможет:
http://www.microsoft.com/Rus/Msdn/Activ ... erver.mspx
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: как подружить два приложения

Сообщение kuhtiov » 12.11.2008 (Ср) 11:30

В моем проекте классов, практически нет. Все выполненно в обычной форме. Код в данном случаи переписывать придется?
И еще вопрос. Связь в таком случаи будит производится как будто программы находятся в одном проекте или нет?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как подружить два приложения

Сообщение Хакер » 12.11.2008 (Ср) 11:47

Форма, тоже класс.

Но я хочу заметить, что на одном только ActiveX EXE не исчерпываются различные способы IPC.

Я здесь даже картинку выкладывал по этому поводу:
Изображение
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: как подружить два приложения

Сообщение kuhtiov » 12.11.2008 (Ср) 11:54

Кажется понял, все спасибо!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: как подружить два приложения

Сообщение Antonariy » 12.11.2008 (Ср) 12:03

Насчет реализации ActiveX exe.

1) Изменяешь тип проекта у бекапщика на AcitveX exe указанным выше способом.
2) Добавляешь в проект новый публичный класс, в класс добавляешь события типа BackupComplete и т.п. и код, который будет их генерировать.
3) Добавляешь в стандартный модуль следующий код (зачем — см. далее):
Код: Выделить всё
Private Declare Function CLSIDFromProgID Lib "ole32.dll" (ByVal ProgID As Long, rclsid As GUIDs) As Long
Private Declare Function CoDisconnectObject Lib "ole32.dll" (ByVal pUnk As IUnknown, pvReserved As Long) As Long
Private Declare Function RegisterActiveObject Lib "oleaut32.dll" (ByVal pUnk As IUnknown, rclsid As GUIDs, ByVal dwFlags As Long, pdwRegister As Long) As Long
Private Declare Function RevokeActiveObject Lib "oleaut32.dll" (ByVal dwRegister As Long, ByVal pvReserved As Long) As Long

Private Type GUIDs
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type
Private Const ACTIVEOBJECT_STRONG = 0
Private Const ACTIVEOBJECT_WEAK = 1
Private OLEInstance As Long

Public Sub AddToROT()
Dim mGuid As GUIDs
Dim lp As Long
    OLEInstance = 0
    lp = CLSIDFromProgID(StrPtr("Backuper.Application"), mGuid)
    If lp = 0 Then lp = RegisterActiveObject(gApplication, mGuid, ACTIVEOBJECT_STRONG, OLEInstance)
End Sub

Public Sub RemoveFromROT()
    If OLEInstance <> 0 Then RevokeActiveObject OLEInstance, 0
    CoDisconnectObject gApplication, 0
End Sub
4) Программа должна стартовать из Sub Main. Чтобы не плодить запущенные экземпляры программы, в sub main добавляешь такой код:
Код: Выделить всё
    On Error Resume Next
    Set x = GetObject(, "Backuper.Application") 'пытаемся получить объект ранее запущенного бекапщика
    If x Is Nothing Then 'бекапщик не был запущен
        'запускаем
        Set gApplication = New Application 'создается глобальный экземпляр класса, добавленного в п. 2)
        AddToROT 'это нужно для того, чтобы GetObject работал с твоей программой
        frmMain.Show 'прочие телодвижения
    Else
        x.Activate 'активируем ранее запущенный бекапщик и завершаем работу. Опрционально. Activate должно быть описано в классе из п. 2)
    End If
5) В свойствах проекта выставляешь Project Compatibility и компилируешь.
6) В референсы планировщика добавляешь ссылку на файл бекапщика, объявляешь где-нибудь переменную Dim WithEvents Backuper as Backuper.Application, получаешь ссылку на него с помощью GetObject и обрабатывашь события.

Все. :)
Лучший способ понять что-то самому — объяснить это другому.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: как подружить два приложения

Сообщение kuhtiov » 12.11.2008 (Ср) 13:40

[Хакер] :: Оверквотинг вырезан. В следующий раз за оверквотинг будет замечание.

О, совсем замечательно!!!!! СПАСИБО!!!!!!!!!! :alien:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 86

    TopList