<?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[Exception bei Funktionsaufruf in OnInitDialog]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich bekomme immer folgende Exception:</p>
<blockquote>
<p>Unhandled exception at 0x004fba16 in BLM-Editor.exe: 0xC0000005: Access violation reading location 0x00d5a2ac.</p>
</blockquote>
<p>und lande hier im Code:</p>
<pre><code class="language-cpp">void Release() throw()
	{
		ATLASSERT( nRefs != 0 ); //genau hier

		if( _AtlInterlockedDecrement( &amp;nRefs ) &lt;= 0 )
		{
			pStringMgr-&gt;Free( this );
		}
	}
</code></pre>
<p>wenn ich folgenden Code in der OnInitDialog stehen habe. Wenn ich auskommentiere läuft alles.</p>
<pre><code class="language-cpp">CStringArray TempNames;
	Country TempCountry;
	Ini.GetKeyNames(_T(&quot;Countries&quot;), &amp;TempNames);
	for(int i=0; i&lt;TempNames.GetSize(); ++i)
	{
		Ini.GetDataBlock(_T(&quot;Countries&quot;), TempNames[i], (LPVOID)&amp;TempCountry ,sizeof(Country));
</code></pre>
<p>Ich aufgerufene und nicht von mir stammende Funktion der Klasse CIni sieht so aus:</p>
<pre><code class="language-cpp">DWORD CIni::GetDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPVOID lpBuffer, DWORD dwBufSize, DWORD dwOffset) const
{
	LPTSTR psz = __GetStringDynamic(lpSection, lpKey);
	DWORD dwLen = _tcslen(psz) / 2;
	if (dwLen &lt;= dwOffset)
	{
		delete [] psz;
		return 0;
	}

	// verify psz, must be all in hex format
	for (int i = 0; psz[i] != _T('\0'); i++)
	{
		TCHAR c = psz[i];
		if ((c &gt;= _T('0') &amp;&amp; c &lt;= _T('9'))
			|| (c &gt;= _T('a') &amp;&amp; c &lt;= _T('f'))
			|| (c &gt;= _T('A') &amp;&amp; c &lt;= _T('F')))
		{
			// valid
		}
		else
		{
			delete [] psz;
			return 0;
		}
	}

	DWORD dwProcLen = 0;
	LPBYTE lpb = (LPBYTE)lpBuffer;

	if (lpb != NULL)
	{
		dwProcLen = min(dwLen - dwOffset, dwBufSize);
		LPCTSTR p = &amp;psz[dwOffset * 2];
		for (DWORD i = 0; i &lt; dwProcLen; i++)
		{			
			TCHAR sz[3] = _T(&quot;&quot;);
			_tcsncpy(sz, p, 2);			
			lpb[i] = BYTE(_tcstoul(sz, NULL, 16));
			p = &amp;p[2];
		}			
	}
	else
	{
		dwProcLen = dwLen - dwOffset;
	}
	delete [] psz;
	return dwProcLen;
}
</code></pre>
<p>Ich freue mich auf Anregungen.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165299/exception-bei-funktionsaufruf-in-oninitdialog</link><generator>RSS for Node</generator><lastBuildDate>Fri, 31 Jul 2026 07:29:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165299.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 Nov 2006 13:42:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exception bei Funktionsaufruf in OnInitDialog on Sat, 18 Nov 2006 13:42:04 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich bekomme immer folgende Exception:</p>
<blockquote>
<p>Unhandled exception at 0x004fba16 in BLM-Editor.exe: 0xC0000005: Access violation reading location 0x00d5a2ac.</p>
</blockquote>
<p>und lande hier im Code:</p>
<pre><code class="language-cpp">void Release() throw()
	{
		ATLASSERT( nRefs != 0 ); //genau hier

		if( _AtlInterlockedDecrement( &amp;nRefs ) &lt;= 0 )
		{
			pStringMgr-&gt;Free( this );
		}
	}
</code></pre>
<p>wenn ich folgenden Code in der OnInitDialog stehen habe. Wenn ich auskommentiere läuft alles.</p>
<pre><code class="language-cpp">CStringArray TempNames;
	Country TempCountry;
	Ini.GetKeyNames(_T(&quot;Countries&quot;), &amp;TempNames);
	for(int i=0; i&lt;TempNames.GetSize(); ++i)
	{
		Ini.GetDataBlock(_T(&quot;Countries&quot;), TempNames[i], (LPVOID)&amp;TempCountry ,sizeof(Country));
</code></pre>
<p>Ich aufgerufene und nicht von mir stammende Funktion der Klasse CIni sieht so aus:</p>
<pre><code class="language-cpp">DWORD CIni::GetDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPVOID lpBuffer, DWORD dwBufSize, DWORD dwOffset) const
{
	LPTSTR psz = __GetStringDynamic(lpSection, lpKey);
	DWORD dwLen = _tcslen(psz) / 2;
	if (dwLen &lt;= dwOffset)
	{
		delete [] psz;
		return 0;
	}

	// verify psz, must be all in hex format
	for (int i = 0; psz[i] != _T('\0'); i++)
	{
		TCHAR c = psz[i];
		if ((c &gt;= _T('0') &amp;&amp; c &lt;= _T('9'))
			|| (c &gt;= _T('a') &amp;&amp; c &lt;= _T('f'))
			|| (c &gt;= _T('A') &amp;&amp; c &lt;= _T('F')))
		{
			// valid
		}
		else
		{
			delete [] psz;
			return 0;
		}
	}

	DWORD dwProcLen = 0;
	LPBYTE lpb = (LPBYTE)lpBuffer;

	if (lpb != NULL)
	{
		dwProcLen = min(dwLen - dwOffset, dwBufSize);
		LPCTSTR p = &amp;psz[dwOffset * 2];
		for (DWORD i = 0; i &lt; dwProcLen; i++)
		{			
			TCHAR sz[3] = _T(&quot;&quot;);
			_tcsncpy(sz, p, 2);			
			lpb[i] = BYTE(_tcstoul(sz, NULL, 16));
			p = &amp;p[2];
		}			
	}
	else
	{
		dwProcLen = dwLen - dwOffset;
	}
	delete [] psz;
	return dwProcLen;
}
</code></pre>
<p>Ich freue mich auf Anregungen.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176599</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 18 Nov 2006 13:42:04 GMT</pubDate></item></channel></rss>