овторное использование разработанных кодов___________________437

// BORLNDMM.DLL as their memory manager.  In these cases, the

// file BORLNDMM.DLL should be deployed along with your DLL.

//

// To avoid using BORLNDMM.DLL, pass string information using

// "char *" or ShortString parameters.

//

// If your DLL uses the dynamic version of the RTL, you do not

// need to explicitly add MEMMGR.LIB as this will be done

// implicitly for you

(Комментарий гласит: Важное замечание об организации памяти DLL, если
ваша DLL использует статическую версию библиотеки времени выполнения
RunTime Library:

Если ваша DLL экспортирует какие-то процедуры или функции, которым
передаются в виде параметров или от которых получаются как результат
объекты строк String (или структуры и классы, содержащие вложенные
строки), вы должны добавлять библиотеку MEMMGR.LIB как в прект DLL, так
и в любой проект, использующий эту DLL. Вы должны также включать
MEMMGR.LIB в любой проект, использующий операции создания (new) и
удаления (delete) объектов экспортируемых из данной DLL классов, не
наследующих TObject. Добавление MEMMGR.LIB в ваш проект изменит DLL и
ее вызовы так, чтобы для распределения памяти использовалась библиотека
BORLNDMM.DLL — диспетчер разделяемой памяти. В этих случаях файл
BORLNDMM.DLL должен распространяться вместе с файлом вашей DLL.

Чтобы избежать использования BORLNDMM.DLL, передавайте строковую
информацию посредством параметров типа «char *» или ShortString.

Если ваша DLL использует динамическую версию RTL, то вам не надо явным
образом добавлять MEMMGR.LIB, так как это добавление будет сделано
неявно.)

//———————————————————————

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{

return 1;

}
//——————————————————————

Прежде всего обратите в этом коде внимание на длинный комментарий. Его
суть сводится к тому, что при передаче в функцию и из функции строк желательно
использовать тип (char *), а не, например, AnsiString. Это избавит и вас, и пользо-
вателей вашей DLL от сложностей, связанных с необходимостью использовать
borlndmm.dll. Например, пусть вы хотите включить в вашу DLL функцию, кото-
рая воспринимает строку и ключ типа char, и возвращает ее закодированной этим
ключом. Кодировка проводится самая примитивная: сложением каждого символа
строки с ключом по операции исключающее ИЛИ. Кстати, такая кодировка легко
поддается декодированию: достаточно с закодированной строкой выполнить ту же
операцию с тем же ключам, и вам вернется исходная строка.

Эту функцию можно реализовать следующим образом:

AnsiString Code(AnsiString s, char Key)
(

for (int i = 1; i <= s.Length(); i++)
s[i] = s[i] л Key;

return s;

}

Но для включения в DLL лучше использовать другой тип строк:

char * Code(char *s, char Key)
{

for (int i = 0; ; i++)

{
if (s[i] == '\0') break;