gpt4 book ai didi

c# - IntPtr.ToInt32() Marshal.ThrowExceptionForHR() - 查询 GAC

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:07 25 4
gpt4 key购买 nike

我一直在使用我在网上找到的一些代码来使用 fusion.dll 查询 GAC,但是我最近收到了一些错误报告,提示 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;
}

有问题的代码是当它试图将 IntPtr 转换为 Int32 而实际上它是 Int64 时,但问题是 Marshal.ThrowExceptionForHR 只接受 Int32 所以我有点不知所措。目前我只是在处理异常,但我想知道正确的处理方法是什么?

马龙

最佳答案

检查 DllImport 上的 CreateAssemblyCache 签名。看起来应该是int,而不是IntPtr

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

关于c# - IntPtr.ToInt32() Marshal.ThrowExceptionForHR() - 查询 GAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4400978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com