как выгрузить dll - страница 6

 
VBAG писал(а) >>

Правильно ли выбран прототип основной функции?

Каким образом управлять потоками ATTACH/DETACH?

Где почитать об этом и желательно бы с примерами?

Джеффри Рихтер "Windows для профессионалов"

 
VBAG >>:

Желаю всем здравствовать!

Тема заинтересовала и решил проверить обсуждаемую тему на простом примере, который идет вместе с терминалом(проект DLLSample).

После компиляции в VS 6.0, испеченная dll работает с терминалом успешно, но сама не выгружается!


А как вы узнали, что она не выгружается? У меня DLLSample замечательно отрабатывает.

 
HideYourRichess писал(а) >>

А как вы узнали, что она не выгружается? У меня DLLSample замечательно отрабатывает.

По косвенному признаку - тело файла длл-ки не перезаписывается пока не закроешь терминал.

.

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

.

Вот и хотелось бы понять как правильно настроить проект, да "тщательно" прописать attach/detach как выразился

 

Спасибо, буду смотреть.

 
VBAG >>:

Желаю всем здравствовать!

Тема заинтересовала и решил проверить обсуждаемую тему на простом примере, который идет вместе с терминалом(проект DLLSample).

После компиляции в VS 6.0, испеченная dll работает с терминалом успешно, но сама не выгружается!

Вот основная функция:

А теперь вопрос к знатокам, которые действительно разбираются в том как устроена и работает dll под виндой и знают как её правильно скомпелить в проекте под VS 6.0(к примеру).

Правильно ли выбран прототип основной функции?

Каким образом управлять потоками ATTACH/DETACH?

Где почитать об этом и желательно бы с примерами?

Какой атач? Какой детач? Вы чё? Функция DllMain в обычной dll-ке вообще не нужна! Её линкер вставляет вместо Вас в dll-ку.

http://msdn.microsoft.com/en-us/library/2kzt1wy3(VS.80).aspx

/MD, /MT, /LD (Use Run-Time Library)


/LD

Creates a DLL.

Passes the /DLL option to the linker. The linker looks for, but does not require, a DllMain function. If you do not write a DllMain function, the linker inserts a DllMain function that returns TRUE.

Links the DLL startup code.


http://msdn.microsoft.com/en-us/library/ms682583(VS.85).aspx

DllMain Callback Function

An optional entry point into a dynamic-link library (DLL)
 
VBAG >>:

По косвенному признаку - тело файла длл-ки не перезаписывается пока не закроешь терминал.

.

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


То есть, на самом деле у вас не DLLSample, как вы утверждали ранее? так.

VBAG >>:

Вот и хотелось бы понять как правильно настроить проект, да "тщательно" прописать attach/detach как выразился

 
HideYourRichess писал(а) >>

То есть, на самом деле у вас не DLLSample, как вы утверждали ранее? так.

Ну, в общем да, если используете явно DllMain. А вообще, все настройки проекта нужно взять из сампла. Мегаквоты рекомендуют DllMain явно прописывать, хотя если писать на Дельфи - то там DllMain можно не прописывать, а все attach/detach занести в инициализацию и финализацию.

За исключением того что я добавил два статических массива на глобальном уровне, весь проект взят из DLLSample.

Вызываю примитивную функцию в советнике запущенном в тестере. При завершении тестирования DLL удерживается в памяти. Вот такая ситуация.

 
VBAG >>:

За исключением того что я добавил два статических массива на глобальном уровне, весь проект взят из DLLSample.

Вызываю примитивную функцию в советнике запущенном в тестере. При завершении тестирования DLL удерживается в памяти. Вот такая ситуация.

Аха, значит проблема в тестере возникает. И это не скрипт, и не индикатор, - это советник. Ну а как этот советник в нормальных условиях, не в тестере, себя ведёт?


Кстати, "два статических массива на глобальном уровне" по идее не должны ни как влиять на dll. Особенно если вы к ним из dll вообще не обращаетесь.


Прикольна. В моём сообщении часть текста пропала, на которое вы отвечали, хотя я её не удалял. Глючит форум.

 
HideYourRichess >>:

Аха, значит проблема в тестере возникает. И это не скрипт, и не индикатор, - это советник. Ну а как этот советник в нормальных условиях, не в тестере, себя ведёт?

Собственно, все эти проблемы с dll год назад у меня также были, когда был советник-

проверял прогон моего тестера против системного.

Зато... кое-то успел всех по нескольку раз опустить по поводу кривых рук и ошибок в программе.

Не дай бог кому-то будет такой начальничек :-(.

P.S.: полинковал dll с runtime-библиотеками VC 2005: после индикатора и скрипта

все выгружается нормально.

 
jartmailru >>:

Собственно, все эти проблемы с dll год назад у меня также были, когда был советник-

проверял прогон моего тестера против системного.

Зато... кое-то успел всех по нескольку раз опустить по поводу кривых рук и ошибок в программе.

Не дай бог кому-то будет такой начальничек :-(.

P.S.: полинковал dll с runtime-библиотеками VC 2005: после индикатора и скрипта

все выгружается нормально.

Ещё раз повторяю - у меня нет проблем с dll ни где. Если у вас проблемы - то это именно проблемы вашего программирования, ни MS ни MT тут скорее всего не виновато. А то что нужно использовать "старый" VC - так это и так должно быть понятно.