Код: Выделить всё
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();
}
< /code>
Сообщение об ошибке: < /p>
[bcc64x Error] SynEditExport.cpp(206): cannot use C++ 'try' in the same function as SEH '__try'
[bcc64x Hint] SynEditExport.cpp(211): conflicting '__try' here
Я обнаружил, что есть патч, который, вероятно, отвечает за новое поведение: < /p>
rss-698: попробуйте, наконец, ошибку поймать в соответствии с win64x < /p>
< P> К сожалению, я не могу войти там. Если патч действительно ответственен за него, мне интересно, не создает ли патч больше ошибок, чем исправляет ошибки. > < /p>
Спасибо за ваши предложения обойти проблему. Но, чтобы держать мой вопрос коротким, я недостаточно объяснил его фон. p>
Код: Выделить всё
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;
< /code>
Это преобразование несложное и может быть немедленно понято каждому пользователю. Ошибка теперь встречается часто. Создание специальной структуры для этого случая не будет решением для других случаев. Использование scope_exit Подробнее здесь: https://stackoverflow.com/questions/792 ... as-seh-try
Мобильная версия