Код: Выделить всё
void __fastcall TSynCustomExporter::CopyToClipboardFormat(UINT AFormat)
...
try // line 206
{
PtrData = ((Byte*) GlobalLock((HGLOBAL) hData));
if(ASSIGNED(PtrData))
{
try // line 211
{
fBuffer->Position = 0;
fBuffer->Read((void**)PtrData, (TNativeCount) (hDataSize - 1)); // trailing #0
}
__finally
{
GlobalUnlock((HGLOBAL) hData);
}
Clipboard()->SetAsHandle(AFormat, hData);
}
else
Abort();
}
catch(...)
{
GlobalFree((HGLOBAL) hData);
OutOfMemoryError();
}
Код: Выделить всё
[bcc64x Error] SynEditExport.cpp(206): cannot use C++ 'try' in the same function as SEH '__try'
[bcc64x Hint] SynEditExport.cpp(211): conflicting '__try' here
Я обнаружил, что существует патч, который, вероятно, отвечает за новое поведение:
RSS-698: попробуйте поймать наконец ошибку под win64x
К сожалению, не могу войти там.
Мне хотелось бы узнать больше о причине этого сообщения об ошибке. Если патч действительно виноват в этом, мне интересно, не создает ли патч больше ошибок, чем исправляет.
ОБНОВЛЕНИЕ: >
Спасибо за ваши предложения по решению проблемы. Но, чтобы мой вопрос был кратким, я недостаточно объяснил его суть.
Пример кода является результатом автоматического преобразования следующего кода Delphi с помощью инструмента Delphi2CB:
Код: Выделить всё
procedure TSynCustomExporter.CopyToClipboardFormat(AFormat: UINT);
...
try
PtrData := GlobalLock(hData);
if Assigned(PtrData) then
begin
try
fBuffer.Position := 0;
fBuffer.Read(PtrData^, hDataSize - 1); // trailing #0
finally
GlobalUnlock(hData);
end;
Clipboard.SetAsHandle(AFormat, hData);
end
else
Abort;
except
GlobalFree(hData);
OutOfMemoryError;
end;
Пример кода был взят из C++-версии компонентов SynEdit, где ошибка теперь возникает часто. Построение специальной структуры для этого случая не будет решением для других случаев. Использованиеscope_exit было бы общим решением, но не интуитивно понятным.
И, как я сказал вначале, несколько недель назад этой проблемы не существовало. Я не понимаю, почему код вдруг перестал работать.
Подробнее здесь: https://stackoverflow.com/questions/792 ... as-seh-try
Мобильная версия