私は、Comオブジェクトを制御するPythonスクリプトを作成しています。公式ドキュメントは、C#である次のように、VBとC (VBで)ドキュメントは次のとおりです。PythonのCOMオブジェクトに引数を渡します。
Public Function GetDATA {
ByVal vecRecords() As DATAType,
ByRef Time As String,
optional ByVal filter1 As String,
optional ByVal kind2 As Kind = KindAll,
optional ByVal type1 As Types = TypeAll
) As Long
私の知る限り、第一引数には、戻り値であり、Pythonで通常通りに返されます。最後の3つの引数は列挙型(数値に変換されます)ですが、いずれの場合でもオプションです。 "ByRef Time As String"でどのような引数を渡すのですか?
私のコードは次のとおりです。
>>> from win32com.client import Dispatch
>>> Obj = Dispatch("Service.Foo")
>>> Obj.Function()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\site-packages\win32com\gen_py\48C77DB1-D9E0-45B8-9992-C9
2B047CC700x0x1x0.py", line 399, in Function
, LastTime, BNO, kind, madadType)
File "D:\Python27\lib\site-packages\win32com\client\__init__.py", line 456, in
_ApplyTypes_
self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
pywintypes.com_error: (-2147023170, 'The remote procedure call failed.', None, None)
私も走っ:
>>> Obj.Function()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\site-packages\win32com\gen_py\48C77DB1-D9E0-45B8-9992-C9
2B047CC700x0x1x0.py", line 399, in Function
, LastTime, BNO, kind, madadType)
File "D:\Python27\lib\site-packages\win32com\client\__init__.py", line 456, in
_ApplyTypes_
self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
TypeError: Objects for SAFEARRAYS must be sequences (of sequences), or a bufferobject.
と:
>>> a= ("00000000","00000000",-1,-1)
>>> Obj.Function(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\site-packages\win32com\gen_py\48C77DB1-D9E0-45B8-9992-C9
2B047CC700x0x1x0.py", line 399, in Function
, LastTime, BNO, kind, madadType)
File "D:\Python27\lib\site-packages\win32com\client\__init__.py", line 456, in
_ApplyTypes_
self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
MemoryError: CreatingSafeArray
をretvalueが大きすぎないので、私は本当に最後のを理解していません1。
システム: windows 7 64bit。 python 2.7.2 32ビット(cmdから実行して、管理者として起動しました.COMオブジェクトに必要です)
機能が何を求めているかを簡単に調べる方法はありますか?
ありがとうございます Marbs。
[編集] は、私はあなたに取り組んでC#コードスニペットを与える:Obj.type1とObj.type2が列挙されている
System.Array tempArray;
string lTime = "00000000";
Res = Obj.getDATA(out tempArray, ref lTime, "0", Obj.type1, Obj.type2);
がobjのその自己を形成します。両方とも-1(int)に変換されます。
comブラウザ(「python_inst \ Lib \ site-packages \ win32com \ client'ディレクトリに通常あるcombrowse.py」)で「ServiceFoo」を探索してみてください。 –
@barti_ddu、火格子のチップありがとう。引数が "Pointer SafeArray User Defined(Flags = 2)"(つまり、フラグが "1"に等しくない)のような場所であれば問題はあります。何か案は? – user850498
imho、それはSafeArrayコンストラクタが2つの引数を取るように見えます。 emtyリストを作成し、Obj.Function()の最初の引数として渡してみましたか? –