public void ImportModules()
{
foreach (var ModuleImports in ModulesImports)
{
HleModuleHost HleModuleHost = null;
try
{
HleModuleHost = ModuleManager.GetModuleByName(ModuleImports.Name);
}
catch (Exception Exception)
{
Console.WriteLine(Exception);
}
// Can't use a host module. Try to use a Guest module.
if (HleModuleHost == null)
{
var HleModuleGuest = ModuleManager.LoadedGuestModules.FirstOrDefault(ModuleExports => (ModuleExports.Name == ModuleImports.Name));
if (HleModuleGuest != null)
{
HleModuleGuest.ExportModules(this);
continue;
}
}
Console.WriteLine("'{0}' - {1}", ModuleImports.Name, (HleModuleHost != null) ? HleModuleHost.ModuleLocation : "?");
foreach (var Function in ModuleImports.Functions)
{
var NID = Function.Key;
var CallAddress = Function.Value.Address;
var DefaultEntry = new HleFunctionEntry()
{
NID = 0x00000000,
Name = CStringFormater.Sprintf("__<unknown:0x%08X>", (int)NID),
Description = "Unknown",
Module = null,
ModuleName = ModuleImports.Name,
};
var FunctionEntry = (HleModuleHost != null) ? HleModuleHost.EntriesByNID.GetOrDefault(NID, DefaultEntry) : DefaultEntry;
FunctionEntry.NID = NID;
//var Delegate = Module.DelegatesByNID.GetOrDefault(NID, null);
LinkFunction(CallAddress, FunctionEntry);
}
}
}