Объявление TParseDisplayName
опускает соглашение о вызовах. Вам необходимо включить stdcall
.
TParseDisplayName = function(pszPath: PWideChar; pbc: IBindCtx;
var pidl: PItemIDList; sfgaoIn: ULong; var psfgaoOut: ULong): HResult; stdcall;
Когда вы не указываете соглашение о вызовах, используется соглашение о вызовах по умолчанию. Соглашение о вызовах по умолчанию register
. Это имеет другую семантику для передачи параметров и очистки, что приводит к типу ошибки времени выполнения, которую вы испытали Практически все функции Windows API используются stdcall
.