nachdem ich nach diversen Recherchen per Suchmaschine nicht weiterkomme, will ich es mal hier versuchen
Wie ich verstanden habe: wenn ich nun eine Funktion meines COM Servers aufrufen will, die eine "pass by reference" value hat, gibt die win32com Implementierung von Python ein Tupel zurück:
Code: Alles auswählen
long GeValue(LPCTSTR device, short Value)
Code: Alles auswählen
ret, value = GetValue("mein device")
Nun bekomme ich aber bei der Funktion, die ich bei "meinem" COM Server absprechen will, aber immer folgende Fehlermeldung
Code: Alles auswählen
self.__server = win32com.client.Dispatch(self.__AUTO_APPL)
def getValue(self,identifier,offset,size):
retVal=None
if self.__server:
result, answer=self.__server.GetValueBySymbol(identifier,offset,size)
retValue=answer
return retVal
result, answer=self.__server.GetValueBySymbol(symbol,offset,size)
File "<COMObject Auto.Application>", line 2, in GetValueBySymbol
pywintypes.com_error: (-2147352561, 'Parameter nicht optional.', None,
None)
Bediene ich diesen Parameter, gibt es eine andere Fehlermeldung
Code: Alles auswählen
def getValue(self,identifier,offset,size):
retVal=None
answer = [] # =None als Alternative gleich
if self.__server:
result, answer=self
.__server.GetValueBySymbol(identifier,offset,size,answer)
retValue=answer
return retVal
result, answer=self.__server.GetValueBySymbol(symbol,offset,size,answer)
File "<COMObject Auto.Application>", line 2, in GetValueBySymbol
pywintypes.com_error: (-2147352571, 'Typkonflikt.', None, 4)
Code: Alles auswählen
[id(2), helpstring("method GetValueBySymbol")] long GetValueBySymbol(BSTR szSymbol, short shOffset, short shLength, [out,retval] VARIANT* pValue);
Code: Alles auswählen
# Created by makepy.py version 0.4.95
def GetValueBySymbol(self, szSymbol=defaultNamedNotOptArg,shOffset=defaultNamedNotOptArg, shLength=defaultNamedNotOptArg,pValue=pythoncom.Missing):
"""method GetValueBySymbol"""
return self._ApplyTypes_(2, 1, (3, 0), ((8, 0), (2, 0), (2, 0),(16396, 10)), 'GetValueBySymbol', None,szSymbol, shOffset, shLength,pValue)
Code: Alles auswählen
sub AUTO_bGetValue {
my $self = shift;
my $symbol = shift;
my $offset = shift || 0;
my $length = shift || 1;
my $dataref = shift || undef;
my $response = Variant(VT_BYREF|VT_VARIANT, Variant(VT_BSTR, ""));
my $rc = 0;
&LIB_vLog("GetValue $symbol offset $offset length $length");
if ($self->{objApp}->GetValueBySymbol($symbol, $offset, $length,$response) == 0) {
$rc = 1;
&LIB_vLog("GotValue $response");
$$dataref = $response if (defined $dataref);
}
else {
&LIB_vLog("Failed (error while getting value!)");
}
return $rc;
}
irimi