Ich versuche, eine Pipe mit C# zu erstellen. Der Code ist recht einfach, aber wenn die Zeile mit CreatePipe()
Aufruf ausgeführt wird, erhalte ich eine System.AccessViolationException
mit der folgenden Fehlermeldung:
Es wurde versucht, geschützten Speicher zu lesen oder zu schreiben. Dies ist oft ein Hinweis darauf, dass ein anderer Speicher beschädigt ist.
Hier der KOMPLETTE Code meines Formulars:
public partial class Form1 : Form
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool CreatePipe(out SafeFileHandle hReadPipe, out SafeFileHandle hWritePipe, SECURITY_ATTRIBUTES lpPipeAttributes, int nSize);
[StructLayout(LayoutKind.Sequential)]
public struct SECURITY_ATTRIBUTES
{
public DWORD nLength;
public IntPtr lpSecurityDescriptor;
public bool bInheritHandle;
}
public Form1()
{
InitializeComponent();
}
private void btCreate_Click(object sender, EventArgs e)
{
SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();
sa.nLength = (DWORD)System.Runtime.InteropServices.Marshal.SizeOf(sa);
sa.lpSecurityDescriptor = IntPtr.Zero;
sa.bInheritHandle = true;
SafeFileHandle hWrite = null;
SafeFileHandle hRead = null;
if (CreatePipe(out hRead, out hWrite, sa, 4096))
{
MessageBox.Show("Pipe created !");
}
else
MessageBox.Show("Error : Pipe not created !");
}
}
Am Anfang deklariere ich: using DWORD = System.UInt32;
Vielen Dank, wenn jemand helfen kann.