powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Правильный перенос процедуры из проекта в Activexdll
30 сообщений из 30, показаны все 2 страниц
Правильный перенос процедуры из проекта в Activexdll
    #38848205
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот вопрос я частично затрагивал в теме http://www.sql.ru/forum/1134626/licenzionnyy-kod-pri-ustanovki-programmy
Там этот вопрос уклонялся от темы , поэтому решил создать именно узконаправленную!
В интернете прочитал о том как это делается. В одних источниках пишут что можно передавать по ссылке, тогда нужно использовать модификатор ByRef. Но в прошлой теме пользователь отписал другое http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1134626&msg=17076736

Например мне нужно передать простейшую процедуру в dll.
Код: vbnet
1.
2.
3.
4.
Private Sub Test()
dim a as integer
a=5
End Sub



Я думал это сделать так:
Код: vbnet
1.
2.
3.
Sub Test(ByRef a as integer)
b=a
End Sub



Но в таком виде при каждом изменении переменной а в основном проекте, переменная b в dll не будет изменяться. А мне как раз нужно чтобы менялась переменная b.
Подскажите пожалуйста как правильно записать в данном случае.
Заранее благодарен за помощь.
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38848260
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а переменная b при этом где объявлена?

и вообще, используйте это - сразу прояснится в голове
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38848365
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proа переменная b при этом где объявлена?

Переменная b объявлена в основном проекте.

Shocker.Proи вообще, используйте это - сразу прояснится в голове

Прочитал. Не прояснилось ибо уж каким бы я чайником не был а вот Option Explicit знаю что такое. и для чего нужно. Но я понимаю что вы отправили мне это именно из-за вопроса про переменную b.
Код: vbnet
1.
2.
3.
4.
5.
Option Explicit
dim b as integer, a as integer
Private Sub Test()
a=5
End Sub


Вот поправил как в основном проекте записано. А в dll ссылкой так чтобы b изменялась не знаю как перенести.
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38848398
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я же писал вам в предыдущей ветке - вы не вникли
dll-ка не имеет ни малейшего понятия о том, кто ее вызвал, естественно, не имеет ни малейшего понятия о переменной "b", объявленной в другом проекте.

обмениваться данными можно различными способами - самое простое в данном случае - использовать в dll Function вместо Sub или ByRef параметры
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38848415
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Prodll-ка не имеет ни малейшего понятия о том, кто ее вызвал, естественно, не имеет ни малейшего понятия о переменной "b", объявленной в другом проекте.

Это я понял, так даже переменная а не меняется. Хотя я ее в dll объявил же. Если как вы сказали с помощью Function, то вот так получится если записать в dll
Код: vbnet
1.
2.
3.
Function Test(ByRef a as integer,ByRef b as integer )
b=a
End Function
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38848660
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronХотя я ее в dll объявил жеАга. А значение где назначали этой "а"? Тоже внутри DLL?
Вообще если хотите менять переменную из одного проекта в другом(а по сути именно этого и хотите) - надо сначала прописать в DLL процедуры назначения значений переменных. Подключить DLL к своему проекту(если честно из двух ссылок в первом посте так и не понял как именно Вы подключаете DLL к рабочему проекту). Если она зарегистрирована - то ссылаться на функции в ней можно через CreateObject.

Т.е. создаете свою DLL(с именем, скажем "MyDLL") с классом Class1. В нем создаете функцию:
Код: vbnet
1.
2.
3.
4.
dim b as integer
Function GetB(a as integer)
    b = a
End Function


и уже в основном проекте при каждом изменении "а" надо будет вызывать изменение "b"

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub ChangeA()
dim oDLL as object
dim a as integer
'это по идее можно сделать один раз при инициализации проекта,
'чтобы не терять время каждый раз на создание нового экземпляра
'oDLL тогда должна быть объявлена на уровне проекта, а не модуля
set oDLL = CreateObject("MyDLL.Class1")
a = 5
oDLL.GetB a'вызываем функцию изменения переменной b в DLL
End Sub
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38850160
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_PristВообще если хотите менять переменную из одного проекта в другом(а по сути именно этого и хотите)
Я хочу, чтобы при изменении переменной в проекте, она менялась и в dll(чтобы они связаны были)
The_Pristкак именно Вы подключаете DLL к рабочему проекту
Да никак не подключаю. Просто создаю пустой dll, нигде не регистрирую, компилирую. И в проекте проверяю просто на наличие этого dll, создавая объект
Код: vbnet
1.
set oDLL = CreateObject("MyDLL.Class1")
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38850170
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronЯ хочу, чтобы при изменении переменной в проекте, она менялась и в dll(чтобы они связаны были)Ваш проект и dll-ка - это ДВА РАЗНЫХ проекта. При этом в вашем случае, они не работают ОДНОВРЕМЕННО! Работает либо один, либо другой. А ОДНА переменная НЕ МОЖЕТ присутствовать одновременно в двух проектах и тем более одновременно изменяться в них. СНАЧАЛА меняете переменную в одном проекте, ПОТОМ передаете ее значение в другой проект, ПОТОМ меняете ДРУГУЮ переменную в этом другом проекте.

