Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

Выгрузка *.dll   Найти похожие ветки 

 
DeadMeat ©   (2007-03-01 09:08) [0]

Здравствуйте уважаемые жители.<br/>Вот проблема возникла. Пишу *.dll. Встала задача выполнять некоторые действия &quot;во время&quot; загрузки ее в АП процесса и &quot;во время&quot; выгрузки. Используется только в одном процессе.<br/>Если быть точным, то пишу библиотеку для подключения в MSSQL 2005. Расширенные процедуры делаю. Вот и нужно создать &quot;кое-чаво&quot; во время загрузки. И это &quot;кое-чаво&quot; уничтожить во время выгрузки.<br/>Пробовал:<br/><code><br/>DLLProc:= @DLLEntryPoint;<br/>DLLEntryPoint(DLL_PROCESS_ATTACH);<br/></code><br/>и соответственно:<br/><code><br/>procedure DLLEntryPoint(dwReason: DWORD); stdcall;<br/>begin<br/> &#xA0;case dwReason of<br/> &#xA0; &#xA0;DLL_PROCESS_ATTACH: begin<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;end;<br/> &#xA0; &#xA0;DLL_PROCESS_DETACH: begin<br/> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;end;<br/> &#xA0;end;<br/>end;<br/></code><br/>Вот при таком подходе, MS SQL 2005 почему то &quot;падает&quot;. Он просто тихо молча завершает процесс свой и все. Убрал первые две строки (DLLEntryPoint) и все работает нормально. Но мне все же надо знать когда &quot;мы загружаемся&quot; и когда &quot;мы выгружаемся&quot;.<br/><br/>ЗЫ. Тестировалось на:<br/>WinXP (SP2), SQL Express 2005 (SP2)<br/>Win2k3 (SP1), SQL Enterprise 2005 (SP1)<br/>Win2k3 (Sp1), SQL Enterprise 2000 (SP4)<br/>В первых двух случаях SQL просто &quot;умирает&quot;. Но самое интересное (на мой взгляд) это то, что &quot;умирает&quot; он не сразу, а через какоето время. Т.е. библиотека работает. Делает свое дело исправно. И в какойто момент - БАЦ. И нету.<br/>В последнем (SQL 2000) случае все работает как часы. И ничего не умирает.<br/><br/>ЗЫЫ. Не исключаю, что для расширенных процедур нужно чтото делать еще. Но вот что - не знаю. Пробовал даже делать абсолютно пустую *.dll - результат тотже. Т.е. я &quot;подсовывал&quot; 2005ому пустую (экспортировались функции, внутри которых ничего не делалось и при загрузке также не производилось никаких действий) библиотеку и когда он обращался к одной из функций, через какоето время происходило падение. Стоило убрать DLLEntryPoint и иже с ним, и все стало работать нормально.<br/>Кто сталкивался с подобным? Пишу на Turbo Delphi Exporer 2006 со всеми апдейтами и хотфиксами.


 
Сергей М. ©   (2007-03-01 09:34) [1]

stdcall убери - и всех делов)


 
DeadMeat ©   (2007-03-01 10:59) [2]

Мда.<br/>Ну что сказать. Большое спасибо Вам Сергей. Все заработало. Проблема решена.<br/>Еще раз спасибо!


 
kernel ©   (2007-03-05 19:52) [3]

Доброго времени суток. Чтобы новую тему не создавать, решил спросить здесь. А что вообще &quot;дает&quot; stdcall, в смысле для чего он?


 
Eraser ©   (2007-03-05 20:19) [4]

<i>&gt; [3] kernel © &#xA0; (05.03.07 19:52)<br/></i><br/>stdcall это соглашение о передачи параметров функций. Гугл подскажет поподробнее.


 
Belorus ©   (2007-03-06 00:00) [5]

Типа порядок следования параметров обратный.. Или наоборот прямой :) Забыл.


 
Eraser ©   (2007-03-06 00:08) [6]

<i>&gt; [5] Belorus © &#xA0; (06.03.07 00:00)<br/></i><br/>обратный, т.к. через стек.


 
Сергей М. ©   (2007-03-06 08:41) [7]

<i><br/>&gt; kernel © &#xA0; (05.03.07 19:52) [3]<br/></i><br/><br/>Соглашение stdcall предписывает компилятору генерировать код вызова/завершения подпрограммы по следующим стандартным правилам:<br/><br/>1. Перед вызовом подпрограммы параметры (если они имеются) помещаются в стек справа налево в порядке их следования в строке текста вызова.<br/><br/>2. После возврата из подпрограммы помещенные в стек параметры (если они имеются) не удаляются - за это ответственна сама подпрограмма.


 
kernel ©   (2007-03-06 09:52) [8]

спасибо, все понял :)



Страницы: 1 вся ветка

Текущий архив: 2007.08.26;
Скачать: CL | DM;

Наверх




Память: 0.8 MB
Время: 0.034 c
2-1185875949
Denni
2007-07-31 13:59
2007.08.26
String to Hex


2-1185969342
Kolan
2007-08-01 15:55
2007.08.26
Цветные строки в DBGrid.


2-1184735772
Барин
2007-07-18 09:16
2007.08.26
ServerSocket


15-1185638509
Иксик
2007-07-28 20:01
2007.08.26
Миграция web сайта с одного выделенного сервера на другой


15-1185515813
Vlad Oshin
2007-07-27 09:56
2007.08.26
Что-то вот подумалось. Подавить ошибки, кто-то когдато спрашивал