저는 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
지금까지 내가 말할 수있는, 제 1 인수는 반환 값이며, 파이썬에서 정상으로 반환됩니다
. 마지막 세 인수는 숫자로 변환 된 열거 형이지만 어떤 경우에도 선택 사항입니다. "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가 너무 크지도 않고, 그래서 난 정말 마지막을 이해하지 못하는 하나.
시스템 : 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()의 첫 번째 인수로 전달한 적이 있습니까? –