Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Вниз

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

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

Здравствуйте уважаемые жители.
Вот проблема возникла. Пишу *.dll. Встала задача выполнять некоторые действия "во время" загрузки ее в АП процесса и "во время" выгрузки. Используется только в одном процессе.
Если быть точным, то пишу библиотеку для подключения в MSSQL 2005. Расширенные процедуры делаю. Вот и нужно создать "кое-чаво" во время загрузки. И это "кое-чаво" уничтожить во время выгрузки.
Пробовал:

DLLProc:= @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);

и соответственно:

procedure DLLEntryPoint(dwReason: DWORD); stdcall;
begin
 case dwReason of
   DLL_PROCESS_ATTACH: begin
                       end;
   DLL_PROCESS_DETACH: begin
                       end;
 end;
end;

Вот при таком подходе, MS SQL 2005 почему то "падает". Он просто тихо молча завершает процесс свой и все. Убрал первые две строки (DLLEntryPoint) и все работает нормально. Но мне все же надо знать когда "мы загружаемся" и когда "мы выгружаемся".

ЗЫ. Тестировалось на:
WinXP (SP2), SQL Express 2005 (SP2)
Win2k3 (SP1), SQL Enterprise 2005 (SP1)
Win2k3 (Sp1), SQL Enterprise 2000 (SP4)
В первых двух случаях SQL просто "умирает". Но самое интересное (на мой взгляд) это то, что "умирает" он не сразу, а через какоето время. Т.е. библиотека работает. Делает свое дело исправно. И в какойто момент - БАЦ. И нету.
В последнем (SQL 2000) случае все работает как часы. И ничего не умирает.

ЗЫЫ. Не исключаю, что для расширенных процедур нужно чтото делать еще. Но вот что - не знаю. Пробовал даже делать абсолютно пустую *.dll - результат тотже. Т.е. я "подсовывал" 2005ому пустую (экспортировались функции, внутри которых ничего не делалось и при загрузке также не производилось никаких действий) библиотеку и когда он обращался к одной из функций, через какоето время происходило падение. Стоило убрать DLLEntryPoint и иже с ним, и все стало работать нормально.
Кто сталкивался с подобным? Пишу на Turbo Delphi Exporer 2006 со всеми апдейтами и хотфиксами.


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

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


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

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


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

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


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

> [3] kernel ©   (05.03.07 19:52)

stdcall это соглашение о передачи параметров функций. Гугл подскажет поподробнее.


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

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


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

> [5] Belorus ©   (06.03.07 00:00)

обратный, т.к. через стек.


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


> kernel ©   (05.03.07 19:52) [3]


Соглашение stdcall предписывает компилятору генерировать код вызова/завершения подпрограммы по следующим стандартным правилам:

1. Перед вызовом подпрограммы параметры (если они имеются) помещаются в стек справа налево в порядке их следования в строке текста вызова.

2. После возврата из подпрограммы помещенные в стек параметры (если они имеются) не удаляются - за это ответственна сама подпрограмма.


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

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



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

Форум: "WinAPI";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.047 c
2-1185881681
snake-as
2007-07-31 15:34
2007.08.26
Подсказка для пользователя


15-1185897636
TStas
2007-07-31 20:00
2007.08.26
Находимость сайта в поискухе


2-1185899291
Kaer
2007-07-31 20:28
2007.08.26
Работа с бд Ms Access


15-1185722847
koha
2007-07-29 19:27
2007.08.26
Не могу настроить доступ к папкам посети


2-1185733123
__Types
2007-07-29 22:18
2007.08.26
Удалить часть.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский