Привет всем! Переписываю свою DLL с Delphi на ассемблер. Столкнулся с проблемой: как выбросить Exception ??? На Delphi это выглядит так: Код (Text): raise Exception.Create('String is empty'); как это будет выглядеть на ассемблере ? Заранее спасибо.
Компайлишь код в Дельфях и смотришь в дизассемблере. Самый надежный способ. А потом задавай вопросы по тому, что увидишь.
crypto Если интересно покопаться в потрохах, то проще заглянуть в сорцы system.pas, чем чего то компилить и дизасмить gershkovich На ассемблере "это" будет выглядеть ужасно Само исключение вызывается просто через API функцию RaiseExeption Вопрос в том как организована обработка исключения, т.е. что передавать в качестве аргументов в lpArguments. В дельфях используются свои навороты, в частности в lpArguments передается указатель на созданный объект Exception, содержащий твою строку. Соответственно стандартный обработчик исключений в дельфях идентифицирует свои "родные" исключения не по ExceptionCode, а по типу объекта Exception, и может выдавать переданную в него строку сообщения PS: А стоит ли вообще в dll связываться с исключениями - не проще ли возвращать FALSE и устанавливать SetLastError как это принято в Win API ?
Спасибо, за объяснение. В моем случае приходится делать много проверок в одной проц-е, и использовать exception для выхода из нее было очень удобно. Для асма, похоже, действительно менее геморойно использовать "if" и "goto".