Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19

Логика регистрации файла

14.05.2014, 08:23. Показов 4922. Ответов 50

Студворк — интернет-сервис помощи студентам
Сейчас делаю консольную программу
которую я протестировал на все возможные ошибки
работает примерно так.. Proga.exe /команда

Модуль этой программы
Visual Basic
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
Option Explicit
DefLng F, I, L, N: DefStr J, S
'
'    © FelixMacintosh 2014
'
Const hlpMesage = "" & _
"Команды могут быть с большой или маленькой буквы" & vbCrLf & _
"Также можно вводить несколько команд" & vbCrLf & _
"Список команд:" & vbCrLf & _
"/s [путь к файлу] ; [путь для нового файла] ; [байтовый адрес]" & vbTab & "= Отделить файл" & vbCrLf & _
"/j [главный файл] ; [пришиваемый файл] " & vbTab & "= Объединить два файла" & vbCrLf & _
"/z [путь к zip архиву] ; [путь на диске] " & vbTab & "= Добавить в архив" & vbCrLf & _
"/uz [путь к zip архиву] ; [путь в архиве] ; [папка на диске] " & vbTab & "= Извлеч из архива" & vbCrLf & _
vbTab & "* Примечание папку на диске можно не указывать" & vbCrLf & _
vbTab & "в этом случае это будет текущая папка" & vbCrLf & _
"/r [путь к файлу]" & vbTab & "= Регистрация" & vbCrLf & _
"/u [путь к файлу]" & vbTab & "= Отмена регистрации" & vbCrLf & _
"/cmd [новая комманда отсюда]" & vbTab & "= Любая консольная команда" & vbCrLf & _
"/h или /help " & vbTab & "= Вызов этого сообщения" & vbCrLf & _
"Производство:" & vbCrLf & _
"© FelixMacintosh 2014" & vbTab & "http://vk.com/FelixMacintosh"
'
Private Const Infinite = -1&
Private Const Synchronize = &H100000
Private Const TH32CS_SNAPTHREAD = &H4
'
Private WshShell As Object 'As WshShell '
Private Fso As Object 'As FileSystemObject '
Private mArchive As Object
'
Private Type THREADENTRY32
    dwSize As Long
    cntUsage As Long
    th32ThreadID As Long
    th32OwnerProcessID As Long
    tpBasePri As Long
    tpDeltaPri As Long
    dwFlags As Long
End Type
 '
Private Declare Function Thread32First Lib "kernel32" (ByVal hSnapshot As Long, ByRef lpte As THREADENTRY32) As Long
Private Declare Function Thread32Next Lib "kernel32" (ByVal hSnapshot As Long, ByRef lpte As THREADENTRY32) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function OpenThread Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwThreadId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Private Function WaitShell(MyCommand$) As Long
    '
    'Вызов Shell и новой команды, с ожиданием её завершения
    '
    Dim hProc&
    WaitShell = Shell(MyCommand)
    hProc = OpenProcess(Synchronize, False, WaitShell)
    WaitForSingleObject hProc, Infinite
    CloseHandle hProc
End Function
 
Private Sub SS(ByVal Section$, ByVal Key$, Optional ByVal Setting$ = "0")
    SaveSetting App.EXEName, Section, Key, Setting
End Sub
 
Private Function GS(ByVal Section$, ByVal Key$, Optional ByVal Setting$ = "0")
    GS = GetSetting(App.EXEName, Section, Key, "")
End Function
 
Private Sub TrimArray(Arr() As String)
    Dim i&
    For i = 0 To UBound(Arr): Arr(i) = Trim(Arr(i)): Next
End Sub
 
Private Sub Main()
    Const r = "/", p = " ", w = ";"
    Dim f, j(), s, j1(), j2(), Start&
    Set WshShell = CreateObject("Shell.Application")
    Set Fso = CreateObject("Scripting.FileSystemObject")
    s = Command$
    j = Split(s, r)
 
    On Error Resume Next: DeleteSetting App.EXEName
    On Error GoTo EndProgramm
 
    For f = 1 To UBound(j)
        j1 = Split(Trim(j(f)), p, 2): TrimArray j1
        '---------
        Select Case LCase(j1(0))
        Case "cmd"
            SS j1(0), WaitShell(j1(1))
        Case "s"
            j2 = Split(j1(1), w): TrimArray j2
            SS j1(0), "Len", WriteBytes(j2(1), ReadBytes(j2(0), CLng(j2(2))), , True)
        Case "j"
            j2 = Split(j1(1), w): TrimArray j2
            Start = Fso.GetFile(j2(0)).Size + 1
            SS j1(0), "Start", Start
            SS j1(0), "Len", WriteBytes(j2(0), ReadBytes(j2(1)), Start) - 1
        Case "uz"
            j2 = Split(j1(1), w): TrimArray j2
            If Fso.FileExists(j2(0)) And LCase(Fso.GetExtensionName(j2(0))) = "zip" Then
                If UBound(j2) = 1 Then
                    ReDim Preserve j2(2): j2(2) = CurDir$
                End If
                Archive = Fso.GetAbsolutePathName(j2(0))
                SS j1(0), UnZipFile(j2(1), j2(2))
            End If
            
        Case "z"
            j2 = Split(j1(1), w): TrimArray j2
            If Fso.FileExists(j2(0)) And LCase(Fso.GetExtensionName(j2(0))) = "zip" Then
                'Используем архив
                Archive = Fso.GetAbsolutePathName(j2(0))
                SS j1(0), CopyPathToArchive(Fso.GetAbsolutePathName(j2(1)))
            ElseIf LCase(Fso.GetExtensionName(j2(0))) = "zip" Then
                'Создаём архив
                CreateArchive Fso.GetAbsolutePathName(j2(0))
                SS j1(0), CopyPathToArchive(Fso.GetAbsolutePathName(j2(1)))
            End If
        Case "r"
            SS j1(0), RegSvr32(j1(1))
        Case "u"
            SS j1(0), RegSvr32(j1(1), True)
        Case "h", "help"
            SS j1(0), MsgBox(hlpMesage)
        Case Else
            'Не выполнена ни одна комманда
        End Select
    Next
EndProgramm:
    '-------------------------Конец программы
    Set WshShell = Nothing
    Set Fso = Nothing
End Sub
 
Private Function CopyHere(Parent, vItem) As Boolean
    '
    'Функция копирования
    'Аргументы: Папка (Zip-папка) // Копируемый объект
 
    Dim f&, Key$, hnd&
    Dim Trd(2) As Collection
    Dim tid As Long, hTrd As Long
    On Error Resume Next
 
    'Получаем список потоков !
    GetThreadsList Trd(0) 'Запомнить старые потоки
    Call Parent.CopyHere((vItem)) 'Копирование >>>>>>>>>>>>
    GetThreadsList Trd(1) 'Запомнить новые потоки
    
    If vItem.Count > 0 Then If Err.Number = 0 Then GoTo 1 'В этом случае ждать не нужно
    
    Err.Clear 'Сброс всех ошибок
 
    Set Trd(2) = New Collection
    For f = Trd(1).Count To 1 Step -1
        Key = "C" & Trd(1).Item(f)
        hnd = Trd(0)(Key)
        If hnd = 0 Then Trd(2).Add CLng(Mid$(Key, 2))
    Next
 
    For f = 1 To Trd(2).Count 'Ожидание открытых потоков
        tid = Trd(2).Item(f)
        hTrd = OpenThread(Synchronize, False, tid)
        WaitForSingleObject hTrd, Infinite
        CloseHandle hTrd
    Next
    CopyHere = True
    Exit Function
1
End Function
 
 
Private Sub GetThreadsList(List As Collection)
    '
    '   Возвращает List с коллекцией потоков
    '
    Dim hSnap As Long, TE As THREADENTRY32, PID As Long
    Set List = New Collection
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)
    If hSnap = -1 Then Exit Sub
    TE.dwSize = Len(TE)
    PID = GetCurrentProcessId()
    If Thread32First(hSnap, TE) Then
        Do
            If TE.th32OwnerProcessID = PID Then List.Add TE.th32ThreadID, "C" & CStr(TE.th32ThreadID)
        Loop While Thread32Next(hSnap, TE)
    End If
    CloseHandle hSnap
End Sub
 
 
Public Function UnZipFile(ByVal ParseName$, ByVal DestPath$) As Boolean
    '
    'Извлечение из архива
    'Аргументы:
    'DestPath - Путь к папке для распаковки архива
    'ParseName - Путь в архиве
    'Примечание: Имена файлов в архиве, должны быть полными !
    '
    Dim DestDir As Object, Parse As Object
    If (mArchive Is Nothing) Then Exit Function 'Проверяем указан ли архив ?
    On Error GoTo 1
    
    If Not Fso.FolderExists(DestPath) Then 'Проверяем есть ли папка
        Fso.CreateFolder (DestPath) 'Создаём папку для перемещаемых туда объектов
    End If
    
    Set DestDir = WshShell.NameSpace((DestPath))
    Set Parse = mArchive.ParseName((ParseName))
    UnZipFile = CopyHere(DestDir, Parse)
    Exit Function
1
End Function
 
Public Function NameArchiveFiles$(Optional ByVal ind&, Optional ByVal NameOnly As Boolean)
    '
    'Возврат имени файла в архиве
    'Аргументы:
    'ZipName - имя архива
    'Ind - номер файла в архиве (начало с 0), по умолчанию - 0
    'NameOnly - Только имя, без расширения
    '
    If (mArchive Is Nothing) Then Exit Function 'Проверяем указан ли архив ?
    On Error Resume Next
    If NameOnly Then
        NameArchiveFiles = mArchive.Items().Item((ind)).Рath
    Else
        NameArchiveFiles = mArchive.Items().Item((ind)).Name
    End If
End Function
 
Public Function CopyPathToArchive(ByVal FilePath$) As Boolean
    '
    'Копирует файл / папку в архив
    'Арг: полное имя
    '
    If (mArchive Is Nothing) Then Exit Function 'Проверяем указан ли архив ?
    If Len(Dir(FilePath, vbDirectory)) > 0 And Len(Dir(FilePath)) = 0 Then
 
        If WshShell.NameSpace((FilePath)).Items.Count = 0 Then
            MsgBox ("Нельзя добавить пустую папку")
            Exit Function
        End If
    End If
    'mArchive.CopyHere (FilePath)
    CopyPathToArchive = CopyHere(mArchive, FilePath) 'Копируем в архив
End Function
 
Public Function CreateArchive(ByVal Рath$) As Boolean
    '
    'Создаёт новый архив
    'Возврат утверждения о создании
    '
    If Fso.FileExists(Рath) Then Kill Рath
    Fso.CreateTextFile(Рath, True).Write "PK" & Chr(5) & Chr(6) & String(18, 0)
    Set mArchive = WshShell.NameSpace((Рath))
    CreateArchive = Not (mArchive Is Nothing) 'Возврат утверждения о создании
End Function
 
 
 
Public Property Get Archive() As Variant
    '
    'Возвращает объект архива
    '
    Set Archive = mArchive
End Property
 
Public Property Let Archive(ByVal vNewValue As Variant)
    '
    'Свойство: Archive = Файловый путь
    'Арг: полное имя
    '
    If Fso.FileExists(vNewValue) Then
        Set mArchive = WshShell.NameSpace((vNewValue))
    End If
End Property
 
 
Private Function RegSvr32(Path$, Optional UnReg As Boolean) As Boolean
 
    Dim hProc&, hShell&
    If Fso.FileExists(Path) = False Then Exit Function
    Select Case LCase(Fso.GetExtensionName(Path))
    Case "dll", "ocx"
    Case Else: Exit Function
    End Select
 
    If UnReg Then
        hShell = WshShell("RegSvr32 /s /u " & Path)
    Else
        hShell = WshShell("RegSvr32 /s " & Path)
    End If
 
    hProc = OpenProcess(Synchronize, False, hShell)
    WaitForSingleObject hProc, Infinite
    CloseHandle hProc
    RegSvr32 = True
End Function
 
 
Private Function ReadBytes(FileName$, Optional ByRef Start&, Optional ByVal dln&) As Byte()
    'Чтение байт из файла
    'Арг: Путь // Старт // Длина по умолчанию всего файла
    'Возврат: Массив байт и следующая позиция чтения
    Dim n, f: On Error Resume Next
    f = FreeFile
    Open FileName For Binary As #f
    If Start Then Else Start = 1
    n = LOF(f) - Start + 1
    If dln = 0 Or dln > n Then dln = n
    ReDim Preserve ReadBytes(dln - 1)
    Get #f, Start, ReadBytes: Close #f
    If Err = 0 Then Start = Start + UBound(ReadBytes) + 1
End Function
 
