Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 205


245

DLL, как MYAPI, но при этом в исходном файле библиотеки мы должны определить макро _MYDLL , а в исходном файле приложения ни в коем случае это макро не определять. Что и сделано. Проверьте - работает! Посмотрите в заголовочные файлы Win32. По-моему, в них используется эта техника.

Описание функций как экспортируемых требуется линкеру для того, чтобы правильно построить таблицу экспортируемых функций в dll-файле. Каждый элемент в этой таблице содержит имя экспортируемой функции, а также ее адрес. Немаловажно, что список функций сортирует­ся по алфавиту. Таким образом, если функция должна работать бмстро, то какое-то преимущество можно получить в том случае, если имя функ­ции будет начинаться с первых букв алфавита. По это преимущество сработает только в момент выполнения GetProcAddressQ, а не (увы!) при обращении к функции. Для того чтобы разобраться во внутренностях DLL, воспользуемся утилитой TDUMP, поставляемой с Borland C++ 5.0 (аналогичные утилиты есть и в других системах программирования, например, в Microsoft Visual C++ подобная утилита называется DUMPBIN). Часть распечатки таблицы экспорта для kernel32.dll приведе­на ниже:

Turbo Dump Version 4.2.15.2 Copyright (с) 1988, 1996 Borland International Display of File KERNEL32.DLL

Exports from KERNEL32.dll

680 exported name(s), 780 export addresse(s). Ordinal base is I. Ordinal RVA      Name

0049

0002d900 AddAtomA

 

0101

 

00034c99 AddAtomW

 

0102

 

0002f44b AllocConsole

 

0103

 

00021b22 AllocLSCallback

 

0104

 

0002 Ib55 AllocSLCallback

 

0105 0106

 

0002e75b AreFileApisANSl 00034d20 BackupRead

 

 

 

 

 

0774 0775 0776 0777

 

00007 Ida Istrcpyn 00007 Ida IstrcpynA 00034ccf  IstrcpynW 00007251  Istrlen

 

0778

 

00007251  IstrlenA

 

0779

 

0002b83c IstrlenW

 

246

Как можно убедиться, все функции рассортированы в алфавитном по­рядке? В первой колонке указаны ordinals - порядковые номера функций. В более ранних версиях Windows функции могли экспортироваться не только по именам, но и но порядковым номерам. Сейчас Microsoft реко­мендует пользоваться только именами функций (именно поэтому я не описываю способ экспорта и импорта функций посредством указания порядковых номеров). Для справки - средняя колонка содержит Real Virtual Addresses - адреса функций внутри DLL.




Начало  Назад  Вперед



Книжный магазин