Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Открыта карта ВТБ для материальной поддержки сайта: 4893470220568296.

Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
" title="Написать письмо">Написать письмо

Статистика

Пользователи : 1
Статьи : 1238
Просмотры материалов : 4487712
 
ComDLG32.OCX как корректная замена ComDLG32.DLL (17.08.2013). Печать E-mail
2013 - Август
17.08.2013 09:53
Save & Share

Идея замены компонента ActiveX ComDLG32.ocx (входящего в состав Visual Basic v.6.0) на библиотеку ComDLG32.DLL (входящую в состав любой ОС Windows) появилась как желание избавиться от лишнего вторично распространяемого кода в собственных программах. Так было сделано ранее с компонентом ActiveX ComCTL32.ocx: просто добавлена строка "Private Declare Function InitCommonControls Lib "Comctl32.dll" () As Long". А вот с ComDLG32.ocx получился жестокий облом.

Что же требовалось такого ужасного от библиотеки ComDLG32.DLL, что я отказался от нее в итоге? А ничего необычного: замена событиям CommonDialog.ShowOpen и CommonDialog.ShowPrinter, хранение информации об открытом файле при помощи события ShowOpen.

За событие CommonDialog.ShowOpen в библиотеке ComDLG32.DLL отвечает функция GetOpenFileName с указателем на структуру OPENFILENAME, параметры которой достаточно прописать вручную. Но на практике сложилось так, что сама функция GetOpenFileName ведет себя хаотично. У меня она не заработала. В интернете пишут следующие глюки:
- функция работает в Windows XP Home, но не работает в Windows XP Pro;
- функция работает в Windows 7, но не работает в Windows XP (мой случай оказался);
- различное рабочее поведение функции в разных средах (к примеру, автозамена открываемого пути по умолчанию (lpstrInitialDir, составляющей структуры OPENFILENAME) в Windows Vista и выше;
- один и тот же код с использованием данной функции работает в среде программирования Delphi, но не работает в среде программирования Visual Basic v.6.0;
- библиотека изначально не подгружена системой, а LoadLibrary не дает результата.

В итоге в интернете порождается множество кривых и глючных "оптимизированных" алгоритмов работы с данной функцией и функций-замен ее. Подумал и решил, что лучше оставить свои ComDLG32.ocx без изменений: уж больно много косяков у его "собрата".

Обновлено ( 22.11.2013 20:05 )
 
 

Последние новости


©2008-2019. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).