Extension dll параметр что это
AfxGetStaticModuleState
Вызывайте эту функцию, чтобы задать состояние модуля перед инициализацией и восстановить предыдущее состояние модуля после очистки.
Параметры
state
Ссылка на AFX_EXTENSION_MODULE структуру структуры , которая будет содержать состояние модуля DLL расширения MFC после инициализации. Состояние включает копию объектов класса среды выполнения, которые были инициализированы библиотекой DLL расширения MFC как часть обычной конструкции статического объекта, выполняемой перед DllMain входом.
hModule
Маркер модуля DLL расширения MFC.
Особенности работы с DLL файлами и возможные проблемы
Некоторые DLL не удастся не только изменить, но даже открыть. Это происходит с защищенными библиотеками и проблема не решается без специальных программ для взлома.
В редких случаях библиотеки DLL придется зарегистрировать в ОС:
- В Windows 7 (и более поздних версиях) войти в каталог, содержащий требуемый файл.
- Нажать «Shift» + правую клавишу мышки.
- В появившемся меню выбрать строчку: «Открыть окно команд».
- Набрать: regsvr32 dllxxxx.dll, где «dllxxxx.dll» – название регистрируемой библиотеки.
- Нажать «Enter».
Требования
Заголовок:
Примечания
MFC OLE DLL — это библиотека DLL расширения MFC. чтобы CDynLinkLibrary Библиотека DLL расширения MFC была подключена к цепочке, она должна создать CDynLinkLibrary объект в контексте каждого модуля, который будет его использовать. AfxOleInitModule CDynLinkLibrary создает объект в контексте обычной библиотеки DLL MFC, чтобы он был подключен в CDynLinkLibrary цепочке объектов обычной библиотеки DLL MFC.
Если вы создаете элемент управления OLE и используете COleControlModule , то не следует вызывать AfxOleInitModule , поскольку InitInstance функция-член для COleControlModule вызовов AfxOleInitModule .
AfxGetAmbientActCtx
Эта функция используется для получения текущего состояния флага состояния каждого модуля, что влияет на поведение WinSxS в MFC.
Параметры
state
Ссылка на AFX_EXTENSION_MODULE структуру, которая содержит состояние модуля DLL расширения MFC.
bAll
Если значение — TRUE, очистите все модули DLL расширения MFC. В противном случае очистите только текущий модуль DLL.
Комментарии
AfxInitExtensionModule создает копию ХМОДУЛЕ библиотеки DLL и записывает ее классы среды выполнения ( CRuntimeClass структуры) и фабрики объектов ( COleObjectFactory объекты), которые будут использоваться позже при CDynLinkLibrary создании объекта. Библиотеки DLL расширения MFC должны выполнять два действия в своей DllMain функции:
Вызовите AfxInitExtensionModule и проверьте возвращаемое значение.
CDynLinkLibrary Создайте объект, если библиотека DLL будет экспортировать CRuntimeClass объекты структуры или имеет собственные пользовательские ресурсы.
Можно вызвать AfxTermExtensionModule для очистки библиотеки DLL расширения MFC, когда каждый процесс отключается от библиотеки DLL расширения MFC (которая происходит при завершении процесса или при выгрузке AfxFreeLibrary библиотеки DLL вызовом).
AfxNetInitModule
Для поддержки сокетов MFC из обычной библиотеки DLL MFC, которая динамически связана с MFC, добавьте вызов этой функции в функции обычной библиотеки DLL CWinApp::InitInstance MFC для инициализации DLL-библиотеки MFC.
Как открыть DLL, используя Visual Studio
Программная среда Visual Studio дает возможность создавать, подключать DLL к текущему проекту и редактировать его. Для этого используется синтаксис языка программирования.
Как работает dll файл?
Любая устанавливаемая в Windows программа всегда использует либо свои немногочисленные или имеющиеся в системе dll-ки. Программа обычно загружает свою dll-ку во время автозагрузки через специальную библиотеку Win32 API LoadLibrary или по сигналу с другого dll-файла. Обычно это выглядит так:
- exe-шник запускается, Windows его загружает, проверяя таблицу параметров и величин, в которой написано, что, мол, «мне нужны вот такие функции вот этого dll файла и вон того dll файла». На «околотехническом» языке это называется импортированием функций dll файла в исполнительный exe файл программы.
- код загрузчика ищет обозначенные файлы dll, и обнаружив их, загружает в память
- начинает работать сам файл.dll. В нём есть уже свой список экспортируемых функций, который как телефонный коммутатор объединяет между собой адреса функций внутри самого файла (их в одном файле может быть немало); если это необходимо, функция файла 1 .dll может обратиться и к некоторым функциям файла 2 .dll. Exe-шник запущенной вами программы теперь работает с файлами, просто обращаясь к этим адресам напрямую.
Синтаксис
Файлы с расширением DLL – что это и для чего нужны
Файлы DLL – это динамически подключаемые библиотеки. Установленная в операционную систему программа может не иметь в своем составе всех нужных для работы данных, а использовать те, которые уже присутствуют в ОС. За счет этого также достигается экономия памяти – работающие программы используют одни и те же DLL.
Если же программа (или библиотека) будет повреждена, то это не скажется на работоспособности остального ПО.
Синтаксис
В Windows 10
Пользователи, работающие в десятой версии Windows, не всегда знают, чем открыть DLL. Для подключения библиотеки к проекту понадобится либо Visual Studio, либо VisualFoxPro. Эти программные комплексы доступны для скачивания на официальном портале компании Microsoft. Для редактирования допускается использовать ResourceHacker – утилиту для ознакомления и редактирования различных типов файлов.
Чтобы открыть динамически подключаемую библиотеку, следует нажать в главном меню:
Из чего состоит рабочая область программы ResHacker:
- верхняя главная панель – для запуска функциональных команд: открыть, скомпилировать, сохранить;
- левое окно – содержит список объектов, которые входят в состав библиотеки;
- центральная часть – текст программного кода.
Синтаксис
AFX_MANAGE_STATE
Вызовите этот макрос, чтобы защитить экспортированную функцию в библиотеке DLL.
Синтаксис
Требования
Заголовок:
Sharing Resources and Classes
Exporting resources is done through a resource list. Each application contains a singly linked list of CDynLinkLibrary objects. When looking for a resource, most of the standard MFC implementations that load resources look first at the current resource module ( AfxGetResourceHandle ) and if the resource is not found walk the list of CDynLinkLibrary objects attempting to load the requested resource.
Walking the list has the disadvantages that it is slightly slower and requires managing resource ID ranges. It has the advantage that a client application that links to several MFC extension DLLs can use any DLL-provided resource without having to specify the DLL instance handle. AfxFindResourceHandle is an API used for walking the resource list to look for a given match. It takes the name and type of a resource and returns the resource handle where it was first found (or NULL).
If you do not want to walk the list and only load resources from a specific place, use the functions AfxGetResourceHandle and AfxSetResourceHandle to save the old handle and set the new handle. Be sure to restore the old resource handle before you return to the client application. For an example of using this approach to explicitly load a menu, see Testdll2 .cpp in the MFC sample DLLHUSK.
Dynamic creation of MFC objects given an MFC name is similar. The MFC object deserialization mechanism needs to have all of the CRuntimeClass objects registered so that it can reconstruct by dynamically creating C++ objects of the required type based on what was stored earlier.
In the case of the MFC sample DLLHUSK, the list looks something like:
where xx is the version number; for example, 42 represents version 4.2.
The MFCxx.dll is usually last on the resource and class list. MFCxx.dll includes all of the standard MFC resources, including prompt strings for all of the standard command IDs. Placing it at the end of the list allows DLLs and the client application itself not to have their own copy of the standard MFC resources, but to rely on the shared resources in the MFCxx.dll instead.
Merging the resources and class names of all DLLs into the client application's name space has the disadvantage of requiring you to be careful with what IDs or names you pick.
The DLLHUSK sample manages the shared resource name space by using multiple header files.
If your MFC extension DLL needs to maintain extra data for each application, you can derive a new class from CDynLinkLibrary and create it in DllMain . When running, the DLL can check the current application's list of CDynLinkLibrary objects to find the one for that particular MFC extension DLL.
Я только начинаю разбираться в "кухне" dll. Насколько я понял, читая разные статьи, файлы dll содержат в себе функции, которые можно вызывать в своих программах, тем самым расширяя свои возможности в программировании. Но как узнать, какие функции содержит в себе каждый данный файл динамической библиотеки?
Я только начинаю разбираться в "кухне" dll. Насколько я понял, читая разные статьи, файлы dll содержат в себе функции, которые можно вызывать в своих программах, тем самым расширяя свои возможности в программировании. Но как узнать, какие функции содержит в себе каждый данный файл динамической библиотеки?
Вопрос состоит в другом: а что Вы будете делать с этим списком? Безусловно, Вы не сможете воспользоваться ни одной недокументированной функцией из длл-ки.
В VS - утилита DUMPBIN.EXE
В Delphi - утилита TDump.exe
P.S. Не ленитесь гуглить, прежде чем задавать на форуме такие вопросы. :cool:
Вопрос состоит в другом: а что Вы будете делать с этим списком? Безусловно, Вы не сможете воспользоваться ни одной недокументированной функцией из длл-ки.
В VS - утилита DUMPBIN.EXE
В Delphi - утилита TDump.exe
P.S. Не ленитесь гуглить, прежде чем задавать на форуме такие вопросы. :cool:
Просто список - это на крайний случай. В идеале я ищу список + описание к каждой функции что она делает.
Перед тем, как писать на форум, я копался в интернете - находил статьи о том, что такое длл, для чего нужны, как создать свой длл, как экспортировать оттуда функции и тд, но самого списка функций с описанием не нашел даже к самым известным dll файлам типа user32, kernel и тд.
P.S. В конце концов ведь каждый программист когда-то узнавал, какие функции содержатся в длл файлах и что эти функции делают. Кто, как и откуда брал эту инфу?)
P.S. В конце концов ведь каждый программист когда-то узнавал, какие функции содержатся в длл файлах и что эти функции делают. Кто, как и откуда брал эту инфу?)
Ну, этот вопрос простителен для новичка. В DLL копаться не нужно, тем более в системных. MSDN вам в руки.
А если просто просмотреть список ф-ций в DLL (да и для много другого) можно заюзать HIEW.
Evg64, а какая у Вас вообще цель? Создать свою DLL, просто спортивный интерес или что-то иное? Если Вы хотите использовать функции Win API, то Вам не нужно вообще заботиться о загрузке функции из DLL: за Вас всё уже сделано в виде библиотек. В этом случае, как сказал Lerkin, смотрите MSDN относительно Вашей задачи.
Если же всё-таки нужен список, есть утилита, правда шараварная: PE Explorer. Можно слить триалку на 30 дней, но, думаю, этого хватит, чтобы удовлетворить любопытство :)
Цель - ознакомиться с возможностями функций из одного-двух файлов длл. Получить начальное представление о то, что функции из длл "умеют". А главное, понять, как получать информацию о возможностях функций конкретного файла длл.
А вообще узнать больше о длл меня сподвигла банальная мысль о том, что знание возможностей длл файлов расширит возможности программирования)
Насчет MSDN я не совсем понял: ведь не может же там содержаться информации по всему многообразию функций из всего многообразия длл файлов? Я там смотрел, да можно было и не смотреть) Может я что-то понял не так?
Насчет MSDN я не совсем понял: ведь не может же там содержаться информации по всему многообразию функций из всего многообразия длл файлов? Я там смотрел, да можно было и не смотреть) Может я что-то понял не так?
Прикинь, может, особенно если учесть что объем МСДН 1.5 гига, и все ф-ции, содержащиеся в длл-ках виндов там описаны.
А вообще работают от обратного: ищут функцию для решения определенных задач, а потом смотрят что надо подключить для вызова этой ф-ции.
И не смотри, не трать время. dll-ку в Блокноте открываешь, и читаешь. Нормальным, русским языком написано.
P.S. Есть начинающие, которым желательно тут же стать заканчивающими.
Попробую развернуто закрыть эту тему.
Итак. По задумке аффтора, стать дико навороченным программистом, можно с помощью получения списка всех функций изо всех dll, которые юзает ОС Windows. Для этого, автору страшно нужен способ получения этих функций из конкретно указанной dll. Хорошо, попробуем промоделировать ситуацию, в которой автор добыл подходящий инструментарий (а хотя бы и Dependency Walker) и приступил к реализации задуманного.
Запустив этот, без сомнения достойный viewer, он стал думать, с чего же ему начать. Очевидно, что не найдя точки отсчета, он открыл каталог system32. Про то, что основной dll фонд находится там, он уже знает, или узнал только что. Испортив свой решительный настрой тем, что кроме dll-файлов, в указанном каталоге полно каких-то папок с загадочными названиями, немеряно файлов с какими-то левыми расширениями, типа ocx, txt, log, nls и т.п., аффтор идет по пути наименьшего сопротивления. Посомневавшись немного, он сортирует список по алфавиту и открывает первый попавшийся dll файл. Это будет, к примеру, acledit.dll. По чудовищно счастливой случайности, этот файл относится непосредственно к пакету операционной системы, а не является компонентом нестандартного драйвера какого-то из многочисленных устройств в составе аппаратной конфигурации, ни библиотекой от установленных во множестве дополнительных прикладных программ, игрушек и прочего программного обеспечения, без сомнения установленного на компьютере пытливого исследователя.
Получив список функций, автор воодушевился и записал название первой функции. Это будет, допустим, функция EditAuditInfo. Сколько из этого полезной информации получил автор, сказать не представляется возможным. Сказать можно только то, что теперь он знает, что в динамической библиотеке acledit есть функция EditAuditInfo. Что она делает, и как её можно использовать, автор пока еще не знает, но это в данный момент для него не важно. Сколько новой информации. Чума! А вот еще в той же таблице есть какие-то дополнительные поля - ordinal, hint, entry point. Да фигня какая-нибудь, потом разберемся.
Когда рука бойца устала от переписывания названий функций, автор посмотрел на дерево зависимостей и опять погрустнел, поскольку не понял, зачем ему еще какие-то dll показывают. Пощелкав мышом по этому списку и совершенно скиснув, поскольку количество негатива от возрастающего количества вопросов начало превышать позитив от начала сбычи мечт о получении всех-всех функций, автор вышел из программы, дав себе твердую установку вернуться к каталогизации функций немного позже.
Но вспоминая, что когда он щелкнул по названию функции, программа попыталась загрузить какую-то фигню под названием MSDN - " Блин, опять эта MSDN, о которой говорили эти унылые придурки с форума. Я же был там, там ничего не сказано о том, как сделать то, что я задумал. ", - аффтор полностью теряет интерес к воплощению великой идеи.
Вот так, человечество теряет еще одного талантливого набиральщика названий функций, и ущерб причиненный науке - не поддаётся осмыслению.
Как же избежать таких потерь? А достаточно изложить на хорошем форуме свой вариант постижения таинств программирования, и стоически выдержав первую волну сарказма со стороны участников, начать задавать наводящие вопросы, когда посоветуют, например, обратиться к MSDN. Попросить посоветовать доступную для понимания литературу по программированию в WinAPI, и много чего еще.
А самое главное, нужно четко понимать, ЧТО человек собрался программировать и ДЛЯ ЧЕГО.
это все надо вставить в капчу при регистрации на форуме. Наберет человек такой текст, глядишь и научиться чему нибудь, точнее разучиться рассматривать длл-ки в блокноте.
К стате мне так же интересно как узнать экспортные функции длл, так как я купил веб камеру с ИК подсветкой и хочу включать подсветку из своей программы, а не из программы производителя. Так что подскажите пожалуста как это сделать.
Спасбо
К стате мне так же интересно как узнать экспортные функции длл, так как я купил веб камеру с ИК подсветкой и хочу включать подсветку из своей программы, а не из программы производителя. Так что подскажите пожалуста как это сделать.
Спасбо
Дебажить утилиту\драйвер производителя, как же ещё. Нажимать на кнопочку вкл\выкл подсветки и дебажить. Одними именами функций не обойдёшься.
Кто-нибудь может дать ссылку на MSDN, где подробно описана хоть одна функция?
В таком стиле:
int StringGetChar ( string text, int pos )
Возвращает значение символа, расположенного в указанной позиции строки.
Параметры :
text - Строка.
pos - Позиция символа в строке. Может быть от 0 до StringLen ( text ) - 1 .
Пример :
int char_code = StringGetChar ( "abcdefgh" , 3 ) ;
// символьный код 'c' = 99
Вот, например, увидел я в коде такой импорт
Современные программы состоят из нескольких модулей, которые включают в себя массивы данных, классы.
Современные программы состоят из нескольких модулей, которые включают в себя массивы данных, классы, сервисы, требуемые библиотеки. Такой подход разрешает при переписывании ПО не редактировать полностью код, а изменять только необходимые функции, которые заключены в составных частях. Так как открыть DLL файл стандартными средствами Windows невозможно, приходится использовать другие методы.
AfxSetAmbientActCtx
Эта функция используется для установки флага состояния каждого модуля, который влияет на поведение WinSxS в MFC.
Синтаксис
Возвращаемое значение
Текущее значение флага состояния модуля.
Требования
Заголовок:
Что такое dll файл?
DLL файл — файл динамически подключаемой библиотеки (библиотеки динамической ссылки)- некий набор кодов и данных для выполнения в Windows конкретного действия в рамках файлу отведённых. К dll-кам часто обращаются приложения (как сторонние так и внутренние — от имени Windows) в конкретный момент и часто на определённый срок. Тяжеловесные приложения (опять же игры) часто сами вместе с установкой пополняют хранилище dll файлов, так как система ими по умолчанию не обладает. Таким образом по типу действия dll файлы чем-то напоминают исполнительные файлы .exe, (и те и другие используют один формат файлов Portable Executable — PE) кроме некоторых моментов:
- сам по себе dll запустить напрямую нельзя
- в то же время к одному набору dll файлов могут обращаться многие приложения, причём одновременно
- а слово « ссылки » в названии файла означает, что, помимо всего прочего, они могут вызывать и друг друга по ситуации: запуск одного такого файла может вызвать запуск десятков других dll-лек. В отличие от статических библиотек .lib, которые уже находятся в модуле и работают только во время этапа компиляции программы (часто файлы .lib обнаруживаются в файлах .exe и .dll) — в виде отдельного файла в Windows такие файлы трудно найти.
Какие dll файлы задействуются программами прямо сейчас, можно узнать, запустив, к примеру, утилиты Autoruns for Windows , пробежавшись по вкладкам программы:
Комментарии
Если флаг установлен (по умолчанию) и поток входит в модуль MFC (см AFX_MANAGE_STATE .), то контекст модуля активируется.
Если флаг не задан, контекст модуля не активируется в записи.
Контекст модуля определяется из его манифеста, который часто внедряется в ресурсы модуля.
Пример
Требования
Заголовок:
Примечания
Библиотека DLL MFC Sockets является библиотекой DLL расширения MFC. чтобы CDynLinkLibrary Библиотека DLL расширения MFC была подключена к цепочке, она должна создать CDynLinkLibrary объект в контексте каждого модуля, который будет его использовать. AfxNetInitModule CDynLinkLibrary создает объект в контексте обычной библиотеки DLL MFC, чтобы он был подключен в CDynLinkLibrary цепочке объектов обычной библиотеки DLL MFC.
Куда они исчезают, или почему в системе отсутствует dll файл ?
попытка снять с регистрации файл для последующей правильной его установки в реестре провалилась
Этот вопрос абсолютно аналогичен вопросу, рассматриваемому в статье «DirectX — для каждой игры свой?» Так что давайте поэтапно, если в системе возникли вопросы по поводу пропажи или повреждения dll. Так вот, основные «неполадки» вокруг проблем с dll-ками крутятся вокруг таких вариантов развития событий:
- файл отсутствует — да, скорее всего, он никуда не пропал: речь идёт о его/их повреждении. Его местонахождение — системная папка, папка с набором специальных библиотек или программа с установленными файлами. А, следовательно, речь может быть идти о программном (или, не дай Бог, физическом) сбое на вашем жёстком диске: просто попробуйте его найти с помощью привычных средств поиска и убедиться в его наличии
- файл действительно отсутствует — антивирусная программа прекрасно распознаёт зловредное действие таких файлов (особенно при запуске в песочнице) и может принять решение на удаление файла. Ну, и оно вам надо — такая программа и последствия от её использования?
- файл отсутствует сразу после первого запуска программы — такая беда часто подстерегает тех, кто при установке программы пренебрегает рекомендациями к установке, пытаясь при этом действовать без оглядки на системные требования. Попробуйте переустановить программу, внимательно устанавливая или обновляя предложенные пакеты библиотек; в противном случае попробуйте найти необходимый файл по названию в сети. НО. Предупреждаю сразу — это очень чревато, так что читайте статью до конца.
Возвращаемое значение
TRUE значение, если библиотека DLL расширения MFC успешно инициализирована. FALSE в противном случае —.
Требования
Заголовок:
AfxInitExtensionModule
Вызовите эту функцию в библиотеке DLL DllMain расширения MFC для инициализации библиотеки DLL.
Комментарии
Если приложение загружает и освобождает библиотеки DLL расширения MFC динамически, обязательно вызовите AfxTermExtensionModule . Так как большинство библиотек DLL расширения MFC не загружаются динамически (обычно они связаны с AfxTermExtensionModule помощью библиотек импорта), вызов, как правило, не требуется.
Библиотеки DLL расширения MFC должны вызываться AfxInitExtensionModule в DllMain . Если библиотека DLL экспортирует CRuntimeClass объекты или имеет собственные пользовательские ресурсы, необходимо также создать CDynLinkLibrary объект в DllMain .
An MFC extension DLL is a DLL that typically implements reusable classes derived from the existing Microsoft Foundation Class Library classes.
An MFC extension DLL has the following features and requirements:
The client executable must be an MFC application compiled with _AFXDLL defined.
An MFC extension DLL can also be used by a regular MFC DLL that is dynamically linked to MFC.
MFC extension DLLs should be compiled with _AFXEXT defined. This forces _AFXDLL to be also defined and ensures that the proper declarations is pulled in from the MFC header files. It also ensures that AFX_EXT_CLASS is defined as __declspec(dllexport) while building the DLL, which is necessary if you are using this macro to declare the classes in your MFC extension DLL.
MFC extension DLLs should not instantiate a class derived from CWinApp , but should rely on the client application (or DLL) to provide this object.
MFC extension DLLs should, however, provide a DllMain function and do any necessary initialization there.
Extension DLLs are built using the dynamic-link library version of MFC (also known as the shared version of MFC). Only MFC executables (either applications or regular MFC DLLs) that are built with the shared version of MFC can use an MFC extension DLL. Both the client application and the MFC extension DLL must use the same version of MFCx0.dll. With an MFC extension DLL, you can derive new custom classes from MFC and then offer this extended version of MFC to applications that call your DLL.
Extension DLLs can also be used for passing MFC-derived objects between the application and the DLL. The member functions associated with the passed object exist in the module where the object was created. Because these functions are properly exported when using the shared DLL version of MFC, you can freely pass MFC or MFC-derived object pointers between an application and the MFC extension DLLs it loads.
An MFC extension DLL uses a shared version of MFC in the same way an application uses the shared DLL version of MFC, with a few additional considerations:
It does not have a CWinApp -derived object. It must work with the CWinApp -derived object of the client application. This means that the client application owns the main message pump, the idle loop, and so on.
It calls AfxInitExtensionModule in its DllMain function. The return value of this function should be checked. If a zero value is returned from AfxInitExtensionModule , return 0 from your DllMain function.
It creates a CDynLinkLibrary object during initialization if the MFC extension DLL wants to export CRuntimeClass objects or resources to the application.
Before version 4.0 of MFC, this type of DLL was called an AFXDLL. AFXDLL refers to the _AFXDLL preprocessor symbol that is defined when building the DLL.
The import libraries for the shared version of MFC are named according to the convention described in Naming conventions for MFC DLLs. Visual Studio supplies prebuilt versions of the MFC DLLs, plus a number of non-MFC DLLs that you can use and distribute with your applications. These are documented in Redist.txt, which is installed to the Program Files\Microsoft Visual Studio folder.
If you are exporting using a .def file, place the following code at the beginning and end of your header file:
These four lines ensure that your code is compiled correctly for an MFC extension DLL. Leaving out these four lines might cause your DLL to either compile or link incorrectly.
If you need to pass an MFC or MFC-derived object pointer to or from an MFC DLL, the DLL should be an MFC extension DLL. The member functions associated with the passed object exist in the module where the object was created. Because these functions are properly exported when using the shared DLL version of MFC, you can freely pass MFC or MFC-derived object pointers between an application and the MFC extension DLLs it loads.
Due to C++ name mangling and export issues, the export list from an MFC extension DLL might be different between the debug and retail versions of the same DLL and DLLs for different platforms. The retail MFCx0.dll has about 2,000 exported entry points; the debug MFCx0D.dll has about 3,000 exported entry points.
Требования
Заголовок:
AfxTermExtensionModule
Вызывайте эту функцию, чтобы разрешить MFC очищать библиотеку DLL расширения MFC, когда каждый процесс отключается от библиотеки DLL (что происходит при завершении процесса или при выгрузке AfxFreeLibrary библиотеки DLL вызовом).
Синтаксис
Возвращаемое значение
Указатель на AFX_MODULE_STATE структуру.
Синтаксис
К СВЕДЕНИЮ
Когда и как появились
Библиотеки DLL появились одновременно с ОС Windows. Разработчики предполагали, что это облегчит программирование приложений и поможет упорядочить использование общих ресурсов в течение сеанса работы.
Но со временем выяснилось, что в ряде случаев возникает тупиковая ситуация, которая получила название «DLL hell». Такое случалось, когда два или более приложений требуют доступа к разным (и не совместимым друг с другом) библиотекам. В результате Windows начинала работать нестабильно.
Только в последних версиях ОС удалось создать механизм, предотвращающий возникновения сбоев – технологию Side-by-side assembly, который испытали в XP, но окончательно он стал применяться в Windows Vista.
В Windows 7
Проблема – чем открыть DLL для редактирования в операционной системе Windows 7 решается так же как и для 10 версии. Еще применяется утилита Resource Tuner – редактор ресурсов. Она дает возможность менять код в DLL на свое усмотрение и сохранять библиотеки.
Комментарии
Если флаг установлен (по умолчанию) и поток входит в модуль MFC (см AFX_MANAGE_STATE .), то контекст модуля активируется. Если флаг не задан, контекст модуля не активируется в записи. Контекст модуля определяется из его манифеста, который часто внедряется в ресурсы модуля.
При помощи каких программ открываются файлы с расширением .dll
Программный код ОС Windows – проприетарный. Это значит, что разработчики не предусмотрели штатных средств, применяя которые, пользователь сможет менять системный код. Для открытия DLL придется использовать специальные программные пакеты. А подключать имеющиеся DLL к разрабатываемой программе можно с применением ПО Microsoft.
AfxOleInitModule
Для поддержки OLE из обычной библиотеки DLL MFC, которая динамически связана с MFC, вызовите эту функцию в функции обычной библиотеки DLL CWinApp::InitInstance MFC, чтобы инициализировать БИБЛИОТЕКУ MFC OLE DLL.
В качестве итога
Работой с DLL занимаются программисты, но опытным пользователям также полезно будет знать основы работы с динамически подключаемыми библиотеками. Это может пригодиться для изменения или извлечения данных из файлов прикладных программ.
Синтаксис
Memory Management
MFCx0.dll and all MFC extension DLLs loaded into a client application's address space use the same memory allocator, resource loading, and other MFC global states as if they were in the same application. This is significant because the non-MFC DLL libraries and the regular MFC DLLs do the exact opposite and have each DLL allocating out of its own memory pool.
If an MFC extension DLL allocates memory, that memory can freely intermix with any other application-allocated object. Also, if an application that dynamically links to MFC fails, the protection of the operating system maintains the integrity of any other MFC application sharing the DLL.
Similarly other global MFC states, like the current executable file to load resources from, are also shared between the client application and all MFC extension DLLs as well as MFCx0.dll itself.
Требования
Заголовок:
В онлайн-сервисах
Это понадобится, если речь идет о страницах сайта. В DLL содержатся скрипты, которые отвечают за корректную работу сервера.
Открыть библиотеки можно, используя браузеры:
Почему нельзя просто его скачать?
Самый первый и самый опасный вариант. Даже если вы уже определились с версией и разрядностью файла. Я бы первым же делом заразил его , подсунув туда что-то типа трояна, замаскировав его под функцию обращения к какому-нибудь процессу. Рассчитывая на то, что пользователь в спешке запустить любимую программу согласится на всё, пропуская мимо глаз свист антивируса. Поверьте, 5-6 из 10 сайтов в сети так и делают. Их основная задача — принять запрос из поисковой выдачи на скачивание подозрительных (а какими ещё могут быть с точки зрения современных антивирусов и даже современных версий браузеров) файлов, и подсунуть вам. Как работает dll файл вы уже примерно знаете, и какую цепочку действий против вас в вашей Windows он создаст, знает только хакер.
Ещё один вариант — в ответ на ваш запрос вы наткнётесь на чаще всего платную, но очень навязчивую и красочную программу по ремонту системных файлов, функции которой крайне бедны (даже если запущенный после её установки «анализ» показал, что в системе «ну всё очень плохо!»).
Но да ладно: скачали, вирусов нет… На популярном и наиболее часто используемом в этих случаях ресурсе:
решения не обнаружилось: всё равно ошибка и ничего не работает. Почему? Ответ для внимательных очевиден: вы никогда не задумывались, что Windows обновляет прежде всего ? Да-да, скачанный вами файл просто морально устарел , и вам в любом случае придётся искать уже обновлённую его версию. Вобщем, действуйте в этом варианте на свой страх и риск.
Напоследок, но крайне важно. С ручным расположением dll всё немного сложнее. Эта тема достойна отдельной статьи, и она связана с функцией Перенаправителя файловой системы File System Redirector. Краткий совет же такой — переустановите службу или программу, но старайтесь избегать прямого вмешательства в директорию С:\Windows\.
-
(плохие секторы) жёсткого диска — нередко уже привычная ошибка компьютера, который подключён к розетке или ноутбука, у которого барахлит блок питания или батарея. Это даже нормально, иначе в Windows не появилась отдельная ремонтная утилита (в составе целого их набора) chkdsk.exe, призванная такие ошибки исправлять. Умение работать с утилитой — первейшая необходимость пользователя. При этом, если имя повреждённого файла вам известно, не обязательно прогонять полномасштабную проверку всего тома на ошибки. Можно начать с конкретной проверки файла, при которой команда проверки, к примеру, примет вид:
Прокатывает не всегда, ибо это инструмент общего действия. Однако попробовать стоит. Внутри побитого файла она ничего изменить не сможет, но системные файлы могут быть подменены. Однако, если задет файл конкретной программы, утилита отрапортует, что всё хорошо и захлопнется. Оставив вас ни с чем.
Советов здесь немного, и главный из них должен решаться ещё на этапе установки машины. Старайтесь не смешивать типы файловых систем самой машины и носителей для них и не разносите по разным томам папку с программой и носителями для неё.
Библиотеки DLL расширения MFC используют макрос AFX_EXT_CLASS для экспорта классов; исполняемые файлы, которые связываются с DLL расширения MFC, используют макрос для импорта классов.
Комментарии
При вызове pModuleState этого макроса — это действующее состояние модуля для оставшейся части непосредственно содержащей его области. При выходе из этой области предыдущее действующее состояние модуля будет автоматически восстановлено.
AFX_MODULE_STATE Структура содержит глобальные данные для модуля, то есть часть состояния модуля, которая помещается или извлекается.
По умолчанию MFC использует для загрузки шаблона ресурса обработчик ресурсов основного приложения. Если в библиотеке DLL есть экспортированная функция, например, которая запускает диалоговое окно в библиотеке DLL, шаблон ресурса сохраняется в модуле DLL. Не забудьте переключить состояние модуля, чтобы использовать правильный маркер. Вы можете переключить состояние, добавив следующий код в начало функции:
Этот макрос меняет местами текущее состояние модуля на состояние, возвращенное AfxGetStaticModuleState до конца текущей области.
Когда MFC создает контекст активации для сборки, он использует AfxWinInit для создания контекста и AFX_MANAGE_STATE его активации и деактивации. Обратите внимание, что AFX_MANAGE_STATE включено для статических библиотек MFC, а также библиотек DLL MFC, чтобы код MFC можно было выполнять в правильном контексте активации, выбранном в библиотеке DLL пользователя. Дополнительные сведения см. в разделе Поддержка контекстов активации в состоянии модуля MFC.
Параметры
bSet
Новое значение флага состояния модуля.
Комментарии
AFX_EXT_CLASS С помощью макроса те же файлы заголовков, которые используются для сборки библиотеки DLL расширения MFC, можно использовать с исполняемыми файлами, которые связаны с библиотекой DLL.
В файле заголовка для библиотеки DLL добавьте AFX_EXT_CLASS ключевое слово в объявление класса следующим образом:
Параметры
pModuleState
Указатель на AFX_MODULE_STATE структуру.
Требования
Заголовок:
Комментарии
AFX_MODULE_STATE Структура содержит глобальные данные для модуля, то есть часть состояния модуля, которая помещается или извлекается.
По умолчанию MFC использует для загрузки шаблона ресурса обработчик ресурсов основного приложения. Если в библиотеке DLL есть экспортированная функция, например, которая запускает диалоговое окно в библиотеке DLL, шаблон ресурса сохраняется в модуле DLL. Не забудьте переключить состояние модуля, чтобы использовать правильный маркер. Вы можете переключить состояние, добавив следующий код в начало функции:
Этот макрос меняет местами текущее состояние модуля на состояние, возвращенное AfxGetStaticModuleState до конца текущей области.
Читайте также: