val.Value += 50;
Этот недостаток присущ и реализации в выпуске 43. Чтобы устранить его, придётся перегружать множество операторов, а потом, возможно, отлавливать множество тонких ошибок. Вот почему я считаю, что "самодельные" свойства представляют скорее теоретический интерес. Это, однако, не повод провозглашать ненужной саму концепцию свойств, аргументируя это мощью и могуществом языка C++, который в них не нуждается.
Александр Шаргин
ВОПРОС-ОТВЕТ
Как программно создать источник данных?
Автор: Игорь Вартанов
Для этой цели служит функция SQLConfigDataSource(). Она позволяет создать пользовательский или системный источник данных (DSN – DataSource Name). Эта же функция позволяет модифицировать или удалить DSN.
BOOL SQLConfigDataSource(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);
Здесь hwndParent– хэндл окна, которому будут направляться сообщения об ошибках (в случае использования NULL эти сообщения будут подавляться), fRequest– тип выполняемого действия (к примеру, ODBC_ADD_DSN - добавить пользовательский DSN, ODBC_ADD_SYS_DSN - добавить системный DSN), lpszDriver– точное имя драйвера odbc, так, как оно выглядит в диалоге настройки ODBC DSN, например "Microsoft Access Driver (*.mdb)" или "SQL Server". Строка lpszAttributesсодержит основные параметры подключения к источнику данных:
• DSN – название создаваемого источника данных
• UID – имя пользователя
• DATABASE – имя базы данных
• PWD – пароль для подключения
Параметры разделены между собой символом '\0', конец строки отмечается дополнительным символом '\0'.
DSN=CustomDsn\0UID=username\0PWD=password\0DATABASE=CustomDataBase\0\0
Обязательным является имя DSN. Все остальные параметры могут быть запрошены при подключении к источнику данных. Хотя различные драйверы ODBC в этом отношении могут вести себя по-разному – например, для драйвера MS SQLServer обязательным параметром также является и имя сервера.
///////////////////////////////////////////////////////////
//// Пример создания источника данных для
// ODBC драйвера для Microsoft Excel 97
// #include
#include
#pragma comment(lib, "odbccp32")
#pragma comment(lib, "user32")
void main() {
char* driver = "Microsoft Excel Driver (*.xls)";
char* params = "DSN=MyTable\0DefaultDir=D:\\Document\0"
"DBQ=D:\\Document\\MyTable.xls\0";
// Создадим пользовательский
DSN SQLConfigDataSource(NULL, ODBC_ADD_DSN, driver, params);
}
Надеюсь, для Вас не будет слишком большим сюрпризом узнать, что всю информацию об источниках данных и драйверах ODBC Windows хранит в реестре. А если быть совсем точным, то в ключах
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI (пользовательские DSN)
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI (системные DSN)
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI (драйверы ODBS)
Информацию о том, как правильно заполнять строку params , можно извлечь самостоятельно, создавая при помощи ODBC-администратора источники данных для различных драйверов Вашей системы и анализируя состав параметров и присвоенные им значения ключей реестра, относящихся к созданным источникам. Надеюсь также, что не сильно шокирую Вас, если скажу, что приведенный выше пример был написан именно так.
Всего доброго и до встречи через неделю!
Алекс Jenter jenter@rsdn.ru Красноярск, 2001. Рассылка является частью проекта RSDN.
Программирование на Visual C++
Выпуск №47 от 3 июня 2001 г.
Всем привет!
Автор: Kyle Marsh
Перевод: Олег Быков
Введение
В операционной системе MicrosoftR WindowsNT хуком называется механизм перехвата особой функцией событий (таких как сообщения, ввод с мыши или клавиатуры) до того, как они дойдут до приложения. Эта функция может затем реагировать на события и, в некоторых случаях, изменять или отменять их. Функции, получающие уведомления о событиях, называются фильтрующими функциями и различаются по типам перехватываемых ими событий. Пример – фильтрующая функция для перехвата всех событий мыши или клавиатуры. Чтобы Windows смогла вызывать функцию-фильтр, эта функция должна быть установлена – то есть, прикреплена – к хуку (например, к клавиатурному хуку).
Прикрепление одной или нескольких фильтрующих функций к какому-нибудь хуку называется установкой хука. Если к одному хуку прикреплено несколько фильтрующих функций, Windows реализует очередь функций, причем функция, прикрепленная последней, оказывается в начале очереди, а самая первая функция – в ее конце.
Когда к хуку прикреплена одна или более функций-фильтров и происходит событие, приводящее к срабатыванию хука, Windows вызывает первую функцию из очереди функций-фильтров. Это действие называется вызовом хука. К примеру, если к хуку CBT прикреплена функция и происходит событие, после которого срабатывает хук (допустим, идет создание окна), Windows вызывает CBT-хук, то есть первую функцию из его очереди.
Читать дальше