Нарушение защищенной памяти при выполнении метода из динамически загружаемой сборкиC#

Место общения программистов C#
Anonymous
Нарушение защищенной памяти при выполнении метода из динамически загружаемой сборки

Сообщение Anonymous »

Я создаю систему моддинга для своей игры в Godot, где моддеры пишут свой код на C# и компилируют его в DLL, из которой игра загружает и выполняет методы.
Соответствующая часть метода компиляции (возвращает сборку)

Код: Выделить всё

string dll = //the absolute path...
if (File.Exists(dll)) {
return Assembly.LoadFrom(dll);
}
Затем я вызываю метод следующим образом:

Код: Выделить всё

    private void ExecuteModMethod(Mod mod, string methodName, object[] methodParameters)
{
if (!useMods) return;
Type type = mod.Assembly.GetType(mod.Name+".Main");
if (type == null) return;
MethodInfo method = type.GetMethod(methodName);

mod.Instance = Activator.CreateInstance(type);
if (method == null) return;
method.Invoke(mod.Instance, methodParameters);
}
Когда я пытаюсь вызвать метод _Ready (метод инициализации Godot, которому моддеры также должны называть свой метод инициализации), я получаю фатальную ошибку. System.AccessViolationException: попытка чтения или записи защищенной памяти. Часто это указывает на повреждение другой памяти.
Я мало что знаю о DLL и подобных вещах, поэтому буду рад любой помощи. Мне просто нужно, чтобы ошибка исчезла, потому что она останавливает выполнение приложения и поэтому метод не вызывается.
ПРИМЕЧАНИЯ
< ul>
[*]Я знаю, что это действительно опасно и моддеры могут включить вредоносное ПО. Я разберусь с этой проблемой, вам не нужно упоминать, насколько она опасна, спасибо.
[*]Это единственная выдаваемая ошибка, путь к dll, тип, метод и mod.Instance не равны нулю. Проблема не в этом.


Подробнее здесь: https://stackoverflow.com/questions/791 ... ed-assembl

Вернуться в «C#»