Private Function WriteBytes&(FileName$, Bytes() As Byte, Optional ByVal Start&, _
Optional Overwrite As Boolean)
    'Запись байт в файл
    'Арг: Путь // Массив байт // Старт // Флаг перезаписи
    'Возврат: Следующая позиция записи (при успешном выполнении)
    Dim n, f: On Error Resume Next
    If Start Then Else Start = 1
    f = FreeFile 'Определяем номер свободного файла
    If Overwrite Then Kill FileName
    Open FileName$ For Binary As #f: Put #f, Start, Bytes: Close #f 'Копируем !
    If Err = 0 Then WriteBytes = Start + UBound(Bytes) + 1
End Function


так вот..
я хочу внести туда еще три команды
r+ =Зарегить при условии что эта dll не зарегестрированна
u+ =Отменить рег. только при условии что не этой прогой было регестрированно
u- =Отменить при условии... затем удалить !
uz+ =Извлеч при условии что если это dll(ocx) и если она не зареганна...

как правильно организовать логику регистрации файла

Добавлено через 15 минут
Подозреваю что при выполнении регистраций придёться гдето хранить
записи, то что было сделанно...

вот я и хочу узнать как правильно и где их хранить чтоб не оказаться потом криворуким програмистом...

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

Добавлено через 24 минуты
...вобщем буду делать так...
хранить гдето отдельно, например в системной папке
специальный файл, в котором будет только список тех компонентов
которые зарегала эта прога, в этом случае восстановление системы будет
следить за этим файлом...

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

при отмене-же регистрации, сначало будет просматриваться список...
и если в списке есть эта запись то только тогда можно отменить, и удалить
эту запись...

как-то так.. наверное... я конечно сомневаюсь..
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.05.2014, 08:23
Ответы с готовыми решениями:

Создание регистрации и аутентификации spring. Логика регистрации и авторизации
Для регистрации юзера на сервер приходят данные в json формате(логин пароль подтвержденный пароль). Принимаю их на контроллер на маппинг...

В каком элементе MVC должна обрабатываться логика регистрации и авторизации?
Доброго всем времени суток уважаемые форумчане! Вот начал изучать ООП в php с использованием MVC. И у меня возник вопрос: как сделать если...

Описание файла журнала регистрации
Приветствую, ребята! Подскажите пожалуйста, где можно почитать про описание протокола файла ЖР, я имею ввиду структуру файла *.lgd,...

50
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
24.05.2014, 20:10
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
у меня мои собственные DLL'ки вообще не будут нуждаться в регистрации
Если писать Native DLL, то она не будет нуждаться в регистрации. В остальном только способом который я тебе говорил, иначе никак.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
25.05.2014, 04:40  [ТС]
Нашол я у себя этот модификатор,
с помощью которых правильные DLL-ки делают
Миниатюры
Логика регистрации файла  
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
25.05.2014, 05:56  [ТС]
там-же и Link и старый (подмененный Link)
правда сам SFX куда-то затерялся, ну и ладно... я и так понял
что надо делать

Добавлено через 6 минут
осталось свой SFX создать и в Templates кое что поменять тоже ...
для себя... на случай быстрой установки модификаторов PE

The Trick, ..ладно, чтоб никого не раздражать
в плане авторских прав
я расспространять это не буду, во всяком случае на этом сайте

Добавлено через 42 минуты
Да ..и вот ещё что
теперь я и основную программу совсем по другому использую..
просто ввожу одну из процедур дочернего EXE-шника ... а там с помощью CallByName ... Arguments(),,,
всё обрабатывается.
и передаю ответ через Ini ...+мои суперские dll-ки, всё ... дешево и по сути .
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
25.05.2014, 18:00  [ТС]
всё.. сделал я нормальный SFX
для установки нужных костылей ...

не буду здесь выкладывать эту прогу во избежании скандалов
Миниатюры
Логика регистрации файла  
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
25.05.2014, 23:13  [ТС]
Кстате по таким DLL-кам можно передовать и ссылки на объекты классов
вообще ктонибудь знал об этом ?
у меня теперь крутейшая среда разработки, и множество комерческих планов

Добавлено через 51 минуту
Модуль DLL'ки

Visual Basic
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
Option Explicit
'
'© FelixMacintosh (CiberForum.ru) ,2014
'
'Твои функции, всё это можно было объеденить в один модуль
'И не обязательно делать как у меня
'
Sub TestSub(ByVal num As Long)
    MsgBox "Вы ввели " & num
