программа из компонентов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sanek
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 29.03.2010 (Пн) 22:53

программа из компонентов

Сообщение sanek » 29.03.2010 (Пн) 23:13

Здравствуйте, у меня появилась проблема, попробую ее подробнее описать: у меня есть проект, который состоит из материнской формы, к которой прикреплены другие формы, из модулей и классов, а так же в нем есть Data Environment и несколько Data Report. в модуле и классах находятся все процедуры, на формах они только вызываются. Программа должна выводить информацию из таблиц базы данных в таблицы на форме, а так же позволять удалять данные и выводить различные отчеты по базе данных.

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

Как это можно сделать, подскажите пожалуйста начинающему программисту, желательно поподробнее и с примерами, что надо дополнительно предусмотреть в коде программы, как откомпилировать, где указать откуда брать дополнения и т.д. :)

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

Re: программа из компонентов

Сообщение Хакер » 29.03.2010 (Пн) 23:19

Если бы мир был так прост, и проблема решалась не более чем указыванием «откуда брать дополнения» при компиляции, программистам бы не было работы.

Всё намного сложнее.

http://vbstreets.ru/VB/Articles/66519.aspx
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

sanek
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 29.03.2010 (Пн) 22:53

Re: программа из компонентов

Сообщение sanek » 29.03.2010 (Пн) 23:26

спасибо :) попробую разобраться)

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: программа из компонентов

Сообщение Денис » 30.03.2010 (Вт) 10:37

Ну в статье много сей, в сях я не спец, но как я понял, надо делать так:

1. Делаем activex-библиотечку с классом, например clsPlugin. Содержимое класса:

Код: Выделить всё
public function PrintReport (rsData as ADO.Recordset) as ADO.Recordset ' либо as ЧтоТоЕще
    'Здесь либо описываем массив данных для отчета, либо производим манипуляции с аргументом
end function


Библиотечку сохраняем с именем, заведомо известным твоей программе, например с префиксом MyCoolSuperProgaPlugin

MyCoolSuperProgaPluginSample.dll

2. В программе делаем как-то так:

Код: Выделить всё
'объявляем массив объектов:

dim Plugs () as Object
redim Plugs (100500) 'Э, смотри всамделе стопицот не разметь

'Опрашиваем каталог на предмет наличия файлов плагинов:
for i
    N = dir("c:\Super\Puper\Plugins\MyCoolSuperProgaPlugin*.dll")
    'потом создаем объекты и пишем их в массив
    if not N = "" then
        set Plugs(i) = createObject(N, "clsPlugin")
    end if
next


Когда надо обратиться к конкретному объекту, делаем так:

Код: Выделить всё
Plugs(12).PrintReport(AnySQL) ' где AnySQL - это предварительно выбранный из базы запрос, сохраненный в объект-рекордсет.


Вот так бы делал я. Написано это сейчас без студии, так что я уверен, есть куча ошибок.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: программа из компонентов

Сообщение hclubmk » 30.03.2010 (Вт) 11:04

с именем, заведомо известным твоей программе

Имя можно и потом сказать. IDispatch для этого и нужен.
В общем - COM в руки :)
Научились ли Вы радоваться трудностям?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: программа из компонентов

Сообщение Денис » 30.03.2010 (Вт) 12:37

hclubmk писал(а):
с именем, заведомо известным твоей программе

Имя можно и потом сказать. IDispatch для этого и нужен.
В общем - COM в руки :)


Там я о имени файла говорил. Я так понимаю, что через IDispatch мы можем узнать имя clsPlugin вместе с методами. Только не знаю, как это делается.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Re: программа из компонентов

Сообщение Хакер » 30.03.2010 (Вт) 13:12

Имя через IDispatch мы не сможем узнать, неправильно ты понимаешь. Имя мы можем через ITypeInfo узнать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: программа из компонентов

Сообщение hclubmk » 30.03.2010 (Вт) 14:16

Где-то так:
Код: Выделить всё
Private Sub Command1_Click()
Dim obj As Object
Dim appTLI As TLI.TLIApplication
Dim inte As InterfaceInfo

    List1.Clear
    Set appTLI = New TLIApplication
    Set obj = CreateObject("MSComctlLib.TreeCtrl") ' или другой
    Set inte = appTLI.InterfaceInfoFromObject(obj)
    n% = inte.Members.Count
    For i% = 1 To n%
        strOut$ = inte.Members(i%).Name
        kk% = inte.Members(i%).InvokeKind
        Select Case kk%
               Case VbMethod
                    strOut$ = " Method " + strOut$
               Case VbGet
                    strOut$ = " Property Get " + strOut$
               Case VbLet
                    strOut$ = " Property Let " + strOut$
               Case VbSet
                    strOut$ = " Property Set " + strOut$
               Case Else
                    strOut$ = strOut$ + " ? " + CStr(kk%) + " # "
        End Select
        vv& = inte.Members(i%).ReturnType.VarType ' тип
        k% = inte.Members(i%).Parameters.Count ' число парамеров
        List1.AddItem strOut$
    Next i%
End Sub

а IDispatch::Invoke для вызова по имени.
Научились ли Вы радоваться трудностям?

sanek
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 29.03.2010 (Пн) 22:53

Re: программа из компонентов

Сообщение sanek » 01.04.2010 (Чт) 23:57

спасибо за ответы) попробую, вдруг что то получится :)


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 62

    TopList