<?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[Problem mit WMI und CoCreateInstance()]]></title><description><![CDATA[<p>Ich verwende in einer Anwendung WMI, um Hardware-ID's auszulesen.<br />
Das klappt auch wunderbar, solang die Anwendung nur einmal offen ist. Wenn sie aber zweimal geöffnet wird, kann nur diejenige zugreifen, die von Anfang an Zugriff hatte. Jetzt könnte man denken, ich hätte vergessen, etwas freizugeben - aber ich habe alles was ich in der MSDN gesehen habe, mit Release() wieder gelöst.<br />
Wenn ich die eine Anwendung, die Zugriff hat, beende, hat die andere auf einmal Zugriff. Es muss also offensichtlich irgendwas noch freigegeben werden, aber ich stoße einfach nicht drauf!</p>
<p>Hier mein Code:</p>
<pre><code class="language-cpp">int getHardwareIdentString(CString Querystring, CString Paramstring, CString&amp; output){

	IWbemLocator * locator = NULL;

	int result = 0;

	HRESULT hr = CoInitializeEx( 0, COINIT_MULTITHREADED );

		hr = CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL,
							CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER , 
							IID_IUnknown, reinterpret_cast&lt; void** &gt;( &amp;locator ));

		if ( FAILED( hr ) )
		{
			AfxMessageBox(&quot;Instanz konnte nicht erstellt werden!&quot;);

			CString cs;
			CString msg = _com_error(hr).ErrorMessage();
			cs.Format(_T(&quot;Error 0x%08x: %s&quot;), hr, msg);
			AfxMessageBox(cs);

			return -10;
		}

                // (...) Benutzen der Instanz für Abfragen

	        if(locator != NULL){
		//AfxMessageBox(&quot;Release Locator&quot;);
		locator-&gt;Release();
		}

	CoUninitialize();

	return result;
}
</code></pre>
<p>Ich bekomme den Fehlercode (HRESULT) &quot;WBEM_E_INITIALIZATION_FAILURE&quot; von der Methode CoCreateInstance(). Bin hier langsam am Verzweifeln, kann mir jemand helfen??</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153050/problem-mit-wmi-und-cocreateinstance</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 02:32:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153050.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Jul 2006 10:49:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit WMI und CoCreateInstance() on Wed, 12 Jul 2006 11:01:46 GMT]]></title><description><![CDATA[<p>Ich verwende in einer Anwendung WMI, um Hardware-ID's auszulesen.<br />
Das klappt auch wunderbar, solang die Anwendung nur einmal offen ist. Wenn sie aber zweimal geöffnet wird, kann nur diejenige zugreifen, die von Anfang an Zugriff hatte. Jetzt könnte man denken, ich hätte vergessen, etwas freizugeben - aber ich habe alles was ich in der MSDN gesehen habe, mit Release() wieder gelöst.<br />
Wenn ich die eine Anwendung, die Zugriff hat, beende, hat die andere auf einmal Zugriff. Es muss also offensichtlich irgendwas noch freigegeben werden, aber ich stoße einfach nicht drauf!</p>
<p>Hier mein Code:</p>
<pre><code class="language-cpp">int getHardwareIdentString(CString Querystring, CString Paramstring, CString&amp; output){

	IWbemLocator * locator = NULL;

	int result = 0;

	HRESULT hr = CoInitializeEx( 0, COINIT_MULTITHREADED );

		hr = CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL,
							CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER , 
							IID_IUnknown, reinterpret_cast&lt; void** &gt;( &amp;locator ));

		if ( FAILED( hr ) )
		{
			AfxMessageBox(&quot;Instanz konnte nicht erstellt werden!&quot;);

			CString cs;
			CString msg = _com_error(hr).ErrorMessage();
			cs.Format(_T(&quot;Error 0x%08x: %s&quot;), hr, msg);
			AfxMessageBox(cs);

			return -10;
		}

                // (...) Benutzen der Instanz für Abfragen

	        if(locator != NULL){
		//AfxMessageBox(&quot;Release Locator&quot;);
		locator-&gt;Release();
		}

	CoUninitialize();

	return result;
}
</code></pre>
<p>Ich bekomme den Fehlercode (HRESULT) &quot;WBEM_E_INITIALIZATION_FAILURE&quot; von der Methode CoCreateInstance(). Bin hier langsam am Verzweifeln, kann mir jemand helfen??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096322</guid><dc:creator><![CDATA[DrOetker]]></dc:creator><pubDate>Wed, 12 Jul 2006 11:01:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit WMI und CoCreateInstance() on Wed, 12 Jul 2006 13:55:18 GMT]]></title><description><![CDATA[<p>Habe das Problem gelöst. Wenn man statt über CLSID_WbemAdministrativeLocator über CLSID_WbemLocator ght, funktioniert es wunderbar. Das war in einem MSDN Beispiel so gemacht, um die PNP-ID's verschiedener Geräte auszulesen, was ich ja auch mache - aber es geht auch so, und dann auch komplett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096473</guid><dc:creator><![CDATA[DrOetker]]></dc:creator><pubDate>Wed, 12 Jul 2006 13:55:18 GMT</pubDate></item></channel></rss>