2011-01-11 2 views
1

Я экспериментирую с comtypes и ArcObjects под Python 2.6.5 и ArcGIS 10 SP1. Я использую чистый метод Python для обтекания OLB ArcObjects, описанных в this answer, но получая ошибку в методе comtypes.CoCreateInstance.Python, comtypes и ArcObjects: Ошибка при создании объекта AppROT

Вот код, я бегу:

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!" 

А вот выход из сценария:

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!

Спасибо за любые идеи вы могли бы иметь!

ответ

1

Для полноты this solution был размещен Джейсон Scheirer над на ГИС Stack бирже:

Импорт arcpy первых, вы не делаете каких-либо лицензий или проверку Наладка ArcObjects 10.0 выполнения как есть, так это не найдет CoClass.

Смежные вопросы