У меня появились проблемы с использованием библиотеки DLL.
Описание проблемы:
1. Есть библиотека dll в которой хеш-функция получает адрес строки, обрабатывает её и возвращает уже хеш-код. Библиотека написана на С++ с использованием MFC.
2.1. Если эту библиотеку использует программа написанная на С++, то всё проходит нормально.
2.2. Вот объявление хеш-функфии в программе
CString __stdcall EXPORT HASH(CString *NAME);
2.3. Вот код вызова хеш-функции из программы
CString StrPass;
CString StrHash;
StrHash = HASH(&StrPass);
3.1. Если же эту библиотеку использует программа написанная на Delphi, то если на обработку хеш-функцией подавать адрес строки длинной меньше 4-ёх символов, то всё проходит нормально.
3.2. Вот объявление функфии в программе
function HASH(Pass: Pointer):string;StdCall;
...
implementation
function HASH; external 'maindll.dll' name 'HASH';
3.3. Вот код вызова хеш-функции из программы
var
Str_pass: string;
Str_hash: string;
begin
...
Str_hash:=HASH(@Str_pass);
4. Если же символов в подаваемой строке будет 4 и более, то на каждый, так сказать, лишний символ выдаётся два окна ошибки (Microsoft Visual C++ Debug Library), оба со следующим текстом:
Debug Assertion Failed!
Programm: <Путь к моей программе>
File: afx.inl
Line: 177
5. Если в окнах ошибок нажать "Пропустить", то библиотека возврашает правильный результат, т.е. такой же что и в случае с программой написанной на С++.
6. Я нашел файл afx.inl и вот что нашел в строке 177 (строки указаны):
173 _AFX_INLINE TCHAR CString::operator[](int nIndex) const
174 {
175 // same as GetAt
176 ASSERT(nIndex >= 0);
177 ASSERT(nIndex < GetData()->nDataLength);
178 return m_pchData[nIndex];
179 }
7. А самое интересное, что если в хеш-функцию (переделанную немного) передавать путь к файлу где находится наша строка, то уже в библиотеке прочитав строку из файла и сделав хеш-код, всё проходит отлично, что в случае с програмой на С++, что на Delphi. Причём даже возвращая хеш-код через файл и просто возвращая.
Вопрос:
Почему для 3 и менее символов всё работает, а для большего колличества - НЕТ?
Если кто знает, помогите решить проблему