Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Python и СОМ технологии, важная большая тема 
:(
    Опции темы
GoD
Дата 6.10.2006, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



   Знаю, что специлистов в этом направлении не много, но тем актуальнее вопрос: 
Может ли Питон работать с базовым СОМ интерфейсом(IUnknown) или только с интерфейсом IDispatch? Это главный вопрос. 
  Ну, естественно, если ответ положительный, то хотелось бы узреть воотчию пример, ну скажем для работы с компонентой CharDB(c GUID=CharDB_IID), всю последовательность подключения , начиная с ...import pythoncom .... Слабо?! 
 Всем профи , принявшим участие в обсуждении темы, заранее большая благодарность! 
PM MAIL   Вверх
rgb
Дата 9.10.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 31.8.2006

Репутация: 1
Всего: 2



Может чем поможет:
Python Programming on Win32.chm
5-ю главу глянь
PM MAIL ICQ   Вверх
Artemios
Дата 9.10.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Никогда сим не занимался, попробуй посмотреть, что можно с win32all.


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
slav0nic
Дата 9.10.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.5.2006

Репутация: 4
Всего: 5



в developers hanbook тоже есть немного про это на примере работы с вордом, экселем и написанием клиент-сервера. (искать тамже;) )
--------------------
                                 python.com.ua 
PM MAIL WWW Jabber   Вверх
GoD
Дата 9.10.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



   Мда товарищи... Подозревал я, что тема ета непопулярная(а может еще не раскрытая в виду своей нетривиальности), но надежда еще теплится, что какой-то гуру и на нее найдется(хотя осознавать себя первопроходцем тоже приятно). 
  Спасибо всем за советы, но все это я уже прошел и даже промунштировал книгу про Win32. К сожалению утвердительного ответа еще не получил-реализовть задумку еще не удалось, но и сказать с увереностью "таки эта фишка в Питоне не прокатит" тоже не могу.
  Так что тему еще не закрываем, будем надеяться на светлый луч!
PM MAIL   Вверх
pythonwin
Дата 13.10.2006, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



GoD, пожалуйста раскажи подробней - зачем тебе использовать COM-технологии? smile
PM WWW GTalk Jabber   Вверх
slav0nic
Дата 13.10.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.5.2006

Репутация: 4
Всего: 5



я не пойму что именно надо, по аналогии с примерами с вордом не прокатит?
--------------------
                                 python.com.ua 
PM MAIL WWW Jabber   Вверх
pythonwin
Дата 13.10.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(slav0nic @  13.10.2006,  18:02 Найти цитируемый пост)
я не пойму что именно надо, по аналогии с примерами с вордом не прокатит? 

думаю, что задачу можно решить и без COM, просто нужно услышать постановку задачи. smile
PM WWW GTalk Jabber   Вверх
GoD
Дата 13.10.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



Цитата(pythonwin @ 13.10.2006,  08:54)
GoD, пожалуйста раскажи подробней - зачем тебе использовать COM-технологии? smile

   Все упирается в компонентное тестирование: написано програмное обеспечение, основывающееся на взаимодействии компонент(условно - серверная компонента, графическая компонента и интерфейсная). Taк вот для эффективного тестирования программы надо реализовать тестирование каждой компоненты. Компоненты как уже понятно реализованы по технологии СОМ.
......годится постановочка?

 На счет примеров с Word'ом.... пока СОМ автоматизированный(IDispatch) все более менее понятно(конечно задачка сложнее чем с Word'ом но принцип подобный), но когда СОМ реализован как IUnknown, тогда элементарно Python просто не хочет подключаться к этой компоненте методом исполбзованным для IDispatch/.

P.S. Я рад что пробудил наконецто человеческие умы на такую нетривиальную тему.
PM MAIL   Вверх
Artemios
Дата 15.10.2006, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Цитата(GoD @  13.10.2006,  19:15 Найти цитируемый пост)
P.S. Я рад что пробудил наконецто человеческие умы на такую нетривиальную тему. 

Большинство на Python-е пишут либо под *nix, либо стараются делать кроссплатформенный код. И в том, и в другом случае COM остается за бортом, прости за каламбур. 
Будешь в рамках нашего форума первопроходцем smile


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
albertn
Дата 16.10.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Нарыл ссылочки на английском языке, но не знаю, подойдут ли они или нет:
http://www.boddie.org.uk/python/COM.html
http://www.oreilly.com/catalog/pythonwin32/chapter/ch12.html
http://www.pyzine.com/Issue007/Section_Art..._PythonCOM.html
Если даже и с английсим плохо, но по примерам легко разобраться. Вся работа идет через модуль win32com.
PM WWW ICQ   Вверх
GoD
Дата 16.10.2006, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



Цитата(Artemios @  15.10.2006,  02:06 Найти цитируемый пост)
Большинство на Python-е пишут либо под *nix, либо стараются делать кроссплатформенный код. И в том, и в другом случае COM остается за бортом, прости за каламбур. Будешь в рамках нашего форума первопроходцем 


Хм...чтож, роль первопроходца мне конечно льстит, хотя от этого наверное будет больше головной боли чем радости smile . Но по ходу по любому этим придется заниматься - шефы серьезно питают большие надежды на тесирование с Python'ом, даже наверное заставят программиста писавшего СОМ переписывать из IUnknown в IDispatch чтоб я мог ее тестировать  smile 

Если у когото будут вопросы по теме постараюсь помочь.
PM MAIL   Вверх
GoD
Дата 16.10.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



Цитата(albertn @  16.10.2006,  13:11 Найти цитируемый пост)
Нарыл ссылочки на английском языке, но не знаю, подойдут ли они или нет:


Спасибо за усилия... ссылки помотрел и подумал себе, что наверное в нете уже нету мест(смотрел на нескольких языках -слава богу с языками лады), где я не смотрел по этой теме материал.
Ниче... как я говорю в таки случаях - прорвемся!!!
PM MAIL   Вверх
pythonwin
Дата 17.10.2006, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



GoD, если напишешь и код покадешь, то спасибо я точно скажу!  smile
PM WWW GTalk Jabber   Вверх
GoD
Дата 17.10.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



