private unsafe static Guid GetGuidForTypeInfo(ITypeInfo typeInfo, uint[] versions)
        {
            TYPEATTR *pTypeAttr = null;
            HRESULT   hr        = typeInfo.GetTypeAttr(&pTypeAttr);

            if (!hr.Succeeded())
            {
                throw new ExternalException(string.Format(SR.TYPEINFOPROCESSORGetTypeAttrFailed, hr), (int)hr);
            }

            try
            {
                if (versions is not null)
                {
                    versions[0] = pTypeAttr->wMajorVerNum;
                    versions[1] = pTypeAttr->wMinorVerNum;
                }

                return(pTypeAttr->guid);
            }
            finally
            {
                typeInfo.ReleaseTypeAttr(pTypeAttr);
            }
        }
Beispiel #2
0
        private void InitTypeAttr()
        {
            TYPEATTR *typeAttr = null;

            try
            {
                typeInfo.GetTypeAttr(out typeAttr);
                this.typeAttr = *typeAttr;
            }
            finally
            {
                if (typeAttr != null)
                {
                    typeInfo.ReleaseTypeAttr(typeAttr);
                }
            }
        }
        public unsafe void ITypeInfo_GetTypeAttr_Invoke_Success()
        {
            using var image = new Bitmap(16, 32);
            IPictureDisp picture  = MockAxHost.GetIPictureDispFromPicture(image);
            IDispatch    dispatch = (IDispatch)picture;
            ITypeInfo    typeInfo;
            HRESULT      hr = dispatch.GetTypeInfo(0, Kernel32.GetThreadLocale(), out typeInfo);

            using var typeInfoReleaser = new ComRefReleaser(typeInfo);
            Assert.Equal(HRESULT.S_OK, hr);

            TYPEATTR *pTypeAttr = null;

            try
            {
                hr = typeInfo.GetTypeAttr(&pTypeAttr);
                Assert.Equal(HRESULT.S_OK, hr);
                Assert.Equal(typeof(IPictureDisp).GUID, pTypeAttr->guid);
                Assert.Equal(0u, pTypeAttr->lcid);
                Assert.Equal(0u, pTypeAttr->dwReserved);
                Assert.Equal(DispatchID.UNKNOWN, pTypeAttr->memidConstructor);
                Assert.Equal(DispatchID.UNKNOWN, pTypeAttr->memidDestructor);
                Assert.Equal(IntPtr.Zero, pTypeAttr->lpstrSchema);
                Assert.Equal((uint)IntPtr.Size, pTypeAttr->cbSizeInstance);
                Assert.Equal(TYPEKIND.DISPATCH, pTypeAttr->typekind);
                Assert.Equal(1, pTypeAttr->cFuncs);
                Assert.Equal(5, pTypeAttr->cVars);
                Assert.Equal(1, pTypeAttr->cImplTypes);
                Assert.Equal(7 * IntPtr.Size, pTypeAttr->cbSizeVft);
                Assert.Equal((ushort)IntPtr.Size, pTypeAttr->cbAlignment);
                Assert.Equal(0x1000, pTypeAttr->wTypeFlags);
                Assert.Equal(0, pTypeAttr->wMajorVerNum);
                Assert.Equal(0, pTypeAttr->wMinorVerNum);
                Assert.Equal(VARENUM.EMPTY, pTypeAttr->tdescAlias.vt);
                Assert.Equal(IntPtr.Zero, pTypeAttr->idldescType.dwReserved);
                Assert.Equal(IDLFLAG.NONE, pTypeAttr->idldescType.wIDLFlags);
            }
            finally
            {
                typeInfo.ReleaseTypeAttr(pTypeAttr);
            }
        }
Beispiel #4
0
 public void ReleaseTypeAttr(TYPEATTR *pTypeAttr)
 {
     ((delegate * unmanaged <ITypeInfo *, TYPEATTR *, void>)(lpVtbl[19]))((ITypeInfo *)Unsafe.AsPointer(ref this), pTypeAttr);
 }
 public void ReleaseTypeAttr([NativeTypeName("TYPEATTR *")] TYPEATTR *pTypeAttr)
 {
     ((delegate * stdcall <ITypeInfo *, TYPEATTR *, void>)(lpVtbl[19]))((ITypeInfo *)Unsafe.AsPointer(ref this), pTypeAttr);
 }