Форум сайта python.su
 
							 0
  0   
								
								Есть 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
Чего я в коде не дописал? Может как-то надо подключить заголовочный файл интерфейса плагина?
или может кто подскажет другие способы загрузки из динамической библиотеки объекта в питоне? (без модификации самого кода объекта)
Офлайн
 
							 14
  14   
								
								А ты глянь:
   if plugin.load():
        obj = plugin.instance()
         print obj, type(obj), dir(obj) 
        if obj != None:
            obj.filters()
Может, список аттрибутов что-то навеет?
Офлайн
 
							 0
  0   
								
								Сенкс, хоть кто-то откликнулся, 
навеяло следующее:
<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
Офлайн
 
							 14
  14   
								
								А на сях ты этот plugin.instance() кастовал к своему типу - и все было хорошо?
Прийдется либо написать сяйную замотку, чтобы питон это увидел.
Замотать интерфейс, обкрутить его. Унаследоваться от интерфейса в плагине
Или ограничится в общении с плагином сообщениями.
Офлайн
 
							 0
  0   
								
								Андрей Светловда так и было:
А на сях ты этот plugin.instance() кастовал к своему типу - и все было хорошо?
Офлайн