private void GetPropertyItemIds(string itemId, DaProperty[] properties)
{
string methodName = "IOPCItemProperties.LookupItemIDs";
int count = properties.Length;
// get list of ids to request.
int[] propertyIds = new int[count];
for (int ii = 0; ii < propertyIds.Length; ii++)
{
propertyIds[ii] = properties[ii].PropertyId;
}
// request the item ids.
IntPtr pItemIds = IntPtr.Zero;
IntPtr pErrors = IntPtr.Zero;
try
{
IOPCItemProperties server = BeginComCall<IOPCItemProperties>(methodName, true);
server.LookupItemIDs(
itemId,
count,
propertyIds,
out pItemIds,
out pErrors);
}
catch (Exception e)
{
if (ComUtils.IsUnknownError(e, ResultIds.E_FAIL, ResultIds.E_UNKNOWNITEMID, ResultIds.E_INVALIDITEMID))
{
ComUtils.TraceComError(e, methodName);
}
return;
}
finally
{
EndComCall(methodName);
}
// unmarshal results.
string[] itemIds = ComUtils.GetUnicodeStrings(ref pItemIds, count, true);
int[] errors = ComUtils.GetInt32s(ref pErrors, count, true);
// update the objects.
for (int ii = 0; ii < count; ii++)
{
if (errors[ii] >= 0)
{
properties[ii].ItemId = itemIds[ii];
}
else
{
properties[ii].ItemId = null;
}
}
}