I>т.е. если метод выполнен без ошибки он вернет значение int, а при ошибке швырнет Exception с моей информацией.
I>Как такое правильно ревлизовать в DLL (MS C++)?
I>Спасибо!
Вряд ли это будет работать,
Скорее всего будет access violation at address... тем более, если DLL используется в Delphi или Python.
Здравствуйте, Maniacal, Вы писали:
M>Здравствуйте, indee, Вы писали:
I>>Мастерю DLL (VS C++).
I>>Хотелось бы реализовать сообщение об ошибке в экспортируемом методе DLL как в Java:
I>>
I>>т.е. если метод выполнен без ошибки он вернет значение int, а при ошибке швырнет Exception с моей информацией.
I>>Как такое правильно ревлизовать в DLL (MS C++)?
I>>Спасибо!
M>Так же почти.
M>В header'е: M>
Здравствуйте, indee, Вы писали:
I>т.е. если метод выполнен без ошибки он вернет значение int, а при ошибке швырнет Exception с моей информацией.
I>Как такое правильно ревлизовать в DLL (MS C++)?
Здравствуйте, indee, Вы писали:
I>Вряд ли это будет работать, I>Скорее всего будет access violation at address... тем более, если DLL используется в Delphi или Python.
А header C++'сный как Delphi или Python собирается подключать для импорта объектно-ориентированного интерфейса из DLL?
У меня для взаимодействия C++'ной DLL с Delphi написана прослойка с одной стороны на C++, с другой на Delphi. Со стороны Delphi есть функция, кидающая исключение, со стороны C++ вызовы всех экспортируемых функций обёрнуты в try-catch, где из исключения std::runtime_error извлекается строка и передаётся в функцию Delphi, где уже на стороне импортёра DLL кидается Delphi'йское исключение.
C++'сных хедеров и импорта объектно-ориентированного интерфейса из DLL нет.
Старый, добрый stdcall/winapi — иначе бы COM выбрал.
Здравствуйте, Maniacal, Вы писали:
M>Здравствуйте, indee, Вы писали:
I>>Вряд ли это будет работать, I>>Скорее всего будет access violation at address... тем более, если DLL используется в Delphi или Python.
M>А header C++'сный как Delphi или Python собирается подключать для импорта объектно-ориентированного интерфейса из DLL?
M>У меня для взаимодействия C++'ной DLL с Delphi написана прослойка с одной стороны на C++, с другой на Delphi. Со стороны Delphi есть функция, кидающая исключение, со стороны C++ вызовы всех экспортируемых функций обёрнуты в try-catch, где из исключения std::runtime_error извлекается строка и передаётся в функцию Delphi, где уже на стороне импортёра DLL кидается Delphi'йское исключение.
Здравствуйте, indee, Вы писали:
I>C++'сных хедеров и импорта объектно-ориентированного интерфейса из DLL нет. I>Старый, добрый stdcall/winapi — иначе бы COM выбрал.
winapi — на языке C.
Если хотите ограничиться языком С (не C++), то в нем нет исключений.
Некоторые библиотеки c-биндинга (например ctype для python) поймают стандартное std::exception, но я не советую...
Используйте коды возврата, и отдельную функцию, реализованную через threadlocal, для хранения текста сообщения об ошибке.