Я использовал код, который я нашел в сети, чтобы запросить GAC с помощью файла fusion.dll, однако я недавно получил несколько ошибок сообщает о жалобах на исключение OverflowException.IntPtr.ToInt32() Marshal.ThrowExceptionForHR() - Запрос GAC
// 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, так что я немного застрял, что делать , На данный момент я просто обрабатываю исключение, но я хотел бы знать, как правильно это сделать?
Marlon
Ваш тест тоже неправильно, HRESULT только код ошибки, если значение <0. – 2010-12-09 18:04:47