DLL по протоптанной дорожке - страница 4

 
HideYourRichess >>:

Коварство и вероломство DllMain

Теперь, пожалуй, пришло время коснуться вопроса который удивительно мало освещен в литературе по программированию. Эта тема касается не только Delphi или С, но вообще любого языка программирования, способного создавать DLL. Это свойство загрузчика DLL Windows. Из переведенной серьёзной и широкораспостраненной литературе по программирования в среде Windows, только у одного автора удалось найти упоминание об этом и то, в самых туманных выражениях. Этот автор Дж. Рихтер, и ему простительно, так как его замечательная книга вышла в 2001 году, когда в общем то и 32 разрядный Windows не был так распостранен.

Интересно, что сам MS ни когда не скрывал существование проблемы с DllMain и даже разместил у себя специальный документ, что то вроде – «Наилучший способ использования DllMain». В котором объяснил, что можно делать в DllMain, а что нерекомендуется. Причем, было указано, что нерекомендованные вещи ведут к трудноуловимым и непостоянным ошибкам. Желающие ознакомиться с этим документом могут заглянуть на их сайт. Более популярное изложение нескольких переводов алармистких сообщений по этому поводу изложено в ссылках ниже.

Суть проблемы очень проста. Дело в том, что DllMain, особенно при загрузке DLL, это особое место. Место где нельзя делать ничего сложного и выдающегося. Например, не рекомендуется CreateProcess, или LoadLibrary другие DLL. Так же не рекомендуется CreateThread или проводить CoInitialize COM. И т.д. Динамически распределять память то же не рекомендуется.

Можно делать самые простые вещи. Иначе ничего не гарантируется. Поэтому, не помещайте ничего лишнего в DllMain, иначе будете с удивлением наблюдать крах приложений использующих вашу DLL. Лучше перестраховаться и создать специальные экспортированные функции инициализации и финализации, которые в нужные моменты будет вызывать главное приложение. Это, по крайней мере, поможет избежать проблем с DllMain.



Очень исчерпывающий ответ. Лучшего и желать было невозможно.

 
Сообщите, если поможет.
 
HideYourRichess >>:
Сообщите, если поможет.


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

Возможно, одной из причин поведения терминала является то что у меня  Vista x64.

До выхода SP2 Терминал MT4 вел себя очень непредсказуемо и неустойчиво.

Думаю как всегда Microsoft облажалась. Вот и все. И, возможно самым эффективным решением будет самое тупое,

подчеркиваю, именно тупое, на этапе запуска терминала, каждому делать свою копию dll.

При таком раскладе все срабатывает. Хотя подчеткиваю это далеко не верное решение.

 
Наплачитесь вы потом с этим решением. Лучше сделать так как рекомендует MS. Но это вам решать.
 
HideYourRichess >>:
Наплачитесь вы потом с этим решением. Лучше сделать так как рекомендует MS. Но это вам решать.


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

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

 
HideYourRichess >>:
Наплачитесь вы потом с этим решением. Лучше сделать так как рекомендует MS. Но это вам решать.


Уже понял что этот вариант неприемлем.
 
>> Debugger

Похоже вы столкнулись с проблемой согласования Борланда и Майкрософта … с определенного времени они не особо дружат в том числе и в плане длл-ек … такие проблемы встречаются довольно часто … 

Проблему можно решить более тонкой настройкой компиляции и линковки в Борланде … но это довольно тонкая работа и есть много вариантов … лучше просто напишите эту длл на Вижуал С … и скорее всего всё сразу решится …
 
RIV >>:
>> Debugger

Похоже вы столкнулись с проблемой согласования Борланда и Майкрософта … с определенного времени они не особо дружат в том числе и в плане длл-ек … такие проблемы встречаются довольно часто …



Нельзя ли каких нибудь подробностей, про это? Что за проблемы на уровне длл, в каких местах возникают?

 

RIV писал(а) >>
>> Debugger

Похоже вы столкнулись с проблемой согласования Борланда и Майкрософта … с определенного времени они не особо дружат в том числе и в плане длл-ек … такие проблемы встречаются довольно часто …

Проблему можно решить более тонкой настройкой компиляции и линковки в Борланде … но это довольно тонкая работа и есть много вариантов … лучше просто напишите эту длл на Вижуал С … и скорее всего всё сразу решится …

Вот куда ты лезешь со своими тупыми советами ?

Ты хоть раз что-нибуль компилировал ? тонкая настройка линковки ... а может толстая ?

Причина обращения: