• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            <2006年10月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統計

            • 隨筆 - 44
            • 文章 - 0
            • 評論 - 86
            • 引用 - 0

            常用鏈接

            留言簿(6)

            隨筆分類(31)

            隨筆檔案(44)

            Mining

            最新隨筆

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            使用 python 寫 COM
            Python 支持Com調用(client com) 以及撰寫COM 組件(server com).
            1. com 調用示例(使用Windows Media Player 播放音樂)
            from win32com.client import Dispatch
            mp 
            = Dispatch("WMPlayer.OCX")
            tune 
            = mp.newMedia("C:/WINDOWS/system32/oobe/images/title.wma")
            mp.currentPlaylist.appendItem(tune)
            mp.controls.play()

            2. com server 的編寫
            主要可以參考 <<Python Programming on Win32 之 Chapter 12 Advanced Python and COM http://oreilly.com/catalog/pythonwin32/chapter/ch12.html >>
            示例(分割字符串)
            - 代碼
            class PythonUtilities:
                _public_methods_ 
            = [ 'SplitString' ]
                _reg_progid_ 
            = "PythonDemos.Utilities"
                
            # NEVER copy the following ID 
                # Use "print pythoncom.CreateGuid()" to make a new one.
                _reg_clsid_ = "{41E24E95-D45A-11D2-852C-204C4F4F5020}"
                
                
            def SplitString(self, val, item=None):
                    
            import string
                    
            if item != None: item = str(item)
                    
            return string.split(str(val), item)
             
            # Add code so that when this script is run by
            #
             Python.exe, it self-registers.
            if __name__=='__main__':
                
            print "Registering COM server"
                
            import win32com.server.register
                win32com.server.register.UseCommandLine(PythonUtilities)

            - 注冊/注銷Com

            Command-Line Option

            Description

             

            The default is to register the COM objects.

            --unregister

            Unregisters the objects. This removes all references to the objects from the Windows registry.

            --debug

            Registers the COM servers in debug mode. We discuss debugging COM servers later in this chapter.

            --quiet

            Register (or unregister) the object quietly (i.e., don't report success).


            - 使用COM
            可以在python 命令行下運行
            >>> import win32com.client
            >>> s = win32com.client.Dispatch("PythonDemos.Utilities")
            >>> s.SplitString("a,b,c"",")
            ((u
            'a', u'a,b,c'),)
            >>>

            3. python server com 原理
            其實在注冊表中查找到python com 的實現內幕
            Windows Registry Editor Version 5.00

            [HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}]
            @
            ="PythonDemos.Utilities"

            [HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\Debugging]
            @
            ="0"

            [HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\Implemented Categories]

            [HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}]

            [HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\InprocServer32]
            @
            ="pythoncom25.dll"
            "ThreadingModel"="both"

            [HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\LocalServer32]
            @
            ="D:\\usr\\Python\\pythonw.exe \"D:\\usr\\Python\\lib\\site-packages\\win32com\\server\\localserver.py\" {41E24E95-D45A-11D2-852C-204C4F4F5020}"

            [HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\ProgID]
            @
            ="PythonDemos.Utilities"

            [HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\PythonCOM]
            @
            ="PythonDemos.PythonUtilities"

            [HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\PythonCOMPath]
            @
            ="D:\\"

            inproc server 是通過pythoncom25.dll 實現
            local server 通過localserver.py 實現
            com 對應的python 源文件信息在 PythonCOMPath & PythonCOM

            4. 使用問題
            用PHP 或者 c 調用com 的時候
            <?php
            $com = new COM("PythonDemos.Utilities");
            $rs = $com->SplitString("a b c");
            foreach($rs as $r)
                
            echo $r."\n";
            ?>
            會碰到下面的一些錯誤.
            pythoncom error: PythonCOM Server - The 'win32com.server.policy' module could not be loaded.
            <type 'exceptions.ImportError'>: No module named server.policy pythoncom error: CPyFactory::CreateInstance failed to create instance. (80004005)


            可以通過2種方式解決:
            a. 設置環境 PYTHONHOME = D:\usr\Python
            另外在c ++ 使用python 的時候, 如果import module 出現錯誤 'import site' failed; use -v for traceback 的話, 也可以通過設置這個變量解決.

            b. 為com 生產exe, dll 可執行文件, setup.py 代碼如下 :
            from distutils.core import setup 
            import py2exe 

            import sys 
            import shutil 

            # Remove the build tree ALWAYS do that! 
            shutil.rmtree("build", ignore_errors=True) 

            # List of modules to exclude from the executable 
            excludes = ["pywin""pywin.debugger""pywin.debugger.dbgcon""pywin.dialogs""pywin.dialogs.list"

            # List of modules to include in the executable 
            includes = ["win32com.server"

            # ModuleFinder can't handle runtime changes to __path__, but win32com uses them 
            try
                
            # if this doesn't work, try import modulefinder 
                import py2exe.mf as modulefinder 
                
            import win32com 
                
                
            for p in win32com.__path__[1:]: 
                    modulefinder.AddPackagePath(
            "win32com", p) 
                
                
            for extra in ["win32com.shell""win32com.server"]: #,"win32com.mapi" 
                    __import__(extra) 
                    m 
            = sys.modules[extra] 
                    
            for p in m.__path__[1:]: 
                        modulefinder.AddPackagePath(extra, p) 

            except ImportError: 
                
            # no build path setup, no worries. 
                pass 

            # Set up py2exe with all the options 
            setup( 
                options 
            = {"py2exe": {"compressed"2
                                      
            "optimize"2
                                      
            #"bundle_files": 1, 
                                      "dist_dir""COMDist"
                                      
            "excludes": excludes, 
                                      
            "includes": includes}}, 
                
            # The lib directory contains everything except the executables and the python dll. 
                # Can include a subdirectory name. 
                zipfile = None, 
                com_server 
            = ['PythonDemos'], # 文件名!!
                ) 


            ref:
            http://oreilly.com/catalog/pythonwin32/chapter/ch12.html 
            http://blog.donews.com/limodou/archive/2005/09/02/537571.aspx 

            posted on 2008-08-14 17:02 泡泡牛 閱讀(6114) 評論(0)  編輯 收藏 引用 所屬分類: Python

            大香网伊人久久综合网2020| 欧美激情一区二区久久久| 精品无码久久久久久午夜| www.久久热.com| 狠狠精品干练久久久无码中文字幕| 久久青青草原精品国产软件 | 久久AV高潮AV无码AV| 亚洲中文字幕无码久久2017| 精品久久8x国产免费观看| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 久久久女人与动物群交毛片| 国产成人香蕉久久久久| 热re99久久6国产精品免费| 久久久久亚洲AV无码专区网站| 久久99久久99精品免视看动漫| www亚洲欲色成人久久精品| 亚洲国产精品无码久久久秋霞2 | 亚洲AV无码成人网站久久精品大| 天天久久狠狠色综合| 久久人人爽人人人人爽AV| 久久中文娱乐网| 色综合久久久久久久久五月| 色悠久久久久久久综合网| 88久久精品无码一区二区毛片 | 久久精品成人免费看| 久久精品国产亚洲αv忘忧草 | 热re99久久6国产精品免费| 一日本道伊人久久综合影| 99久久精品免费国产大片| 久久国产精品99精品国产| 亚洲国产美女精品久久久久∴ | 久久精品国产久精国产思思| 久久久久久免费视频| 人人狠狠综合久久亚洲高清| 国产高清美女一级a毛片久久w | 99久久免费国产精品| 国产一久久香蕉国产线看观看| 国内精品久久久久影院日本| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 久久久亚洲裙底偷窥综合| 四虎久久影院|