Задать вопрос
@D0ct0r_Murder

System.AccessViolationException: «Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.»?

Написал пробную dll для создания процесса на с++. Вызываю её в консоли шарпа - вот такая ошибка. Вот коды:

#include "stdafx.h"
#include <Windows.h>
#include <conio.h>

extern "C" __declspec(dllexport) int CallNewProccess() {
	STARTUPINFO si;
	PROCESS_INFORMATION pi;

	ZeroMemory(&si, sizeof(si));

	if (!CreateProcess(NULL, const_cast<WCHAR*>(L"cmd"), NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi)) {
		return 0;
	}
	else
		return 1;
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

class WinApiClass
{
    [DllImport("DLL4.dll")]
    public static extern int CallNewProccess();
}

namespace ConsoleApp50
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int flag = WinApiClass.CallNewProccess();
            }

            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey(true);
        }
    }
}
  • Вопрос задан
  • 9389 просмотров
Подписаться 1 Простой Комментировать
Ответ пользователя # К ответам на вопрос (3)
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
1 - для проверки памяти используйте соответствующие тесты 1 и 2

2 - в общем случае, это говорит о том что у вас нарушения адресаций - какой то из подпроцессов залезает в память, которая ему не позволена

ps меня смущает эта строка
ZeroMemory(&si, sizeof(si));
Ответ написан
Комментировать