Проверьте зависимость плагина Qt во время выполнения - PullRequest
3 голосов
/ 16 ноября 2011

Вот что у меня есть: Мое приложение статически скомпилировано с Qt 4.5. Я использую плагин qsqloci (статически связанный), который динамически загружает библиотеки оракула (oci.dll, ...).

Я бы хотел иметь возможность проверить наличие библиотек Oracle и в зависимости от результата использовать функции плагина или нет.

И вопросы:

  • Это возможно при статически связанном плагине?
  • Если нет, возможно ли, чтобы плагин был динамически связан (остальная часть приложения все еще статически связана с Qt)?
  • Если нет, возможно ли это вообще?

1 Ответ

4 голосов
/ 16 ноября 2011

Вы можете проверить, доступна ли DLL, используя QLibrary.

После загрузки библиотеки вместо начала использования QLibrary::resolve вы загрузите свой плагин.

QLibrary lib("oci"); // QLibrary will try the platform's library suffix
if (! lib.load()) {
  qDebug() << "Library load error:" << lib.errorString();
  return;
}
// load plugin

Вы не можете использовать QPluginLoader для загрузки плагина, потому что вы статически связываете, но вы должны иметь возможность использовать QLibrary.

Руководство гласит:

Обратите внимание, что QPluginLoader нельзя использовать, если ваше приложение статически связано с Qt. В этом случае вам также придется статически ссылаться на плагины. Вы можете использовать QLibrary, если вам нужно загружать динамические библиотеки в статически связанном приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...