Beispiel #1
0
        protected override int OnUnmarshalParameter(int i, RpcMethodParameterCollection outParameters, IList <IDataType> outParameterTypes, byte[] buffer, int offset, ref object[] outValues)
        {
            ITcAdsDataType dataType = (ITcAdsDataType)outParameterTypes[i];
            object         obj2     = outValues[i];

            return(this.unmarshal(buffer, offset, dataType, out obj2));
        }
Beispiel #2
0
        protected override int OnMarshalParameter(int i, RpcMethodParameterCollection inParameters, IList <IDataType> inParameterTypes, object[] parameterValues, byte[] buffer, int offset)
        {
            ITcAdsDataType type       = (ITcAdsDataType)inParameterTypes[i];
            object         val        = parameterValues[i];
            AdsDatatypeId  dataTypeId = type.DataTypeId;
            int            num        = 0;

            if (PrimitiveTypeConverter.CanMarshal(type.Category))
            {
                byte[] data = null;
                PrimitiveTypeConverter.Marshal(dataTypeId, val, out data);
                num = copyHelper(buffer, offset, data);
            }
            else
            {
                if (type.Category != DataTypeCategory.String)
                {
                    throw new MarshalException($"Cannot marshal complex type '{type.Name}'");
                }
                int  length    = -1;
                bool isUnicode = false;
                DataTypeStringParser.TryParseString(type.Name, out length, out isUnicode);
                string             str       = (string)val;
                byte[]             source    = null;
                PlcStringConverter converter = isUnicode ? PlcStringConverter.UnicodeVariableLength : PlcStringConverter.DefaultVariableLength;
                if (converter.MarshalSize(str) > type.ByteSize)
                {
                    throw new MarshalException("String size mismatch");
                }
                source = converter.Marshal(str);
                num    = copyHelper(buffer, offset, source);
            }
            return(num);
        }
Beispiel #3
0
        internal RpcMethod(AdsMethodEntry entry)
        {
            if (entry == null)
            {
                throw new ArgumentNullException("entry");
            }
            this._name = entry.name;
            List <IRpcMethodParameter> coll = new List <IRpcMethodParameter>();

            if (entry.parameters != null)
            {
                for (int i = 0; i < entry.parameters.Length; i++)
                {
                    RpcMethodParameter item = new RpcMethodParameter(entry.parameters[i]);
                    coll.Add(item);
                }
            }
            this._parameters      = new RpcMethodParameterCollection(coll);
            this._returnAlignSize = (int)entry.returnAlignSize;
            this._returnTypeSize  = (int)entry.returnSize;
            this._returnType      = entry.returnType;
            this._vTableIndex     = (int)entry.vTableIndex;
            this._comment         = entry.comment;
        }