<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Zugriffsverletzung bei &amp;quot;Drag and Drop&amp;quot;]]></title><description><![CDATA[<p>Ich habe hier ein kleines Programm, welches Dateien auflisten soll, welche man aus dem Explorer per drag and drop auf das Formular zieht. Nun Funktioniert dies auch schon, allerdings nur beim ersten mal. Wenn ich das zweite mal eine Datei auf das formular ziwehe, bekomme ich eine Zugriffsverletzung und mein Programm wird beendet.</p>
<p>Die frage ist nun, was mache ich falsch?</p>
<pre><code class="language-cpp">void CTabMessage::OnDropFiles(HDROP hDropInfo)
{
    UINT i;
    UINT nFiles = ::DragQueryFile(hDropInfo, (UINT) -1, NULL, 0);
    for (i = 0; i &lt; nFiles; i++)
    {
        CString szFileName;
        ::DragQueryFile(hDropInfo, i, 
                        szFileName.GetBuffer(szFileName.GetLength()),
                        _MAX_PATH);
        AfxMessageBox(szFileName);
	szFileName.ReleaseBuffer();
    }  // end for
    ::DragFinish(hDropInfo);
}
</code></pre>
<p>in meiner MessageMap steht:</p>
<pre><code class="language-cpp">...
ON_MESSAGE(WM_DROPFILES, OnDropFiles)
...
</code></pre>
<p>und in meiner Headerdatei steht:</p>
<pre><code class="language-cpp">...
protected
  afx_msg void OnDropFiles(HDROP hDropInfo);
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/182084/zugriffsverletzung-bei-quot-drag-and-drop-quot</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 12:24:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182084.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 May 2007 12:21:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriffsverletzung bei &amp;quot;Drag and Drop&amp;quot; on Mon, 21 May 2007 12:21:56 GMT]]></title><description><![CDATA[<p>Ich habe hier ein kleines Programm, welches Dateien auflisten soll, welche man aus dem Explorer per drag and drop auf das Formular zieht. Nun Funktioniert dies auch schon, allerdings nur beim ersten mal. Wenn ich das zweite mal eine Datei auf das formular ziwehe, bekomme ich eine Zugriffsverletzung und mein Programm wird beendet.</p>
<p>Die frage ist nun, was mache ich falsch?</p>
<pre><code class="language-cpp">void CTabMessage::OnDropFiles(HDROP hDropInfo)
{
    UINT i;
    UINT nFiles = ::DragQueryFile(hDropInfo, (UINT) -1, NULL, 0);
    for (i = 0; i &lt; nFiles; i++)
    {
        CString szFileName;
        ::DragQueryFile(hDropInfo, i, 
                        szFileName.GetBuffer(szFileName.GetLength()),
                        _MAX_PATH);
        AfxMessageBox(szFileName);
	szFileName.ReleaseBuffer();
    }  // end for
    ::DragFinish(hDropInfo);
}
</code></pre>
<p>in meiner MessageMap steht:</p>
<pre><code class="language-cpp">...
ON_MESSAGE(WM_DROPFILES, OnDropFiles)
...
</code></pre>
<p>und in meiner Headerdatei steht:</p>
<pre><code class="language-cpp">...
protected
  afx_msg void OnDropFiles(HDROP hDropInfo);
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1289009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289009</guid><dc:creator><![CDATA[Jag2ooo]]></dc:creator><pubDate>Mon, 21 May 2007 12:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei &amp;quot;Drag and Drop&amp;quot; on Mon, 21 May 2007 12:27:00 GMT]]></title><description><![CDATA[<p>Jag2ooo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">::DragQueryFile(hDropInfo, i, szFileName.GetBuffer(szFileName.GetLength()),_MAX_PATH);
</code></pre>
</blockquote>
<p>Das kann gar nicht gut gehen - du übergibst der Funktionen einen 0 Byte (szFileName ist leer, hat also Länge 0) und sagst ihr, daß sie dort MAX_PATH Zeichen unterbringen kann. Da ist es erstaunlich, daß dir die Anwendung nicht schon beim ersten Anlauf um die Ohren fliegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1289015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289015</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 21 May 2007 12:27:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei &amp;quot;Drag and Drop&amp;quot; on Mon, 21 May 2007 13:08:19 GMT]]></title><description><![CDATA[<p>Ok, das sehe ich ein, aber was muss ich statt der 0 übergeben? ich habe auch _MAX_PATH übergeben, aber am Zustand ändert sich nichts. Beim ersten mal klappt, beim zweiten mal nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1289058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289058</guid><dc:creator><![CDATA[Jag2ooo]]></dc:creator><pubDate>Mon, 21 May 2007 13:08:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei &amp;quot;Drag and Drop&amp;quot; on Mon, 21 May 2007 14:01:27 GMT]]></title><description><![CDATA[<p>Ich habe nochmal nachgeforscht und das ist richtig, dass ich beim ersten Aufruf von DragQueryFile ne 0 übergebe, denn so soll man das machen, wenn man wissen will, wieviele Dateinamen übergeben wurden, damit man die in der Schleife zuerflücken kann.</p>
<p>Meine Vermutung geht in die Richtung, dass nen Aufruf (SetWindowLongPtr) in meinem Create des Dialoges fehlt. Ich habe aber keine Ahnung, was ich da wie übergeben soll. Ich habe zwar ne Referenz bei MSDN gefunden, werd da aber nicht schlau draus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1289119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289119</guid><dc:creator><![CDATA[Jag2ooo]]></dc:creator><pubDate>Mon, 21 May 2007 14:01:27 GMT</pubDate></item></channel></rss>