Обработка исключений кросс-компилятора - это можно сделать безопасно? - PullRequest
1 голос
/ 13 ноября 2009

Я занимаюсь некоторым обслуживанием библиотеки DLL C ++ для Windows, которая необходима для работы с различными компиляторами VC ++ (поскольку я не хочу обращаться к различным схемам искажения).

Я уже исключил любое использование STL в интерфейсе.

Я гарантировал, что повреждение кучи не произойдет из-за смешивания разных новых / удаленных.

Последний пункт - исключения. Можно ли сгенерировать исключение и ожидать, что оно будет корректно перехвачено другой версией компилятора?

Ответы [ 3 ]

8 голосов
/ 13 ноября 2009

Даже с учетом вашего дополнительного комментария: Это не будет работать всякий раз, когда MS изменяет либо ABI компилятора, либо макет класса исключений (классов) , либо даже с другими настройками компилятора . Фактически, последний может вызвать сбой даже с таким же компилятором.

Так что я думаю, ответ: нет, вы не можете сделать это безопасно. Если вы хотите передать не POD-объекты между исполняемыми файлами, они должны быть скомпилированы с тем же компилятором, той же библиотекой std и одинаковыми (в некоторой степени) настройками компилятора.

1 голос
/ 13 ноября 2009

Скорее всего, нет. Каждая версия компилятора будет иметь собственную среду выполнения, которая совершенно не знает о другой среде. Если продавец явно не заявит, что это возможно, скорее всего, это невозможно.

1 голос
/ 13 ноября 2009

Я ожидаю, что это зависит от поставщика компилятора, я не думаю, что стандарт определяет, как должны реализовываться исключения, поэтому он не может гарантировать вам последовательную реализацию.

...