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); } }
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); } }
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); }