Форум: "Основная";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
ВнизКак создать DLL который работает как EXE сервер. Найти похожие ветки
← →
ikar (2002-02-14 09:48) [0]То есть он не загружается в адресное пространство программы, а запускается как самостоятельный процесс в системе.
← →
Fellomena (2002-02-14 11:06) [1]DLL по определению не может иметь своего адресного пространства. Сама концепция динамически компануемых библиотек подразумевает, что эта библиотека будет отражаться на адресное пространство некого процесса и выполняться в контексте этого процесса.
Другое дело, что можно заставить процесс Explorer.exe (думаю, знаком с таким ;) грузить в своё АП твою DLL, а на точку входа в DLL поставить код, использующий всю внутреннюю структуру DLL, т.е. все её ф-ии и процедуры.
← →
Digitman (M) (2002-02-14 11:27) [2]практически любой EXE можно превратить в OutOfProcess-сервер, включив в него код регистрации требуемой фабрики класса.
например, влючив в EXE-проект модуль, реализующий станд.класс TRemoteDataModule, ты фактически превращаешь свой EXE в OutOfProcess-сервер.
см., к примеру, как происходит регистрация фабрики класса TRemoteDataModule в разделе инициализации модуля, реализующего класс, наследующий функциональность TRemoteDataModule.
в общем же случае, см. TComObjectFactory.Create()
← →
Fellomena (2002-02-14 11:34) [3]2 Digitman: пардон, объясни пожалуйсто, при чём тут DLL ? Вопрос, как мне показалось, вполне определённый стоял - про DLL. Или я просто чего-то не поняла ?
← →
ikar (2002-02-14 11:52) [4]Вопрос именно про Dll но мне кажется что фабрику классов можно зарегистрировать и там, но как сделать это ручками. Я думаю Delphi сама этого делать не будет.
← →
Digitman (M) (2002-02-14 11:54) [5]>ikar
С DLL - никак. И не мучайся даже. OutOfProcess-сервер базируется искл-но на EXE.
← →
ikar (2002-02-14 11:58) [6]Но я слыхал про технологию которая позволяет использовать COM объекты in proc как exe out proc.
← →
Digitman (M) (2002-02-14 12:04) [7]>Fellomena
Действительно - я не "въехал" в суть вопроса)
Но - тем не менее : DLL - всегда InProc-сервер и никогда - OutOfProc-сервер. Это, надеюсь, понятно всем.
А вот по поводу IE и возможности автозагрузки им в свое АП указанной DLL при старте - не думаю, что сию "фичу" можно как-то отнести именно к ClassFactory-механизму. Как ты видишь себе способ заставить IE (даже с загруженной им нужной DLL) автоматически создать указанный объект по COM/OLE-запросу внешней задачи ?
← →
Fellomena (2002-02-14 12:15) [8]А я и не сказала, что можно использовать фабрику классов и вообще разместить в АП Explorer-a свой сервер.
Я просто постаралась объяснить принцип работы DLL и невозможность запустить её как самостоятельный процесс.
>> Но - тем не менее : DLL - всегда InProc-сервер и никогда - OutOfProc-сервер. Это, надеюсь,
понятно всем.
Именно про это я и сказала в первой мессаги !!!
← →
Digitman (M) (2002-02-14 12:25) [9]>Fellomena
Ok. Ч.н. - "нэма базару"))))
А вот давай-ка по случаю конфуза и испросим у автора : что же он имел ввиду под "DLL который работает как EXE сервер"
← →
Adder (M) (2002-02-14 13:46) [10]MSDN:
DllSurrogate
Enables DLL servers to run in a surrogate process. If an empty string is specified, the system-supplied surrogate is used, otherwise the value specifies the path of the surrogate to be used.
Registry Entry
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\APPID\
{AppID_value}\DllSurrogate = surrogate_path
Note
HKEY_CLASSES_ROOT is equivalent to HKEY_LOCAL MACHINE\SOFTWARE\Classes. These keys can be used interchangeably. HKEY_CLASSES_ROOT also provides compatibility with Microsoft® Windows® 3.1 and Windows 95.
Remarks
The DllSurrogate named value specifies that the class is a DLL that is to be activated in a surrogate EXE process, and the surrogate process to be used. The surrogate_path value is of type REG_SZ. To use the system-supplied generic surrogate process, set surrogate_path to an empty string or NULL. To specify another surrogate process, set surrogate_path to the path of the surrogate. As in the specification of the path of an EXE server under the LocalServer32 key, a full path specification is not necessary. The surrogate EXE must be written to properly communicate with the DCOM service as described in Writing a Custom Surrogate.
The DllSurrogate named value must be present for a DLL server to be activated in a surrogate. Activation refers to a call to CoGetClassObject, CoCreateInstance[Ex], CoGetInstanceFromFile, CoGetInstanceFromIStorage, or IMoniker::BindToObject. DLL servers are easy to write using standard development tools like Microsoft® Visual Basic®, Microsoft® Visual J++™, and Microsoft Visual Studio®. Running DLLs in a surrogate process provides the benefits of an executable implementation, including fault isolation, the ability to serve multiple clients simultaneously, and allowing the server to provide services to remote clients in a distributed environment.
← →
Adder (M) (2002-02-14 13:57) [11]Иначе говоря, можно сделав соответствующую запись в системном реестре, заставить InProc-сервер вести себя как OutOfProc-сервер,
запустив его в "суррогатном процессе". По умолчанию - используется DllHost.exe
А это пример (прям из моего реестра):
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\CLASSES\AppID\{BFD4D0D1-42C9-4791-B4BA-3AE9BE47882E}]
@="InSAT.MFC"
"DllSurrogate"=""
← →
Digitman (M) (2002-02-14 14:41) [12]Да, но ведь "вести себя как" не означает "быть" ? Все равно - и при таком подходе библиотеке требуется "чужое тело" - суррогатный процесс-носитель, чье АП будет использовано (!) без его (процесса) ведома....
А вообще - верно, согласен. Здесь что-то близкое к решению есть.
P.S.
(!) = Вот ведь чудная "дыра"-то для разного рода сетевой заразы ...
← →
Набережных С. (2002-02-14 16:59) [13]>ikar © (14.02.02 09:48)
Можно сделать DLL, которая будет загружаться RunDll32.exe. Для этого DLL должна экспортировать функцию типа(имя может быть любым):
function Execute(hWind: HWND; Instance: HWND;
pCmdLine: PChar;nCmdShow: Longint): Integer; StdCall;
Запуск можно производить командной строкой(например, через ярлык) примерно такого вида:
RunDll32.exe MyDllName.dll,Execute Param1 Param2
← →
Digitman (M) (2002-02-14 17:06) [14]>Набережных С.
Мы тут как бы о COM-механизме говорим. А ты о чем ?)
← →
Набережных С. (2002-02-14 17:18) [15]>Digitman (M) (14.02.02 17:06)
Полагаю, автор вопроса имел в виду именно это. Если я неправ, пусть он меня поправит.
← →
Digitman (M) (2002-02-14 17:46) [16]Ок. Но см. <ikar> © (14.02.02 11:58)
← →
Набережных С. (2002-02-14 18:06) [17]Вероятно, я действительно неверно понял. Надеюсь, меня не расстреляют?:-).
← →
Digitman (M) (2002-02-14 18:14) [18]>Набережных С.
Чуть-чуть :))))) Это не больно, поверь... )
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c