ReleaseScriptObject() public static method

public static ReleaseScriptObject ( IntPtr ptr, int tid ) : void
ptr System.IntPtr
tid int
return void
コード例 #1
0
ファイル: ScriptContext.cs プロジェクト: 2cwldys/fodev-tools
        public object GetResult(int ret_tid)
        {
            if (ret_tid == (int)asETypeIdFlags.asTYPEID_VOID)
            {
                return(null); // ?
            }
            if (ret_tid == (int)asETypeIdFlags.asTYPEID_BOOL)
            {
                return(GetReturnByte() != 0);
            }
            if (ret_tid == (int)asETypeIdFlags.asTYPEID_INT8 || ret_tid == (int)asETypeIdFlags.asTYPEID_UINT8)
            {
                return(GetReturnByte());
            }
            if (ret_tid == (int)asETypeIdFlags.asTYPEID_INT16 || ret_tid == (int)asETypeIdFlags.asTYPEID_UINT16)
            {
                return(GetReturnWord());
            }
            if (ret_tid == (int)asETypeIdFlags.asTYPEID_INT32 || ret_tid == (int)asETypeIdFlags.asTYPEID_UINT32)
            {
                return(GetReturnDWord());
            }
            if (ret_tid == (int)asETypeIdFlags.asTYPEID_INT64 || ret_tid == (int)asETypeIdFlags.asTYPEID_UINT64)
            {
                return(GetReturnQWord());
            }
            if (ret_tid == (int)asETypeIdFlags.asTYPEID_FLOAT)
            {
                return(GetReturnFloat());
            }
            if (ret_tid == (int)asETypeIdFlags.asTYPEID_DOUBLE)
            {
                return(GetReturnDouble());
            }
            // try some predefined types we can handle using our 'static' counterparts
            IntPtr ptr;

            if ((ret_tid & (int)asETypeIdFlags.asTYPEID_OBJHANDLE) != 0)
            {
                ptr = GetReturnObject();
            }
            else
            {
                ptr = GetReturnAddress();
            }
            if (ptr == IntPtr.Zero)
            {
                return(null);
            }
            try
            {
                var obj = ScriptObjectType.Instantiate(ptr, ret_tid);
                if (obj != null)
                {
                    return(obj);
                }
                else
                {
                    // just handle it dynamically
                    return(new ScriptObject(ptr, ScriptEngine.GetObjectTypeById(ret_tid)));
                }
            }
            finally
            {
                if ((ret_tid & (int)asETypeIdFlags.asTYPEID_OBJHANDLE) != 0)
                {
                    // decrease refcounter, we want only newly created wrapper to hold reference
                    ScriptEngine.ReleaseScriptObject(ptr, ret_tid);
                } // otherwise, it's reference
            }
        }
コード例 #2
0
 public void Release()
 {
     ScriptEngine.ReleaseScriptObject(this, objectType.TypeId);
 }