Уведомления

Группа в Telegram: @pythonsu

#1 Май 17, 2007 17:55:01

Mixolap
От:
Зарегистрирован: 2007-05-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

QPluginLoader

Есть dll, написанный на C++ (QT), программа написанная на С++ его нормально подгружает и удачно использует объект в нем => плагин нормально работает.
Подключаю его через pyQT кодом:

import sys
from PyQt4 import QtGui,QtCore

if __name__ == “__main__”:
a = QtGui.QApplication(sys.argv)

plugin = QtCore.QPluginLoader(“libpnp_extrafilters.so”)
if plugin.load():
obj = plugin.instance()
if obj != None:
obj.filters()
sys.exit(0)

и получаю такую вот ошибку:
Traceback (most recent call last):
File “myplug.py”, line 12, in ?
obj.filters()
AttributeError: filters

Чего я в коде не дописал? Может как-то надо подключить заголовочный файл интерфейса плагина?
или может кто подскажет другие способы загрузки из динамической библиотеки объекта в питоне? (без модификации самого кода объекта)



Офлайн

#2 Май 20, 2007 23:37:18

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

QPluginLoader

А ты глянь:
if plugin.load():
obj = plugin.instance()
print obj, type(obj), dir(obj)
if obj != None:
obj.filters()

Может, список аттрибутов что-то навеет?



Офлайн

#3 Май 21, 2007 18:05:20

Mixolap
От:
Зарегистрирован: 2007-05-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

QPluginLoader

Сенкс, хоть кто-то откликнулся,
навеяло следующее:
<PyQt4.QtCore.QObject object at 0xb7ecfe2c> <class ‘PyQt4.QtCore.QObject’>
Traceback (most recent call last):
File “myplug.py”, line 14, in ?
obj.filters()
AttributeError: filters

то есть obj считается классом QObject (что в принципе верно, так как экспортируемый класс наследуется от QOject)
как теперь дать знать питону о том что это класс: ExtraFilterPlugin



Офлайн

#4 Май 21, 2007 21:26:08

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

QPluginLoader

А на сях ты этот plugin.instance() кастовал к своему типу - и все было хорошо?
Прийдется либо написать сяйную замотку, чтобы питон это увидел.
Замотать интерфейс, обкрутить его. Унаследоваться от интерфейса в плагине

Или ограничится в общении с плагином сообщениями.



Офлайн

#5 Май 22, 2007 19:42:09

Mixolap
От:
Зарегистрирован: 2007-05-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

QPluginLoader

Андрей Светлов
А на сях ты этот plugin.instance() кастовал к своему типу - и все было хорошо?
да так и было:
QObject *plugin = loader.instance();
BrushInterface *iBrush = qobject_cast<BrushInterface *>(plugin);

видимо правда придется думать в сторону замотки ((((



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version