Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отключить DLL выборочно. / 12 сообщений из 12, страница 1 из 1
22.09.2006, 14:00
    #34006210
Кузнецов Игорь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
Добрый день. Столкнулся с такой ситуацией когда объект созданный на основе класса, при уничтожении выполняет команду
Код: plaintext
CLEAR DLLS имя1, имя2, ...  && 
где имена это используемые API-шные вызовы. Но хелп утверждает, что по команде clear dlls из памяти удаляются все задекларированные библиотеки. Буквально: Clears from memory all external shared libraries registered with DECLARE - DLL. Именно так и происходит - все API перестают работать!
В связи с этим вопрос: Можно ли как то обособить объект, в частности форму, на которой лежит подобный класс, чтобы при дестрое его объектов не нарушалась работа других форм проекта, где тоже используются API-шные вызовы? Из другой библиотеки!

VFP6SP5
----------------------------------------------
Кто в армии служил - тот в цирке не смеется.
...
Рейтинг: 0 / 0
22.09.2006, 14:12
    #34006266
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
Я делаю так:
1. Не выдаю команды CLEAR DLLS, кроме, как при выходе из приложения при отладочном режиме
2. Для исключения декларирования одной функции дважды делаю так:

Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL ARRAY laDeclaredDlls( 1 , 3 )
LOCAL m.lnLen, m.lcNameMyDDL
m.lnLen = ADLLS(m.laDeclaredDlls)
m.lcNameMyDDL = [NameMyDLL]
IF ASCAN(m.laDeclaredDlls, m.lcNameMyDDL,  1 , m.lnLen,  2 ,  15 ) =  0 
      DECLARE ....
ENDIF
С уважением, Алексей
...
Рейтинг: 0 / 0
22.09.2006, 14:20
    #34006301
qwertyqwerty
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
Кузнецов ИгорьДобрый день. Столкнулся с такой ситуацией когда объект созданный на основе класса, при уничтожении выполняет команду
Код: plaintext
CLEAR DLLS имя1, имя2, ...  && 
где имена это используемые API-шные вызовы. Но хелп утверждает, что по команде clear dlls из памяти удаляются все задекларированные библиотеки. Буквально: Clears from memory all external shared libraries registered with DECLARE - DLL. Именно так и происходит - все API перестают работать!
В связи с этим вопрос: Можно ли как то обособить объект, в частности форму, на которой лежит подобный класс, чтобы при дестрое его объектов не нарушалась работа других форм проекта, где тоже используются API-шные вызовы? Из другой библиотеки!

VFP6SP5
----------------------------------------------
Кто в армии служил - тот в цирке не смеется.

Нет под рукой хелпа от VFP6, но есть VFP8 - там:
If you specify no cAliasNameList, all DLLS are removed from memory.
т.е. удаляются из памяти все, если нет списка.
...
Рейтинг: 0 / 0
22.09.2006, 14:21
    #34006309
Кузнецов Игорь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
Мда! Класс написан не мной. В таком случае все классы, которые я применяю в своём проекте я обязан проверить на отсутствие CLEAR DLLS а также на наличие защиты от повторного декларирования! Не весело! Энтузиазм убывает!
---------------------------------------------
Кто в армии служил - тот в цирке не смеется.
...
Рейтинг: 0 / 0
22.09.2006, 14:24
    #34006324
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
Кузнецов ИгорьМда! Класс написан не мной. В таком случае все классы, которые я применяю в своём проекте я обязан проверить на отсутствие CLEAR DLLS а также на наличие защиты от повторного декларирования! Не весело! Энтузиазм убывает!

Не думаю, что в Destoy классов можно использовать CLEAR DLLS!!
Это, примерно, тоже самое, что там же использовать CLOSE TABLES!!!
С уважением, Алексей.
...
Рейтинг: 0 / 0
22.09.2006, 14:30
    #34006355
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
Aleksey-K2. Для исключения декларирования одной функции дважды делаю так:
...


Можете объяснить, какие проблемы возникнут, если задекларировать одну и ту же DLL несколько раз?

PS: В VFP6 не было функции ADLLS() и выгрузить DLL можно было только все сразу. Выборочной выгрузки (только указанных DLL) - еще не было.
...
Рейтинг: 0 / 0
22.09.2006, 14:31
    #34006358
Кузнецов Игорь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
Но такая команда подается именно в DESTROY класса. В примечании к классу указано, что он написан в среде VFP8. Очевидно, там это будет работать без проблем. А в шестерке требуется адаптация ...
---------------------------------------------
Кто в армии служил - тот в цирке не смеется.
...
Рейтинг: 0 / 0
22.09.2006, 14:39
    #34006382
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
ВладимирМ Aleksey-K2. Для исключения декларирования одной функции дважды делаю так:
...


Можете объяснить, какие проблемы возникнут, если задекларировать одну и ту же DLL несколько раз?

PS: В VFP6 не было функции ADLLS() и выгрузить DLL можно было только все сразу. Выборочной выгрузки (только указанных DLL) - еще не было.
Да, согласен.. Код у меня старый :)
Сколько раз не декларируй одну и туже DLL - она в массиве после ADLLS() показывается только один раз. Но помнится мне, что в какой-то предыдущей версии VFP (не 9.0 + SP1) было не так хорошо :)
С уважением, Алексей.
...
Рейтинг: 0 / 0
24.09.2006, 16:24
    #34008324
Cyv
Cyv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
А я на шестёрке делал вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
FUNCTION isDLLDeclared(tcLibName)
LOCAL lcFileName,lcStr,llResult
lcFileName = ADDBS(GETENV("TEMP")) + SUBSTR(SYS( 2015 ), 3 ) + ".tmp"
tcLibName = SPACE( 1 )+ m.tcLibName + SPACE( 1 )

DISPLAY DLLS TO FILE (m.lcFileName) NOCONSOLE

IF FILE(m.lcFileName)
	lcStr = FILETOSTR(m.lcFileName)
	llResult = UPPER(m.tcLibName) $ UPPER(m.lcStr)
	ERASE (m.lcFileName)
ENDIF

RETURN m.llResult
ENDFUNC
...
Рейтинг: 0 / 0
24.09.2006, 17:19
    #34008352
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
CyvА я на шестёрке делал вот так:
Повторю вопрос, адресованный Aleksey-K .

Можешь объяснить зачем? В смысле, что произойдет такого ужасного, если объявить одну и ту же DLL несколько раз?

Ведь DISPLAY DLLS все-равно покажет, что регистрация произошла только один раз. Нет нескольких зарегистрированных копий DLL в памяти.

Чтобы не отвлекаться на разные версии, ограничимся той, по которой собственно и задан вопрос - VFP6SP5
...
Рейтинг: 0 / 0
24.09.2006, 18:04
    #34008370
Cyv
Cyv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
авторчто произойдет такого ужасного, если объявить одну и ту же DLL несколько раз?
Да ничего наверное, но как-то неаккур-р-ратненько :)
...
Рейтинг: 0 / 0
24.09.2006, 20:01
    #34008437
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отключить DLL выборочно.
ВладимирМ CyvА я на шестёрке делал вот так:
Повторю вопрос, адресованный Aleksey-K .

Можешь объяснить зачем? В смысле, что произойдет такого ужасного, если объявить одну и ту же DLL несколько раз?

Ведь DISPLAY DLLS все-равно покажет, что регистрация произошла только один раз. Нет нескольких зарегистрированных копий DLL в памяти.

Чтобы не отвлекаться на разные версии, ограничимся той, по которой собственно и задан вопрос - VFP6SP5
Повторю ответ, адресованный ВладимирМ:
Ничего страшного не произойдет, как впрочем и при исполнении такого кода:
a1 = 12
a1 = 12
a1 = 12
...
Почему бы вам вопрос не задать и про это?
Зачем писать несколько раз один и тот же код?
С уважением, Алексей.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отключить DLL выборочно. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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