Я не вижу ничего плохого в коде, который вы опубликовали.
Конечно, как многие уже упоминали, вы делаете неявное преобразование из pAnsiChar в AnsiString в строку в строке
TempStr := sFileName;
Но это не повредит строку.
Вы пытались использовать ShowMessage(TempStr)
сразу после назначения?(Просто чтобы убедиться, что это не отладчик delphi, который не оценивает строку должным образом в отладке).Или даже поставьте точку останова в начале функции и оцените (в отладке) как Pchar(sFileName)
, так и PAnsiChar(sFileName)
(чтобы увидеть, есть ли у указателя допустимые данные для начала)
Еще одна вещь, которую япроверил бы, какая именно версия DLL была загружена во время отладки.Возможно, DLL, которая была загружена во время отладки, была не последней с вашим изменением «ansi».Я не думаю, что Delphi гарантирует, что DLL, которая будет загружена хост-приложением, будет той, что была только что скомпилирована, это будет первая, которую хост-приложение найдет в пути поиска DLL Windows (я могу ошибаться в этомхоть).
Ох ... и последнее, но не менее важное, убедитесь, что вы случайно не удалили "stdcall" в DLL ... хммм ... На самом деле, вы должны сделать это в первую очередь!: P
Это все, что я могу думать прямо сейчас ...