Вход из динамически загружаемой библиотеки

У меня есть настольное приложение C ++, которое может регистрировать сообщения, используя библиотеку ‘spdlog’ (https://github.com/gabime/spdlog). Теперь я хотел бы использовать тот же логгер из динамически загружаемой DLL. Однако, когда я пытаюсь использовать spdlog из DLL, у меня возникает сбой.

Как я могу настроить динамически загружаемую DLL на использование того же регистратора, что и в главном приложении?

0

Решение

Я нашел одну возможную причину проблемы.

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

Особые оскорбительные варианты:

/Gd     Uses the __cdecl calling convention (x86 only).
/GR     Enables run-time type information (RTTI).
/Gr     Uses the __fastcall calling convention (x86 only).
/Gv     Uses the __vectorcall calling convention. (x86 and x64 only)
/vmm    Declares multiple inheritance.
/vms    Declares single inheritance.
/vmv    Declares virtual inheritance.
/vmb    Uses best base for pointers to members.
/vmg    Uses full generality for pointers to members.
/Zp     Packs structure members.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]