End Sub
 
Function TestFunction() As String
    Dim s$, num&
    s = InputBox("Сколько вам лет ?", , "[число от 1 до 100]")
    
    If IsNumeric(s) Then
        If s > 0 And s < 101 Then
            num = IIf(MsgBox("День рожденья было в этом году ?", vbYesNo Or vbApplicationModal) = vbYes, 0, 1)
            MsgBox "Вы родились в " & Year(Date) - s - num & " году", vbInformation
        End If
    End If
End Function
 
Function TestObject_FSO() As Object
    Set TestObject_FSO = CreateObject("Scripting.FileSystemObject")
End Function
Отдельный проект у которого есть эта DLL-ка причем просто туда заброшенна
без всяких ритуалов ...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
'Форма для просмотра что и как...
'
'Псевдонимы не используются поэтому [Alias] не указан
Private Declare Sub TestSub Lib "NativeDLL.dll" (ByVal num As Long)
Private Declare Function TestFunction Lib "NativeDLL.dll" () As String
 
'Пример вызова объекта, и пример обращения к псевдониму.. [Alias]
Private Declare Function TestObject_FSO Lib "NativeDLL.dll" Alias "TestObject_FSO_A" () As Object
 
Private Sub Form_Click()
    Dim fso As Object 'As FileSystemObject '
    ChDir (App.Path) 'Заходим в папку где находится эта программа
    'Это нужно сделать обязательно, так как используется относительный путь
    'например можно указать [..\имя = папкой выше] или [\имя = папкой ниже
    'в противном случае придется указать полный путь
    '
    TestSub 101
    TestFunction
    Set fso = TestObject_FSO
    Debug.Assert Not (fso Is Nothing) 'Если здесь произошла остановка _
    значит тест не пройден !
End Sub
Добавлено через 2 часа 51 минуту
Спросил я разрешение у автора, этих костылей на его родном сайте...

и если он ещё не умер, и мне ответит положительно я надеюсь
то буду спокойно расспространять это ПО

Добавлено через 9 минут
...
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
25.05.2014, 23:21  [ТС]
У кого есть интерес к этому можете протестировать
и убедится что эту DLL-ку регить не надо
Вложения
Тип файла: rar NativeDLL.rar (4.7 Кб, 3 просмотров)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
27.05.2014, 23:04  [ТС]
Вобщем для компонентов, как я понял там идёт другая тема ..
а именно ActiveX EXE ..вот чего я не знал оказывается и развёл демагогию

Добавлено через 11 минут
из интернетов ...
Наряду с таким типом элементов ActiveX существуют и другие типы - ActiveX EXE и AxtiveX DLL. При их создании вы выбираете соответствующие иконки в окне New Project:
Они уже работают несколько по-другому. Для них не нужен контейнер. Внутри них могут содержаться свойства и методы. Другие программы могут создавать экземпляры ActiveX EXE или ActiveX DLL и, разумеется, могут их использовать - читать и изменять свойства, вызывать методы.
Отличие между ActiveX EXE и ActiveX DLL следующее - первые существуют в своем адресном пространстве, а вторые - внедряются в адресное пространство вызвавшей их программы. Это самое главное отличие меду ними. Из этого есть несколько следствий - например, ActiveX DLL работают быстрее ActiveX EXE. Есть и другие различия, которые мы будем рассматривать в наших уроках.
Еще два типа для ActiveX'ов - это ActiveX Document EXE и ActiveX Document DLL. Для их создания выбираем такие иконки
Добавлено через 16 минут
и вот еще
Кликните здесь для просмотра всего текста
Совет 226. Обмен переменными между разными приложениями

Иногда возникает необходимость обмениваться переменными между различными приложениями, например при совместном использовании базы данных. Для этого создадим ActiveX EXE с модулем класса Class1. Здесь нельзя создать библиотеку ActiveX DLL, поскольку она выполняется внутрипроцессно (in-process) в каждом клиенте. Добавьте к проекту модель (команда Project|Add Module) и опишите переменную, которая будет передаваться в другое приложение, в качестве общей.

Код в ActiveX EXE будет выглядеть следующим образом:
********* Код модуля **********

Visual Basic
1
2
  Global gCon As Database
  Global glngNrOfObjects As Long
