Тема: Вызов функций из DLL, хранящейся на сервере
Возможно ли?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Вызов функций из DLL, хранящейся на сервере
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
может вот это поможет
Клиент-серверная архитектура Приложений - это одна из вечнозеленых тем форума. Было много "хороших и разных" выступлений по этому поводу. Но есть чувство недостаточности, разрозненности информации. Может быть кто-нибудь из уважаемых специалистов возьмет на себя труд (например, ShaggyDoc) провести что-то вроде ликбеза на эту тему?
Уверен, что многие из участников были бы благодарны.
Я писал клиент сервер, но я предпологаю, что проще длл поставить где-то то рядом, если это позволяет задача.
А почему бы программно не копировать DLL в свою System32. Причем, если это делать при каждом запуске программы, то всегда свежая DDL гарантируется.
> brigval
Программа работает от имени обычного пользователя. Позволит ему это делать только свихнувшийся админ.
> LeonidSN
Много по этому написано книг. Один из способов - DCOM, то есть размещение COM на удаленном сервере.
Но нужны ли такие сложности при программировании для AutoCAD?
> brigval
Не факт. Библиотеку по идее (ИМХО) надо еще и зарегистрировать в системе (regsvr32 либо инсталлятор).
> kpblc
Не так. Регистрировать надо только DLL с COM-объектами. Обычную DLL регистрировать не нужно. Если ее использует только одно приложение, DLL может лежать просто рядом с ним.
В системные папки помещают DLL, к которым требуется доступ из разных приложений. Если DLL используют несколько приложений одной фирмы, их обычно размещают с Program Files\Common Files, например Program Files\Common Files\Autodesk Shared.
Рассуждая о сервере, надо уточнять терминологию. Например, файловый сервер может отображаться в виде диска и на нем можно зарегистрировать COM-dll. Приложение выполняется на рабочей станции в ее памяти.
А клиент-сервер - совсем другое. Это удаленная машина, к которой вообще может не быть "файлового" доступа. Клиент-серверные приложения выполняются на ресурсах сервера, а клиенту возвращают только запрошенный результат.
Например, сейчас все видят результат выполнения запроса к серверу. Программа работает один densi знает где, мы видим наш запрос (его лучше скрывать, чтобы не вводить в искушение "кул-хацкеров")
https://www.caduser.ru/forum/topic26761.html
и результат в виде текста этой страницы в формате HTML. Основную работу проделал сервер.
Программа работает от имени обычного пользователя. Позволит ему это делать только свихнувшийся админ.
А в чем криминал добавить свою библиотеку в System32? Что от этого будет хуже работать?
Библиотеку по идее (ИМХО) надо еще и зарегистрировать в системе (regsvr32 либо инсталлятор).
Да, но программно это сделать не сложно.
А в чем криминал добавить свою библиотеку в System32? Что от этого будет хуже работать?
У нормального админа обычные пользователи не имеют прав на запись в такие каталоги. А программа должна работать без запроса дополнительных привилегий. Кроме того, System32 рассматривают как свалку для своего "добра" только плохие разработчики. Для этого есть специально отведенные места (Documents and Settings и т.п).
> ShaggyDoc
То есть, для работы ОС и приложений криминала нет? Если так, то можно копировать и в System32. В этой папке все DLL операционной системой находятся автоматически. Без дополнительных действий и плохих и хороших программистов.
> brigval
DLL операционной системы - да. А вот посторонним DLL там делать нечего. Именно из-за них и происходит "криминал".
Даже "законопослушные" программисты (чаще всего на VB) иногда включают в свой дистрибутив "свои" варианты даже системных DLL. Этому способствуют некоторые системы подготовки инсталляций, которые запускают приложение, проверяют, какие DLL оно использует и включают в дистрибутив. Иногда эту DLL еще и подправят под свои интересы. После чего приходится переустанавливать или восстанавливать Windows.
А "нехорошие" программисты специально заменяют стандартные библиотеки на свои (трояны, вирусы и т.п.)
На вид безобидные чужие DLL, размещенные в системном каталоге тоже могут нести в себе что угодно.
Поэтому у хорошего админа доступ в такие места для пользователей закрыт. Если же программа такая "хитрая", что требует администраторских привилегий, то хороший админ ее и ставить не даст. Без всяких доказательств и объяснений.
Но зачем ломиться именно в System32? Хорошая программа всегда знает, где живут ее собственные компоненты и умеет к ним обращаться.
Если же программа такая "хитрая", что требует администраторских привилегий, то хороший админ ее и ставить не даст.
AutoCAD не из этих ли?
Но зачем ломиться именно в System32?
Потому что удобно и не требует продвинутых знаний "хорошего" программиста.
НО Плох тот "плохой" программист, который не хочет стать "хорошим"
AutoCAD не из этих ли?
Да, до версии 2004 был именно "из этих". Что весьма снижало уважение к фирме, так как WinNT, Win2000 уже существовали, а AutoCAD 200* были сделаны, как будто есть только Win98.
Потому что удобно и не требует продвинутых знаний "хорошего" программиста.
Нужны не "продвинутые" знания. Надо просто соблюдать элементарные требования к программам, которые должны работать без присутствия автора и на любом компьютере.
обсуждение слегка съехало в сторону.
зачем мне это надо? просто из удобства. чтобы не бегать по 20 машинам dll не заменять. согласитесь, проще это сделать один раз на сервере.
> DVAD
ИМХО: сделать инсталлятор и отслеживать корректность версии будет проще в результате.
> DVAD
А мне кажется, что Вы получили варианты ответов.
На мой взгляд, пользовательская программа должна сама при каждом запуске копировать DLL на свой компьютер. Регистрировать если это необходимо.
В этом случае и будет удобство. Проверено.
И саму программу удобно держать на сервере. В этом случае и ее можно заменять только в одном месте и в любое время.
должны работать без присутствия автора и на любом компьютере.
С этим нельзя не согласится, особенно если программа коммерческая.
> ShaggyDoc
И все-таки. Как можно осуществить вызов функций из из обычной DLL не помещая ее в System32?
Программа находится на сервере, DLL - на сервере. Это очень удобно при смене версий. На клиентской машине папки с программой нет. В какое место может быть помещена DDL на клиентском кмпьютере и что должна сделать программа что б получить возможность работать с функциями из DLL?
Или, возможно проще, в какой папке ОС ищет DLL, если не находит ее в System32?
> brigval
...в какой папке ОС ищет DLL, если не находит ее в System32...
1) The directory from which the application loaded. The current directory.
Windows XP: If HKLM\System\CurrentControlSet\Control\SessionManager\SafeDllSearchMode is 1, the current directory is the last directory searched. The default value is 0.
2) The Windows system directory. The name of this directory is System32.
3) Windows NT/2000/XP: The 16-bit Windows system directory. The name of this directory is System.
4)The Windows directory.
5)The directories that are listed in the PATH environment variable.
The first directory searched is the one directory containing the image file used to create the calling process
> Александр Ривилис
Спасибо!
В данном случае
1 - не подходит, так как программа на сервере
2 и 3 - это для плохих программ, как говорит ShaggyDoc
4 - видимо, как и в случаях 2 и 3.
5 - остается одно, копировать DLL в папку для временных файлов. Наверное это логично.
А откуда такая полезная информация.
> brigval
MS Visual Studio Help, описание функции LoadLibrary, которая и занимается тем, что загружает DLL-файлы. Кстати думаю, что ее можно использовать и из VBA. Если задать полный путь к DLL-файлу, то он будет загружен по этому пути (если еще не был загружен).
P.S.: Это именно та функция, о которой написал Smel: https://www.caduser.ru/forum/topic26761.html
Параметр lpLibFileName может быть полным путем доступа к DLL-файлу.
> Александр Ривилис
Все понятно. Спасибо.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Вызов функций из DLL, хранящейся на сервере
Форум работает на PunBB, при поддержке Informer Technologies, Inc