2011-01-11 5 views
1

Ich experimentiere mit comtypes und ArcObjects unter Python 2.6.5 und ArcGIS 10 SP1. Ich verwende die reine Python-Methode, um die in this answer beschriebenen ArcObjects-OLBs zu umbrechen, bekomme aber einen Fehler in der comtypes.CoCreateInstance-Methode. HierPython, Comtypen und ArcObjects: Fehler beim Erstellen von AppROT-Objekt

ist der Code bei mir läuft:

def WrapModules(): 
    #force wrapping of all ArcObjects libraries (OLBs) 
    import os 
    import comtypes.client 
    # change com_dir to whatever it is for you 
    com_dir = r'C:\Program Files\ArcGIS\Desktop10.0\com' 
    coms = [os.path.join(com_dir, x) for x in os.listdir(com_dir) if os.path.splitext(x)[1].upper() == '.OLB'] 
    map(comtypes.client.GetModule, coms) 

def GetApp(): 
    """Get a hook into the current session of ArcMap""" 
    from comtypes.gen import esriFramework 
    pAppROT = NewObj(esriFramework.AppROT, esriFramework.IAppROT) 
    if pAppROT is not None: 
     iCount = pAppROT.Count 
     if iCount == 0: 
      print 'No ArcGIS application currently running. Terminating ...' 
      return None 
     for i in range(iCount): 
      pApp = pAppROT.Item(i) #returns IApplication on AppRef 
      if pApp.Name == 'ArcMap': 
       print "ArcMap found" 
       return pApp 
     print 'No ArcMap session is running at this time.' 
    print "No AppROT found" 
    return None 

def NewObj(MyClass, MyInterface): 
    """Creates a new comtypes POINTER object where\n\ 
    MyClass is the class to be instantiated,\n\ 
    MyInterface is the interface to be assigned""" 
    from comtypes.client import CreateObject 
    import traceback 
    try: 
     ptr = CreateObject(MyClass, interface=MyInterface) 
     return ptr 
    except: 
     print traceback.format_exc() 
     return None 

if __name__ == "__main__": 
    WrapModules() 
    pApp = GetApp() 
    if pApp is not None: 
     print "HWND: %d" % pApp.hWnd 
    else: 
     print "No ArcGIS application found!" 

Und hier ist die Ausgabe des Skripts:

Traceback (most recent call last): 
    File "C:\temp\ComHelpers.py", line 35, in NewObj 
    ptr = CreateObject(MyClass, interface=MyInterface) 
    File "C:\Python26\ArcGIS10.0\lib\site-packages\comtypes\client\__init__.py", line 235, in CreateObject 
    obj = comtypes.CoCreateInstance(clsid, clsctx=clsctx, interface=interface) 
    File "C:\Python26\ArcGIS10.0\lib\site-packages\comtypes\__init__.py", line 1145, in CoCreateInstance 
    _ole32.CoCreateInstance(byref(clsid), punkouter, clsctx, byref(iid), byref(p)) 
    File "_ctypes/callproc.c", line 925, in GetResult 
WindowsError: [Error -2147221231] ClassFactory cannot supply requested class 

No AppROT found 
No ArcGIS application found!

Dank für irgendwelche Erkenntnisse, die Sie haben könnten!

Antwort

1

Zur Vollständigkeit this solution wurde von Jason Scheirer über auf dem GIS-Stack-Exchange-posted:

Import ArcPy zunächst keine Lizenzierung Kasse tun oder die ArcObjects 10.0 Laufzeit der Einrichtung, wie sie ist es so finde die CoClass nicht.

Verwandte Themen