Цитата(pythonwin @  17.10.2006,  07:30 Найти цитируемый пост)
GoD, если напишешь и код покадешь, то спасибо я точно скажу!  


  Чтож, готов поделиться опытом, постигнутым многодневным битьем головы в стенку(частично таки разбил, просунуть голову посмотреть что там можноsmile. Надеюсь комуто это поможет сэкономить недельку другую панического поика возможного решения проблемы в нете.
 Итак, я считаю, что наблюдаются 2 интересых момента в моем коде - это подключение к самому СОМ обьекту(напоминаю, пока по последним выводам он должен быть IDispatch) и другой интереснейший момент(о нем я совсем забыл упомянуть в силу поиска актуального ответа), так вот я имею ввиду работу с событиями в Python'e, а точнее с событиями которые приходят с сервера к которому я подключаюсь(события типа закрытия окна эксплоерера, вы наверное видели уже-это будет поинтереснее). Код с описанием(если есть конкретные вопросы задавайте) выложу завтра.
PM MAIL   Вверх
GoD
Дата 19.10.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



Как и обещал - код:

Код

#импорт модулей
import win32com.client.CLSIDToClass, pythoncom
import win32com.client.util
import win32event
import win32gui
import time
from pywintypes import IID
from win32com.client import Dispatch

defaultNamedOptArg=pythoncom.Empty
defaultNamedNotOptArg=pythoncom.Empty
defaultUnnamedArg=pythoncom.Empty
flag=flag2=flag3=flag4=0


#klass sobitii
class gammaEvents(win32com.client.getevents("gamma1.gamma1OLE")):
    def __init__(self, oobj = None):
        if oobj is None:
            self._olecp = None
        else:
            import win32com.server.util
            from win32com.server.policy import EventHandlerPolicy
            cpc=oobj._oleobj_.QueryInterface(pythoncom.IID_IConnectionPointContainer)
            print "cpc : ", cpc
            cp=cpc.FindConnectionPoint(self.CLSID_Sink)
            print "cp : ",cp
            cookie=cp.Advise(win32com.server.util.wrap(self, usePolicy=EventHandlerPolicy))
            print "cookie :", cookie
            self._olecp,self._olecp_cookie = cp,cookie

#functions definition            
    def __del__(self):
        try:
         self.close()
        except pythoncom.com_error:
         pass
        
    def close(self):
     if self._olecp is not None:
         cp,cookie,self._olecp,self._olecp_cookie = self._olecp,self._olecp_cookie,None,None
         cp.Unadvise(cookie)
         
    def _query_interface_(self, iid):
     import win32com.server.util
     if iid==self.CLSID_Sink: return win32com.server.util.wrap(self)

     # event pri avtorizacii
    def Ononauth(self, receive_id001=defaultNamedNotOptArg, o002=defaultNamedNotOptArg):
        global flag, authRes
        flag=1
        authRes = [receive_id001, o002]
        msg="onauth event raised!"
        print msg
        print authRes
        Logger(msg)
        if flag ==1: return authRes
# voob6e sobitii bol6e no vse ne budu opisivat - princip takoije


#funkciq logirovaniq v tekstovoi fail
def Logger(msg):
    infile=open("c:Log.txt","a")
    infile.write("--------------------------------\n")
    infile.write(msg)
    infile.write("\n")
    infile.close()

#funkciq avtorizacii
def Authorization():
    '''This funktion must raise Onauth event'''
    tr=0
    log = input("input login: ")
    pas = input("input password: ")
    n=tgamma.auth(None, log, pas, 0, 'demo')

    msg="authorization request is sent. waiting for event..."
    print msg
    Logger(msg)
    
    while not flag: 
        win32gui.PumpWaitingMessages() 
        print '...'
        tr=tr+1
        time.sleep(2)
        if tr == 10:
            msg = "No evet raised"
            Logger(msg)
            break
        pass
    if flag == 1:
        global res
        res = authRes
        return res

#funkciq vizova sync0() i polu4eniq vozvra6aemih parametrov
def SyncSes():
    tr=0
    tgamma.sync0()
    msg = "sync0 requested! waiting fot event..."
    print msg
    Logger(msg)

    while not flag2:
        win32gui.PumpWaitingMessages()
        print '...'
        tr=tr+1
        time.sleep(2)
        if tr == 10:
            msg = "No evet raised"
            Logger(msg)
            break
        pass
    if flag2 == 1:
        global synkres
        synkres = sync0Res
        return synkres

def GetInstr():
    #opisanie

    
def WaitQuote():
#    opisanie

def GetBar():
    #opisanie
        
#******************************************
#      Na4alo glavnoi programmi
#******************************************

tgamma = None
events = None

Logger('            --------------------\n            -New session begins-\n            --------------------')
win32com.client.gencache.EnsureModule('{81BD22A4-BC82-49D8-BE00-708F14314880}',0,1,1)

#Zaglushka()          #Dlq prednamerennoi ostanovki programmi

tgamma = win32com.client.Dispatch("gamma1.gamma1OLE")
events = gammaEvents(tgamma)



conn=tgamma.sconect(None,'143.241.51.41',6245)    #podklu4enie k serveru

#kontrolnoe povtorenie
#------------------------------------------
tgamma = None
events = None
tgamma = win32com.client.Dispatch("gamma1.gamma1OLE")
events = gammaEvents(tgamma)
conn=tgamma.sconect(None,'143.241.51.41',6245)
#------------------------------------------

if conn != 0:
    msg = "Didn't connected to server"
    print msg
    Logger(msg)

else:
    msg = "connected to server"
    print msg
    Logger(msg)

    re = Authorization()
    if flag == 1:
        if (re[0] == 1) and (re[1] == 0):
            synkres = SyncSes()
            inst = GetInstr()
        elif re[1] == 3:
            print "Session limit reached"
        elif re[1] == 2:
            print "Wrong password"
        else:
            pass





  Вот основная часть кода. Бубут вопросы спрашивайте.

Это сообщение отредактировал(а) GoD - 3.1.2007, 14:52
PM MAIL   Вверх
Cr@$h
Дата 20.10.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41




M
Cr@$h
Для вставки кодов Python используй подсветку синтаксиса из раскрывающегося списка Код в форме ответа.

PM MAIL ICQ   Вверх
pythonwin
Дата 21.10.2006, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



GoD, т.е это уже рабочий, нормальный код?
PM WWW GTalk Jabber   Вверх
GoD
Дата 24.10.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



Цитата(pythonwin @  21.10.2006,  10:10 Найти цитируемый пост)
GoD, т.е это уже рабочий, нормальный код?


  Практически да! Это и есть обещанный рабочий код(в целях безопасности конечно изменил пару параметров, убрал ненужное оптсание функций, но сути это не меняет). Я дошел до этого момента(уже немало), как пример для работы с СОМ обьектами вполне пригоден. Уверяю, вполне рабочий вариант(Первый час после этого прорыва, я безмолвно с благоговением сидел и наблюдал, как отлавливаются события, присылаемые с сервера:-).
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.