Estoy experimentando con comtypes
y ArcObjects bajo Python 2.6.5 y ArcGIS 10 SP1. Estoy usando el método de Python puro para envolver los OLBs de ArcObjects descritos en esta respuesta pero se produce un error en el comtypes.CoCreateInstance
método.
Este es el código que estoy ejecutando:
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!"
Y aquí está la salida del script:
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!
Gracias por cualquier idea que pueda tener.