Проект API GetTempPath выдает ошибку AccessViolationException - C#

Узнай цену своей работы

Формулировка задачи:

Приветствую

, пытаюсь определить путь к временной папке Windows через API GetTempPath. Вот наработки, но постоянно выдает ошибку:

AccessViolationException

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

Visual Studio 2010.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        [DllImport("kernel32.dll")]
        static extern int GetTempPath(uint nBufferLength, out StringBuilder lpBuffer);
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click_1(object sender, EventArgs e)
        {
            uint d = 4096;
            StringBuilder StrBuild = new StringBuilder();
            GetTempPath(d, out StrBuild);
            textBox1.Text = StrBuild.ToString();

            textBox2.Text = System.IO.Path.GetTempPath();   //чтобы проверить путь, через него, к сожалению, нельзя
        }
    }
}

Решение задачи: «Проект API GetTempPath выдает ошибку AccessViolationException»

textual
Листинг программы
        [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        static extern Int32 GetTempPath(Int32 nBufferLength, [Out] StringBuilder lpBuffer);
 
            StringBuilder buffer = new StringBuilder(261);
            if (GetTempPath(buffer.Capacity, buffer) == 0)
                throw new Win32Exception(Marshal.GetLastWin32Error());

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5