public DacLibrary(DataTargetImpl dataTarget, string dacDll) { if (dataTarget.ClrVersions.Count == 0) { throw new ClrDiagnosticsException(string.Format("Process is not a CLR process!")); } _library = NativeMethods.LoadLibrary(dacDll); if (_library == IntPtr.Zero) { throw new ClrDiagnosticsException("Failed to load dac: " + dacDll); } IntPtr addr = NativeMethods.GetProcAddress(_library, "CLRDataCreateInstance"); var dacDataTarget = new DacDataTarget(dataTarget); object obj; NativeMethods.CreateDacInstance func = (NativeMethods.CreateDacInstance)Marshal.GetDelegateForFunctionPointer(addr, typeof(NativeMethods.CreateDacInstance)); Guid guid = new Guid("5c552ab6-fc09-4cb3-8e36-22fa03c798b7"); int res = func(ref guid, dacDataTarget, out obj); if (res == 0) { _dac = obj as IXCLRDataProcess; } if (_dac == null) { throw new ClrDiagnosticsException("Failure loading DAC: CreateDacInstance failed 0x" + res.ToString("x"), ClrDiagnosticsException.HR.DacError); } }
public DacLibrary(DataTargetImpl dataTarget, string dacDll) { if (dataTarget.ClrVersions.Count == 0) throw new ClrDiagnosticsException(String.Format("Process is not a CLR process!")); _library = NativeMethods.LoadLibrary(dacDll); if (_library == IntPtr.Zero) throw new ClrDiagnosticsException("Failed to load dac: " + dacDll); IntPtr addr = NativeMethods.GetProcAddress(_library, "CLRDataCreateInstance"); _dacDataTarget = new DacDataTarget(dataTarget); object obj; NativeMethods.CreateDacInstance func = (NativeMethods.CreateDacInstance)Marshal.GetDelegateForFunctionPointer(addr, typeof(NativeMethods.CreateDacInstance)); Guid guid = new Guid("5c552ab6-fc09-4cb3-8e36-22fa03c798b7"); int res = func(ref guid, _dacDataTarget, out obj); if (res == 0) _dac = obj as IXCLRDataProcess; if (_dac == null) throw new ClrDiagnosticsException("Failure loading DAC: CreateDacInstance failed 0x" + res.ToString("x"), ClrDiagnosticsException.HR.DacError); }