Я пишу приложение с дополнительной зависимостью времени выполнения с KWallet. Это означает, что если в пользовательской системе установлен KWallet, а если нет, то он все еще работает, но без поддержки KWallet.
Вот как я загружаю библиотеку, это свойство stati c моего класса-оболочки. Затем в конструкторе при условии состояния я разрешаю символы из библиотеки.
QLibrary Core::PSE::KWallet::lib("KF5Wallet");
...
lib.load();
openWallet = (OpenWallet) lib.resolve("_ZN7KWallet6Wallet10openWalletERK7QStringyNS0_8OpenTypeE");
networkWallet = (NetworkWallet) lib.resolve("_ZN7KWallet6Wallet13NetworkWalletEv");
destructor = (Destructor) lib.resolve("_ZN7KWallet6WalletD2Ev");
Так же, как QLibrary - функция также является членом c членов моего класса, но я не уверен, что это хорошая идея. Вот определения из моего класса
typedef ::KWallet::Wallet* (*OpenWallet)(const QString &, WId, ::KWallet::Wallet::OpenType);
typedef QString (*NetworkWallet)();
typedef void (*WalletOpened)(bool);
typedef void (*Destructor)();
static OpenWallet openWallet;
static NetworkWallet networkWallet;
static Destructor destructor;
Вот как я выделяю объект
wallet = openWallet(networkWallet(), 0, ::KWallet::Wallet::Asynchronous);
Все идет хорошо, пока мне не понадобится выполнить элементы, не являющиеся c и, особенно , деструктор. Насколько я знаю, он должен выглядеть так
((*wallet).(destructor))()
, но, похоже, это не сработает. Я совершенно новичок в этой топи c и понятия не имею, даже если я начал правильно.
Итак, как мне вызвать деструктор этого загруженного класса? Как я могу призвать остальных его членов? Или мне лучше сделать это каким-то совершенно другим способом?
PS Я знаю, что есть API-интерфейс DBUS для KWallet, даже некоторые библиотеки-обертки, такие как qtkeychain, но я хочу понять, как это сделать. зависимостей, использующих этот пример.