Vra

Ek het al met behulp van 'n paar kode Ek het gevind op die net om die GAC navraag met behulp van die fusion.dll maar ek het onlangs om 'n paar fout terugvoer kla van 'n OverflowException.

    // If assemblyName is not fully qualified, a random matching may be returned!!!!
    public static String QueryAssemblyInfo(String assemblyName)
    {
        ASSEMBLY_INFO assembyInfo = new ASSEMBLY_INFO();
        assembyInfo.cchBuf = 512;
        assembyInfo.currentAssemblyPath = new String('\0',
        assembyInfo.cchBuf);
        IAssemblyCache assemblyCache = null;
        // Get IAssemblyCache pointer
        IntPtr hr = GacApi.CreateAssemblyCache(out assemblyCache, 0);
        if (hr == IntPtr.Zero)
        {
            hr = assemblyCache.QueryAssemblyInfo(1, assemblyName, ref assembyInfo);
            if (hr != IntPtr.Zero)
                Marshal.ThrowExceptionForHR(hr.ToInt32());
        }
        else
            Marshal.ThrowExceptionForHR(hr.ToInt32());
        return assembyInfo.currentAssemblyPath;
    }

Die oortredende kode is wanneer sy probeer om die IntPtr te skakel na 'n int32 toe sy eintlik 'n Int64, maar die probleem is die Marshal.ThrowExceptionForHR net aanvaar 'n int32 so ek is 'n bietjie vas vir wat om te doen. Op die oomblik is ek net die hantering van die uitsondering, maar ek wil graag weet wat is die regte manier om dit te doen?

Marlon

Was dit nuttig?

Oplossing

Gaan die handtekening op jou DllImport vir CreateAssemblyCache. Dit lyk asof dit int moet wees, nie IntPtr

[DllImport("fusion.dll")]
internal static extern int CreateAssemblyCache(
    out IAssemblyCache ppAsmCache, int reserved);

Ander wenke

Hoekom gebruik jy 'n IntPtr om die waarde van 'n HRESULT hou? Die grootte van 'n HRESULT is nie platform afhanklik is, is dit altyd 32 stukkies, sodat jy óf int of uint moet gebruik om die waarde te hou. Verander die kode na een van hierdie plaas gebruik, en die probleem sal weggaan.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top