Нарушение защищенной памяти при выполнении метода из динамически загружаемой сборки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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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