2011-01-11 30 views
1

comtypesとArcObjectsをPython 2.6.5およびArcGIS 10 SP1で試しています。私はthis answerに記述されているArcObjects OLBをラップするのに純粋なPythonメソッドを使用していますが、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がGISスタック所にジェイソンScheirerによりオーバー投稿されました:

インポートarcpyまず、あなたが任意のライセンスのチェックアウトをしているかのように、である、それはそうArcObjectsの10.0ランタイムを設定されていませんCoClassが見つかりません。

関連する問題