Тема: Вызов функций из DLL, хранящейся на сервере

Возможно ли?

Re: Вызов функций из DLL, хранящейся на сервере

Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

может вот это поможет

Re: Вызов функций из DLL, хранящейся на сервере

Клиент-серверная архитектура Приложений - это одна из вечнозеленых тем форума. Было много "хороших и разных" выступлений по этому поводу. Но есть чувство недостаточности, разрозненности информации. Может быть кто-нибудь из уважаемых специалистов возьмет на себя труд (например, ShaggyDoc) провести что-то вроде ликбеза на эту тему?
Уверен, что многие из участников были бы благодарны.

Re: Вызов функций из DLL, хранящейся на сервере

Я писал клиент сервер, но я предпологаю, что проще длл поставить где-то то рядом, если это позволяет задача.

Re: Вызов функций из DLL, хранящейся на сервере

А почему бы программно не копировать DLL в свою System32. Причем, если это делать при каждом запуске программы, то всегда свежая DDL гарантируется.

Re: Вызов функций из DLL, хранящейся на сервере

> brigval
Программа работает от имени обычного пользователя. Позволит ему это делать только свихнувшийся админ.

> LeonidSN
Много по этому написано книг. Один из способов - DCOM, то есть размещение COM на удаленном сервере.
Но нужны ли такие сложности при программировании для AutoCAD?

Re: Вызов функций из DLL, хранящейся на сервере

> brigval
Не факт. Библиотеку по идее (ИМХО) надо еще и зарегистрировать в системе (regsvr32 либо инсталлятор).

Re: Вызов функций из DLL, хранящейся на сервере

> 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. Основную работу проделал сервер.

Re: Вызов функций из DLL, хранящейся на сервере

ShaggyDoc пишет:

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

А в чем криминал добавить свою библиотеку в System32? Что от этого будет хуже работать?

kpblc пишет:

Библиотеку по идее (ИМХО) надо еще и зарегистрировать в системе (regsvr32 либо инсталлятор).

Да, но программно это сделать не сложно.

Re: Вызов функций из DLL, хранящейся на сервере

brigval пишет:

А в чем криминал добавить свою библиотеку в System32? Что от этого будет хуже работать?

У нормального админа обычные пользователи не имеют прав на запись в такие каталоги. А программа должна работать без запроса дополнительных привилегий. Кроме того, System32 рассматривают как свалку для своего "добра" только плохие разработчики. Для этого есть специально отведенные места (Documents and Settings и т.п).

Re: Вызов функций из DLL, хранящейся на сервере

> ShaggyDoc
То есть, для работы ОС и приложений криминала нет? Если так, то можно копировать и в System32. В этой папке все DLL операционной системой находятся автоматически. Без дополнительных действий и плохих и хороших программистов.

Re: Вызов функций из DLL, хранящейся на сервере

> brigval
DLL операционной системы - да. А вот посторонним DLL там делать нечего. Именно из-за них и происходит "криминал".
Даже "законопослушные" программисты (чаще всего на VB) иногда включают в свой дистрибутив "свои" варианты даже системных DLL. Этому способствуют некоторые системы подготовки инсталляций, которые запускают приложение, проверяют, какие DLL оно использует и включают в дистрибутив. Иногда эту DLL еще и подправят под свои интересы. После чего приходится переустанавливать или восстанавливать Windows.
А "нехорошие" программисты специально заменяют стандартные библиотеки на свои (трояны, вирусы и т.п.)
На вид безобидные чужие DLL, размещенные в системном каталоге тоже могут нести в себе что угодно.
Поэтому у хорошего админа доступ в такие места для пользователей закрыт. Если же программа такая "хитрая", что требует администраторских привилегий, то хороший админ ее и ставить не даст. Без всяких доказательств и объяснений.
Но зачем ломиться именно в System32? Хорошая программа всегда знает, где живут ее собственные компоненты и умеет к ним обращаться.

Re: Вызов функций из DLL, хранящейся на сервере

ShaggyDoc пишет:

Если же программа такая "хитрая", что требует администраторских привилегий, то хороший админ ее и ставить не даст.

AutoCAD не из этих ли?

Но зачем ломиться именно в System32?

Потому что удобно и не требует продвинутых знаний "хорошего" программиста.
НО Плох тот "плохой" программист, который не хочет стать "хорошим"

Re: Вызов функций из DLL, хранящейся на сервере

brigval пишет:

AutoCAD не из этих ли?

Да, до версии 2004 был именно "из этих". Что весьма снижало уважение к фирме, так как WinNT, Win2000 уже существовали, а AutoCAD 200* были сделаны, как будто есть только Win98.

Потому что удобно и не требует продвинутых знаний "хорошего" программиста.

Нужны не "продвинутые" знания. Надо просто соблюдать элементарные требования к программам, которые должны работать без присутствия автора и на любом компьютере.

Re: Вызов функций из DLL, хранящейся на сервере

обсуждение слегка съехало в сторону.
зачем мне это надо? просто из удобства. чтобы не бегать по 20 машинам dll не заменять. согласитесь, проще это сделать один раз на сервере.

Re: Вызов функций из DLL, хранящейся на сервере

> DVAD
ИМХО: сделать инсталлятор и отслеживать корректность версии будет проще в результате.

Re: Вызов функций из DLL, хранящейся на сервере

> DVAD
А мне кажется, что Вы получили варианты ответов.
На мой взгляд, пользовательская программа должна сама при каждом запуске копировать DLL на свой компьютер. Регистрировать если это необходимо.
В этом случае и будет удобство. Проверено.
И саму программу удобно держать на сервере. В этом случае и ее можно заменять только в одном месте и в любое время.

ShaggyDoc пишет:

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

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

Re: Вызов функций из DLL, хранящейся на сервере

> ShaggyDoc
И все-таки. Как можно осуществить вызов функций из из обычной DLL не помещая ее в System32?
Программа находится на сервере, DLL - на сервере. Это очень удобно при смене версий. На клиентской машине папки с программой нет. В какое место может быть помещена DDL на клиентском кмпьютере и что должна сделать программа что б получить возможность работать с функциями из DLL?
Или, возможно проще, в какой папке ОС ищет DLL, если не находит ее в System32?

Re: Вызов функций из DLL, хранящейся на сервере

> 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

Re: Вызов функций из DLL, хранящейся на сервере

> Александр Ривилис
Спасибо!
В данном случае
1 - не подходит, так как программа на сервере
2 и 3 - это для плохих программ, как говорит ShaggyDoc
4 - видимо, как и в случаях 2 и 3.
5 - остается одно, копировать DLL в папку для временных файлов. Наверное это логично.
А откуда такая полезная информация.

Re: Вызов функций из DLL, хранящейся на сервере

> brigval
MS Visual Studio Help, описание функции LoadLibrary, которая и занимается тем, что загружает DLL-файлы. Кстати думаю, что ее можно использовать и из VBA. Если задать полный путь к DLL-файлу, то он будет загружен по этому пути (если еще не был загружен).

Re: Вызов функций из DLL, хранящейся на сервере

P.S.: Это именно та функция, о которой написал Smel: https://www.caduser.ru/forum/topic26761.html
Параметр lpLibFileName может быть полным путем доступа к DLL-файлу.

Re: Вызов функций из DLL, хранящейся на сервере

> Александр Ривилис
Все понятно. Спасибо.