<?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[Gegenstück der VCL zur COleSafeArray Klasse der MFC]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes Problem:</p>
<p>Eine Methode eines COM- Interface erwartet als Paramater ein <strong>VARAINT</strong> Array. Bisher habe ich dieser Methode ein <strong>Variant</strong> Array übergeben das mittels &quot;VarArrayCreate&quot; erzeugt und anschliessen mit Daten gefüllt wurde.</p>
<pre><code class="language-cpp">int b[2] = {dwBufferSize,0};
			Variant varBuffer = VarArrayCreate(b,1,varByte);
			void* pBuffer = varBuffer.ArrayLock();
			ReadFile(m_hFile, pBuffer, dwBufferSize, &amp;dwReturn, NULL);
			varBuffer.ArrayUnlock();

			amv-&gt;RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);
</code></pre>
<p>Alles schön und gut, funktioniert auch, ABER ich habe ein riesiges Speicherleck von ca. 10MB/Minute.</p>
<p>Wenn ich die Methode nicht aufrufe, also so:</p>
<pre><code class="language-cpp">int b[2] = {dwBufferSize,0};
			Variant varBuffer = VarArrayCreate(b,1,varByte);
			void* pBuffer = varBuffer.ArrayLock();
			ReadFile(m_hFile, pBuffer, dwBufferSize, &amp;dwReturn, NULL);
			varBuffer.ArrayUnlock();

			//amv-&gt;RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);
</code></pre>
<p>ist alles i.O. (kein Speicheleck aber auch keine Funktion). Meine Vermutung ist das es wohl an der COM- Komponete liegt, also habe ich den Hersteller kontaktiert. Der sagt bei ihm gibt es keine Probleme und verwiess nur auf seine Codebeispiele die aber mit VC entwickelt wurden. Er meinte auch das es an der Art der Übergabe des Variant Arrays liegen könnte. In den Beispielen verwenden sie die Klasse COleSafeArray. Hier der Code:</p>
<pre><code class="language-cpp">// Setup our MFC helper class and read frame data from file
			COleSafeArray SafeArray;
			VARIANT varBuffer;
			SafeArray.ResizeOneDim(dwBufferSize);
			SafeArray.AccessData((void**) &amp;pBuffer);
			ReadFile(m_hFile, pBuffer, dwBufferSize, &amp;dwReturn, NULL);
			SafeArray.UnaccessData();

			// Render video and audio samples retrieved from input file
			varBuffer = SafeArray.Detach();

			amv-&gt;RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);

			SafeArray.Attach(varBuffer);
</code></pre>
<p>Nun mal blöd gefragt, was mein ihr dazu? Und gibt es ein Gegestück in der VCL zur COleSafeArray Klasse der MFC?</p>
<p>Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/194627/gegenstück-der-vcl-zur-colesafearray-klasse-der-mfc</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 04:56:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/194627.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Oct 2007 08:38:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gegenstück der VCL zur COleSafeArray Klasse der MFC on Tue, 09 Oct 2007 08:38:19 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes Problem:</p>
<p>Eine Methode eines COM- Interface erwartet als Paramater ein <strong>VARAINT</strong> Array. Bisher habe ich dieser Methode ein <strong>Variant</strong> Array übergeben das mittels &quot;VarArrayCreate&quot; erzeugt und anschliessen mit Daten gefüllt wurde.</p>
<pre><code class="language-cpp">int b[2] = {dwBufferSize,0};
			Variant varBuffer = VarArrayCreate(b,1,varByte);
			void* pBuffer = varBuffer.ArrayLock();
			ReadFile(m_hFile, pBuffer, dwBufferSize, &amp;dwReturn, NULL);
			varBuffer.ArrayUnlock();

			amv-&gt;RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);
</code></pre>
<p>Alles schön und gut, funktioniert auch, ABER ich habe ein riesiges Speicherleck von ca. 10MB/Minute.</p>
<p>Wenn ich die Methode nicht aufrufe, also so:</p>
<pre><code class="language-cpp">int b[2] = {dwBufferSize,0};
			Variant varBuffer = VarArrayCreate(b,1,varByte);
			void* pBuffer = varBuffer.ArrayLock();
			ReadFile(m_hFile, pBuffer, dwBufferSize, &amp;dwReturn, NULL);
			varBuffer.ArrayUnlock();

			//amv-&gt;RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);
</code></pre>
<p>ist alles i.O. (kein Speicheleck aber auch keine Funktion). Meine Vermutung ist das es wohl an der COM- Komponete liegt, also habe ich den Hersteller kontaktiert. Der sagt bei ihm gibt es keine Probleme und verwiess nur auf seine Codebeispiele die aber mit VC entwickelt wurden. Er meinte auch das es an der Art der Übergabe des Variant Arrays liegen könnte. In den Beispielen verwenden sie die Klasse COleSafeArray. Hier der Code:</p>
<pre><code class="language-cpp">// Setup our MFC helper class and read frame data from file
			COleSafeArray SafeArray;
			VARIANT varBuffer;
			SafeArray.ResizeOneDim(dwBufferSize);
			SafeArray.AccessData((void**) &amp;pBuffer);
			ReadFile(m_hFile, pBuffer, dwBufferSize, &amp;dwReturn, NULL);
			SafeArray.UnaccessData();

			// Render video and audio samples retrieved from input file
			varBuffer = SafeArray.Detach();

			amv-&gt;RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);

			SafeArray.Attach(varBuffer);
</code></pre>
<p>Nun mal blöd gefragt, was mein ihr dazu? Und gibt es ein Gegestück in der VCL zur COleSafeArray Klasse der MFC?</p>
<p>Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1381024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1381024</guid><dc:creator><![CDATA[kingvik387]]></dc:creator><pubDate>Tue, 09 Oct 2007 08:38:19 GMT</pubDate></item></channel></rss>