********* Код класса **********
Visual Basic
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
  Public Property Set DBConn(Con As Database)
          Set gCon = Con
  End Property
 
  Public Property Get DBConn() As Database
          Set DBConn = gCon
  End Property
 
  Private Sub Class_Initialize()
          ‘ эта переменная хранит количество
          ‘ созданных объектов
          glngNrOfObjects = glngNrOfObjects + 1
  End Sub
 
  Private Sub Class_Terminate()
          ‘ уменьшение количества объектов
          glngNrOfObjects = glngNrOfObjects — 1
          ‘ если нет никаких объектов,
          ‘ связь прерывается
          If glngNrOfObjects = 0 Then
              If Not gCon Is Nothing Then
                  gCon.Close
                  Set gCon = Nothing
              End If
          End If
  End Sub
Теперь установите ссылку к библиотеке ActiveX EXE в своем
проекте и
используйте ее, например, так:

*** Код приложения, использующего ActiveX EXE ***

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  Dim clsDBConn As Class1
 
  Private Sub Form_Load()
          Set clsDBConn = New Class1
          ‘ связь устанавливается, когда
          ‘ создан первый объект
          If clsDBConn.DBConn Is Nothing Then
              Set clsDBConn.DBConn = Workspaces(0). _
              OpenDatabase(“\VisStudio\Vb98\Biblio.mdb”)
          End If
  End Sub
 
  Private Sub Form_Unload(Cancel As Integer)
          Set clsDBConn = Nothing
  End Sub
Вам нет необходимости писать код для подсчета экземпляров объектов и для закрытия базы данных, если вы работаете с простой переменной, а не с ссылкой на объект. В этом случае также поменяйте Property Set на Property Let.

И наконец, главное. Не забудьте установить ссылку к объектам DAO, так как они используют объект базы данных.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
27.05.2014, 23:09
Я тут немного подумал, можно довольно просто сделать возможным использование ActiveX DLL без регистрации. Позже напишу модуль/класс там будет функция:
Visual Basic
1
CreateObjectEx (DLLPath As String, CLSID As UUID) As Object
Также можно, подключив tlb, работать через любой интерфейс.
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
27.05.2014, 23:15  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
напишу модуль/класс там будет функция:
хорошо, если что можеш скинуть в контакт, адрес надеюсь помниш
и спасибо за поддержку

Добавлено через 1 минуту
скорее всего ты хоч сказать реализация компонента по UUID
без его регистрации ?

Добавлено через 1 минуту
Цитата Сообщение от The trick Посмотреть сообщение
Также можно, подключив tlb, работать через любой интерфейс.
да, конечно, хотелось бы всю инфу получать об объекте...
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
27.05.2014, 23:20
Цитата Сообщение от Антихакер32 Посмотреть сообщение
скорее всего ты хоч сказать реализация компонента по GUID'у
без его регистрации ?
Объект COM однозначно идентифицируется через CLSID.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
28.05.2014, 07:14  [ТС]
вот как это работает

Добавлено через 29 минут
на картинке запуск приложения из архива
а это значит, что запускать мои компоненты по технологии
COM, можно из разных интернет источников


нажать для просмотра картинки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2014, 07:14

Как вывести переменную из файла регистрации
У меня есть регистрация, при регистрации пользователь указывает логин,пароль,мыло и телефон. Вот как мне вывести номер телефон...

Вывод уведомления о успешной регистрации(не удачной) на странице с формой регистрации
Здравствуйте, не получается сделать вывод сообщения на странице с формой регистрации. &lt;?php $dbc = mysqli_connect('...',...

Вывести форму регистрации для регистрации другого пользователя
Здравствуйте, уважаемые форумчане! Простите, вообще не бум-бум в Joomle, но нужно сделать лабу по нему. Мне нужно сделать регистрацию...

Что за журнал регистрации в 1с8.3 есть, где все регистрации сохраняются в отдельными файлами в определенную папку
Здравствуйте, не подскажите, кто знает Что за журнал регистрации в 1с8.3 есть, где все регистрации сохраняются в отдельными файлами...

хочу вконтакт, а не получается. просит регистрации через два файла jad и ...! заколебался слать смс!
что делать с тупарылым аккаунтом, хочу вконтакт, а не получается. просит регистрации через два файла jad и ...! заколебался слать смс!


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

Или воспользуйтесь поиском по форуму:
51
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru