W niektórych IDL, z którymi pracuję zauważyłem, że istnieją 2 konwencje do oznaczania wartości zwracanych w metodach - [in, out]
i [out, retval]
.Różnice między [w, out] i [out, retval] w definicjach COM IDL
Wydaje się, że [in, out]
stosowany jest, gdy istnieje wiele wartości powrotnymi, na przykład:
HRESULT MyMethod(
[in] long InputParam,
[in, out] long* OutputParam1,
[in, out] long* OutputParam2
);
Wydaje się, że [out, retval]
stosuje się, gdy występuje tylko jedna wartość powrotna, na przykład:
HRESULT MyMethod2(
[in] long InputParam,
[out, retval] long* OutputParam1
);
Czy jest to konwencja COM IDL, czy tylko konwencja w kodzie, z którym pracuję?
Czy istnieje różnica funkcjonalna w kodzie, która zostanie wygenerowana z 2 notacji, czy też są one całkowicie zamienne?
Dzięki za przydatne wyjaśnienie. – LeopardSkinPillBoxHat
Chciałbym dodać, że '[in, out]' może nie być obsługiwane poprawnie przez wszystkie języki (dokładniej, old-school Visual Basic, nie wiem o .NET). –
Zastanawiam się, czy [out, retval] jest niezgodne z najlepszą praktyką w celu zdefiniowania interfejsów COM, ponieważ nie ma sposobu na uzyskanie kodu błędu (HRESULT), jeśli wykonanie nie powiedzie się? – dave