Так понятнее?
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38850228
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProТак понятнее?
Более чем!
Если взять реальный пример:-
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
dim VB as single, VelVB as single
Private Sub Raschet_na_deni()
         VB = VelVB
         NB = VelNB
           Vtek = 0
            Moduli_rascheta
End Sub


Я хотел, например, выражение VB=VelVB перенести в dll. Предполагаю, что раз переношу туда, то в этой процедуре ее уже не будет, а будет ссылка на ,допустим, Project1.dll.
Напишите ,пожалуйста, как это выражение правильно перенести и объявить в dll, чтобы при изменении данных в основном проекте, расчет производился правильно. Т.е. при ОТСУТСТВИИ этого выражения в основном проекте расчет все-равно выполнялся
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38850278
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronНапишите ,пожалуйстаЯ очень надеялся, что можно будет обойтись без этого и сможете сами сделать выводы из всего того, что было написано в двух топиках и из учебника. К тому же Антонарий изначально давал вам конкретный пример. К сожалению, я вас переоценил (

vdekameronЯ хотел, например, выражение VB=VelVB перенести в dll
в проекте
Код: vbnet
1.
VB = oDLL.MyFunc(VelVB)


в dll
Код: vbnet
1.
2.
3.
Public Function MyFunc(VelVB As Single) As Single
  MyFunc = VelVB
End Sub
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38850298
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProК сожалению, я вас переоценил (
Старался, видимо мало. Буду больше. Но не для вас, а для себя. А именно для того, чтобы спецы ,как вы, не писали таких комментов.
Читаю сейчас Лукина(автор). Для вас это конечно детский уровень.
А за помощь спасибо! буду пробовать.
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38850735
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все получилось! Еще раз большое спасибо!
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38851529
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может вопрос немного не по теме, но он касается той же безопасности.
Перевожу сейчас справку по SF
Если я на каком то этапе установки программы импортирую какие-то значения реестра. Это коим образом повлияет на безопасность? Т.е. добавит уровень защиты?
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38855583
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я что-то в тупике. Создал на работе ActiveX dll, перенес туда переменные. Все работало. Скинул на флешку пришел домой, запустил, а проект не видит этот dll. Хотя он в той же папке с проектом. В чем может быть причина
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38855594
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том, что dll не зарегистрирована
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38855671
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Как же я до этого то, делал то же самое-работало. А тут на тебе.
Уважаемый Shocker.Pro , может это винда глючит?

Хм. Я бы этого не говорил если бы не еще один глюк:-
С помощью SF указал что при установки проги в реестр записать ключи. А в самой проге(как вы уже знаете) делаю проверку на их наличие. Так вот...устанавливаю прогу дома, иду в реестр в нужный раздел. А фигушки. Кючей не видно. Запускаю в пошаговом прогу, расставляю точки. Показывает,что эти ключи есть. А в реестре ну не вииижу их. Меняю в проге имя одного ключа- выдает ошибку, значит они реально есть в реестре. Это как)
А через SF я их вижу в реестре, когда нажимаю- "Импорт разделов реестра"

Это тоже закономерность или моему буку дома нужна мед. помощь
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38855673
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте зарегистрировать вручную и проверить (regsvr32)

про реестр мало что могу сказать, мало с ним имел дело, может с правами там что-то...
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38855727
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Эмм...т.е. Вы хотите сказать что все старания и труды напрасны

Если я буду ставить готовый продукт юзерам(dll планирую закидывать куда-то в :C\windows), то получается что работать не будет елки-палки, или в этом случае они будут зарегистрированы?
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38855758
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38855764
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро! Уважаемый Shocker.Pro, сейчас на работе проделал следующее :-
1) Переместил dll из папки где весть проект на раб. стол. Итог- проект не видит dll
2) Перемещаю назад в папку, где был создан- все работает.

Напрашивается вывод:- Дома конечно не тот путь к dll , может поэтому проект не видит его?
Но раньше же я перемещал эту dll куда хотел, когда тестил, и лишь тогда, когда удалял ее, прога ругалась матом.

P.S. Но тогда когда я тестил я вроде компилировал сам проект. Сейчас еще не компилировал...может как-то с этим связано. Уже не знаю на что грешить!
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38855770
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Еще раз прочитал ваш коммент:-
Студия автоматически регистрирует dll-ку при компиляции по месту компиляции. Установщик зарегистрирует ее по месту копирования. Можно вручную зарегистрировать ее командой regsvr32. В связи с этим простое переименование файла библиотеки ничего не даст.

