win32com-Problem auf win 64bit

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ThomasRademacher
User
Beiträge: 2
Registriert: Dienstag 20. November 2012, 17:02

Hallo,

Ich habe auf meinem Windows Server 2003, Standard x64 Edition ein 64 bit Python 2.7 (python-2.7.3.amd64.msi) mit einer 64 bit win32-Extension (pywin32-218.win-amd64-py2.7.exe) installiert.
Die Anwedung, die ich ansteuern möchte ist SolidWorks 2012 x64 Edition.
Folgende Dateien habe ich generiert:
C:\Python27\Lib\site-packages\win32com\client\makepy.py "D:\Program Files\SolidWorks Corp\SolidWorks\sldworks.tlb": 83A33D31-27C5-11CE-BFD4-00400513BB57x0x20x0.py
und
C:\Python27\Lib\site-packages\win32com\client\makepy.py "D:\Program Files\SolidWorks Corp\SolidWorks\swconst.tlb": 4687F359-55D0-4CD3-B6CF-2EB42C11F989x0x20x0.py

Der folgende Code funktioniert auf einer 32 bit Windowes XP Maschine mite einem Python 2.4 (32bit) und einer 32 bit win32-Extension.
Aber auf meinem 64 bit server bekomme ich eine Exception ("SldWorks.Application.InvokeTypes") beim Aufruf der ExitApp()-Methode. Bei jeder anderen Methode auch, ich habe die ExitApp() der einfachheithalber gewählt.

Weiss einer um die Ursache für diesen Fehler und wie man diesen beheben kann?
Vielen Dank für Eure Tips schon mal vorab, Thomas

Code: Alles auswählen

try:
    
        pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED)
        
        sldworks = gencache.EnsureModule('{83A33D31-27C5-11CE-BFD4-00400513BB57}', 0x0, 20, 0) 
        print "sldworks = " + str(sldworks)       
        swconst = gencache.EnsureModule('{4687F359-55D0-4CD3-B6CF-2EB42C11F989}', 0x0, 20, 0) 
        print "swconst = " + str(swconst)   
          
        
        sw = sldworks.ISldWorks(DispatchEx('SldWorks.Application'))  
        print "sw = " + str(sw)   
          
        sw.ExitApp() 
                                             
    except Exception, value:        
        print "Exception occured, value = ", value


Hier die prints:

Code: Alles auswählen

sldworks = <module 'win32com.gen_py.83A33D31-27C5-11CE-BFD4-00400513BB57x0x20x0' from 'C:\Python27\lib\site-packages\win32com\gen_py\83A33D31-27C5-11CE-BFD4-00400513BB57x0x20x0.pyc'>        
swconst = <module 'win32com.gen_py.4687F359-55D0-4CD3-B6CF-2EB42C11F989x0x20x0' from 'C:\Python27\lib\site-packages\win32com\gen_py\4687F359-55D0-4CD3-B6CF-2EB42C11F989x0x20x0.pyc'>        
sw = <win32com.gen_py.SldWorks 2012 Type Library.ISldWorks instance at 0x82548360>     
Exception occured, value = SldWorks.Application.InvokeTypes 
ThomasRademacher
User
Beiträge: 2
Registriert: Dienstag 20. November 2012, 17:02

Mit

Code: Alles auswählen

sw = win32com.client.Dispatch("SldWorks.Application")
anstatt

Code: Alles auswählen

sw = sldworks.ISldWorks(DispatchEx('SldWorks.Application'))
und
mit Python 2.4 32bit mit win32-Extension 32bit
funktionierts.

Gruss Thomas
Antworten