powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Правильный перенос процедуры из проекта в Activexdll
25 сообщений из 30, страница 1 из 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
25 сообщений из 30, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Правильный перенос процедуры из проекта в Activexdll
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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