0 Members and 1 Guest are viewing this topic.
Она бы тогда повторялась всегда, а не только при postponed-вызове.
Если ваш код можно выполнять в любом потоке - нет никакого смысла его вызывать из главного потока.
Ошибка остается хоть при postponed хоть и не postponed вызове. Компилятор создал в отладочной версии некую проверку с выбрасыванием исключения, которое после обрабатывается, и создано оно что уведомить разработчика что что-то не так, а ошибка о которой говорите Вы из-за того что параметры передаются разными соглашениями(о чем и говорит проверка компилятора) и видимо после завершения функции Execute программа возвращает управление не туда куда надо и падает с необработанным исключением.
Код то можно выполнить в любом потоке, а вот изменить UI контрол нельзя ну и Config тоже.
Сейчас попробую переписать в апи функцию на:virtual BOOL pascal IsCanceled() = 0;Студия видит pascal как зарезервированное слово.
А попробуйте, не обращаться к IAIMPTaskOwner.IsCanceled?
Попробую поискать в настройках компоновщика, а
сейчас наверное уже стоит переписать ту функцию на stdcall.
Если не обращаться к этому методу - стэк ломаться не должен.
Странно, раньше-то работало. У меня где-то была 2010-ая студия - сейчас поставлю на виртуалку и посмотрю, как там было.
попробуйте заменить на pascal или __pascal
Append, насколько я знаю, указатель на this (self) передаётся в паскале как обычный параметр, поэтому просто вызовите метод с одним параметром.Достаточно в хидере поправить "virtual BOOL __stdcall IsCanceled(IAIMPTaskOwner*);"Должно работать, но это не точно Не надо будет тогда API менять.