Дошло
Спасибо!!!
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38893930
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Них. не могу понять. Уже нервничаю.
Код: vbnet
1.
2.
3.
4.
5.
Dim dll2 As Object
         Set dll2 = CreateObject("CalcMod1.Class1")
              Napor = dll2.MyFuncVB(VB) - dll2.MyFuncNB(NB) 
              Generaciia = dll2.MyFuncVelG(VelG) 
              Pritok = dll2.MyFuncVelP(VelP)


Почему Generaciia и Pritok получают значения а Napor =0..????
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function MyFuncVelG(VelG As Integer) As Integer
  MyFuncVelG = VelG
End Function
Public Function MyFuncVelP(VelP As Integer) As Integer
  MyFuncVelP = VelP
End Function
Public Function MyFuncVB(VB As Double) As Double
  MyFuncVB = VB
End Function
Public Function MyFuncNB(NB As Double) As Double
  MyFuncNB = NB
End Function


PS
1)Все три переменные объявлены глобально в модуле кода, т.к. нужны в трех формах
2)Переменные VB и NB объявлены как Double в dll и Napor тоже как Double и в модуле кода.
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38893939
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim dll2 As Object
Set dll2 = CreateObject("CalcMod1.Class1")

MsgBox VB
MsgBox NB

Napor = dll2.MyFuncVB(VB) - dll2.MyFuncNB(NB) 
Generaciia = dll2.MyFuncVelG(VelG) 
Pritok = dll2.MyFuncVelP(VelP)



ЗЫ: не стоит злоупотреблять отступами там, где код находится на одном уровне иерархии. Отступы делаются внутри условий, циклов и подобных вещей. Последовательно выполняющиеся команды должны быть на одном уровне
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38893946
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
Dim dll2 As Object
         Set dll2 = CreateObject("CalcMod1.Class1")
              Napor = dll2.MyFuncVB(VB) - dll2.MyFuncNB(NB) 
              Generaciia = dll2.MyFuncVelG(VelG) 
              Pritok = dll2.MyFuncVelP(VelP)



где переменные ваши объявлены, вы можете нормальный полный код выложить целиком, а не кусками выдранными из контекста?
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38893949
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы вообще не советовал использовать в качестве переменных такие сочетания как VB...Хоть внутри процедуры именно эта переменная будет иметь приоритет - все же следует убедиться, что Вы не подменяете значение иного объекта. Лучше как-то так хотя бы:
dblVB
И префикс есть, указывающий на тип хранимых данных и название Вам понятное.
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38893978
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЗЫ: не стоит злоупотреблять отступами там, где код находится на одном уровне иерархии. Отступы делаются внутри условий, циклов и подобных вещей. Последовательно выполняющиеся команды должны быть на одном уровне

Я не понял сказанного(((
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38893981
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_PristА я бы вообще не советовал использовать в качестве переменных такие сочетания как VB

Спасибо. Автор в книге тоже советовал всегда префиксы делать. Но я еще не привык.
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38894022
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneгде переменные ваши объявлены
Спасибо. Я промолчу как они были объявлены.
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38894140
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronShocker.ProЗЫ: не стоит злоупотреблять отступами там, где код находится на одном уровне иерархии. Отступы делаются внутри условий, циклов и подобных вещей. Последовательно выполняющиеся команды должны быть на одном уровне

Я не понял сказанного(((

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Оператор1
Оператор2
Оператор3
If условие Then
  Оператор1
  Оператор2
  Оператор3
  If условие Then
    Оператор1
    Оператор2
    Оператор3
    For i = 1 To 5
      Оператор1
      Оператор2
      Оператор3
      If условие Then
        Оператор1
        Оператор2
        Оператор3
      End If
    Next 
  End If
  Оператор4
End If



Вот так общепринято и понятно всем с первого взгляда. Наглядно видно начало и конец условия, начало и конец цикла. Когда ты начинаешь сочинять свое собственное форматирование, это понятно только тебе, да и то, пока ты не написал достаточно много кода.
...
Рейтинг: 0 / 0
Правильный перенос процедуры из проекта в Activexdll
    #38894212
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProВот так общепринято и понятно всем с первого взгляда. Наглядно видно начало и конец условия, начало и конец цикла. Когда ты начинаешь сочинять свое собственное форматирование, это понятно только тебе, да и то, пока ты не написал достаточно много кода.
Теперь понял. Мне самому неудобно, я стараюсь везде отступы делать и даже иногда просто строку пустую оставлять, где визуально удобно разделить.
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Правильный перенос процедуры из проекта в Activexdll
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]