3

comtypesモジュールを使用して、ArcGIS10.1 に同梱されている .olb ファイルにアクセスしようとしています。.olb ファイルには、機能するもの (esriGeometry.olb) と機能しないもの (esriSystem.olb) があり、時々機能するもの (esriSearch.olb) もあります。

次のコード

from comtypes.client import GetModule
olb_path = 'C:\\Program Files (x86)\\ArcGIS\\Desktop10.1\\com\\esriSystem.olb'
m = GetModule(path)

このトレースバックと例外を発生させます

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    test3()
  File "D:\Data\MatthewPlourde\JAMES\gis_tools\tool.py", line 139, in test3
    m = GetModule(path)
  File "C:\Python27\ArcGIS10.1\lib\site-packages\comtypes\client\_generate.py", line 112, in GetModule
    mod = _CreateWrapper(tlib, pathname)
  File "C:\Python27\ArcGIS10.1\lib\site-packages\comtypes\client\_generate.py", line 188, in _CreateWrapper
    mod = _my_import(fullname)
  File "C:\Python27\ArcGIS10.1\lib\site-packages\comtypes\client\_generate.py", line 26, in _my_import
    return __import__(fullname, globals(), locals(), ['DUMMY'])
  File "C:\Python27\ArcGIS10.1\lib\site-packages\comtypes\gen\_5E1F7BC3_67C5_4AEE_8EC6_C4B73AAC42ED_0_10_1.py", line 5705, in <module>
    ( ['in'], POINTER(_midlSAFEARRAY(POINTER(BSTR))), 'pParameters' ),
  File "C:\Python27\ArcGIS10.1\lib\site-packages\comtypes\safearray.py", line 18, in _midlSAFEARRAY
    sa_type = _make_safearray_type(itemtype)
  File "C:\Python27\ArcGIS10.1\lib\site-packages\comtypes\safearray.py", line 53, in _make_safearray_type
    raise TypeError(itemtype)
TypeError: <class 'comtypes.errorinfo.LP_BSTR'>

どうやらcomtypes.safearray._make_safearray_typeどうしたらいいのかわからないらしい<class 'comtypes.errorinfo.LP_BSTR'>。ArcGIS10.1 を使用している方がいらっしゃいましたら、このエラーを再現できるかどうかをお知らせいただければ幸いです。また、原因がわかっている場合は特に感謝いたします。

4

2 に答える 2

4

ArcGIS フォーラムに投稿された解決策を見つけました。comtypesソースを変更するだけautomation.pyです。エントリをディクショナリに追加します。POINTER(BSTR): VT_BYREF|VT_BSTR_ctype_to_vartype

この後、すべての.olbのロード。

于 2013-07-17T13:57:49.863 に答える
0

私もこの正確なエラーを抱えており、それを乗り越えることができません。何が起こるかがわかったら、これを更新してください。私が見つけた唯一のことは、32ビットと64ビットのライブラリが混在している可能性があるということです。(また、あなたの質問への返信をどこに送ればよいかわかりません...回答のみです。私はstackexchangeをあまり使用しません)

あなたに役立つかもしれない何かを追加させてください。いくつかの問題

import logging
# grab rootlogger
_loggy = logging.getLogger()
_loggy.setLevel(logging.DEBUG)
_loggy.addHandler(logging.FileHandler("derpdebug.log"))
import os
import comtypes.client
# change com_dir to whatever it is for you
com_dir = r'C:\Program Files (x86)\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)
# check add whatever you want here.
import comtypes.gen.esriArcMapUI
import comtypes.gen.esriGeodatabase

print dir(comtypes.gen.esriArcMapUI)

それから私はちょうどやった: grep -v ^Release derpdebug.log >readable.log

于 2013-07-16T22:32:16.737 に答える