LINUX.ORG.RU

[C++] использование shared library в нескольких приложениях

 


0

1

Привет.
Есть метод в библиотеке const char* A::getMessage();
Библиотека используется в нескольких приложениях. Сообщение формируется по внутреннему состоянию класса А, но в зависимости от приложения сообщение должно немного различаться. Как правильно разрулить ситуацию? Вынести формирование сообщения в приложения? (Но тогда придётся отдавать наружу статус класса А)

★★★★★

Ответ на: комментарий от trashymichael

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

а Вы в часто задаваемые вопросы гляньте, там для Вас спецом написано, но главное ж написать пафосный камент, да?

shty ★★★★★
()
Ответ на: комментарий от trashymichael

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

не пафос, это я так не очень удачно выразился, сорри, просто имхо лучше не задавать риторических вопросов в тех. разделах, они, как правило, решению вопроса не помогают

shty ★★★★★
()

>Сообщение формируется по внутреннему состоянию класса А, но в зависимости от приложения сообщение должно немного различаться

Тут надо смотреть, в чём заключается зависимость формируемой строки от конкретного приложения. Может достаточно передавать от приложений форматную строку (ака шаблон), с которым будет работать getMessage()?

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Грубо говоря, это сообщение об ошибке с информацией. Информация для консольной версии и для GUI будет различная, ессно.

UVV ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

Да, наверное так и сделаю:
getMessage(const char* customMessage);

Thanks.

UVV ★★★★★
() автор топика

Очевидное решение - если сообщение формируется по внутреннему состоянию объекта и должно зависеть от приложения, то нужно добавить в состояние объекта информацию о приложении

cobold ★★★★★
()
Ответ на: комментарий от UVV

Сообщения об ошибке с информацией принято эксепшонами выбрасывать, с собственно информацией об ошибке в самом объекте исключения, ну и в обработчике его уже делать с этой информацией что угодно - хоть всплывающим окном выскакивать, хоть в консоль печатать

yoghurt ★★★★★
()
Ответ на: комментарий от cobold

Очевидное решение - если сообщение формируется по внутреннему состоянию объекта и должно зависеть от приложения, то нужно добавить в состояние объекта информацию о приложении

Как определять приложение предлагаешь? Либа подключается в run-time, а не compile time.

UVV ★★★★★
() автор топика

можно попробовать идентифицировать приложения в общей библиотеке по pid/tid... ну и вероятно придется метод регистрации приложений писать.

mrs
()

Сделай два метода - один для гуи, один для консольного. Всё остальное - изврат.

nanoo_linux
()
Ответ на: комментарий от UVV

> Информация для консольной версии и для GUI будет различная, ессно.

А что тут «ессно»? Тут ничего не «ессно», тут совсем наоброт.

LamerOk ★★★★★
()

код библиотеки доступен для модификации?

annulen ★★★★★
()

Если либку менять нельзя, то надо б следить кто рождает объекты класса А в приложении.

Если можно - я бы использовал подобие вендового HRESULT, и разбирал бы код ошибки в отдельной функции, типа GetErrMessage(int code, ... ), те избавил бы билиотечные классы от строковых сообщений, выкидывая коды ошибок.

nikitos ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.