<?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[Kann eine DLL einen DIALOG laden?]]></title><description><![CDATA[<p>Hallo Leutz!</p>
<p>ich hatte es mir an Anfang einfach vorgestellt:<br />
Ich erstelle eine MFC DLL, binde eine Resource (DIALOG) ein,<br />
und lasse diesen Dialog aus dem Konstruktor der DLL laden.<br />
ich benutzte dazu das Beispiel, welches hier im forum schon oft<br />
empfohlen wurde &quot;dlldialog&quot; und habe den code nur soweit umgeändert dass<br />
nicht die Testumgebung den Dialog lädt sondern die DLL selber:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;afxdllx.h&gt;
#include &quot;mcDlg.h&quot;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

static AFX_EXTENSION_MODULE DlldialogDLL = { NULL, NULL };

extern &quot;C&quot; int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    .	
    .
    .
    .

	CmcDlg* m_pDlg = new CmcDlg;
	m_pDlg-&gt;Create(IDD_DIALOG1);
	m_pDlg-&gt;ShowWindow(SW_SHOW);

	return 1;   // OK

}
</code></pre>
<p>-&gt;tja scheiße, so gehts nichts, beim ausführen kommt ein Assertion Failed.<br />
hab's auch schon mit AFX_MANAGE_STATE versucht, das geht auch nicht.</p>
<p>Mein Problem ist, ich muss ein PlugIn schreiben, hab also auf das Host-Programm keinen Einfluss mehr, kann es also nicht so realisieren das der Host den Dialog lädt.<br />
Die DLL muss dies von sich aus tun, sobald sie vom Host-Prog geladen wird.</p>
<p>Bin für jeglliches Feedback dankbar!</p>
<p>Gruss<br />
Artur</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/52944/kann-eine-dll-einen-dialog-laden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 01 Jun 2026 07:30:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/52944.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Oct 2003 12:03:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Fri, 24 Oct 2003 12:05:24 GMT]]></title><description><![CDATA[<p>Hallo Leutz!</p>
<p>ich hatte es mir an Anfang einfach vorgestellt:<br />
Ich erstelle eine MFC DLL, binde eine Resource (DIALOG) ein,<br />
und lasse diesen Dialog aus dem Konstruktor der DLL laden.<br />
ich benutzte dazu das Beispiel, welches hier im forum schon oft<br />
empfohlen wurde &quot;dlldialog&quot; und habe den code nur soweit umgeändert dass<br />
nicht die Testumgebung den Dialog lädt sondern die DLL selber:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;afxdllx.h&gt;
#include &quot;mcDlg.h&quot;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

static AFX_EXTENSION_MODULE DlldialogDLL = { NULL, NULL };

extern &quot;C&quot; int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    .	
    .
    .
    .

	CmcDlg* m_pDlg = new CmcDlg;
	m_pDlg-&gt;Create(IDD_DIALOG1);
	m_pDlg-&gt;ShowWindow(SW_SHOW);

	return 1;   // OK

}
</code></pre>
<p>-&gt;tja scheiße, so gehts nichts, beim ausführen kommt ein Assertion Failed.<br />
hab's auch schon mit AFX_MANAGE_STATE versucht, das geht auch nicht.</p>
<p>Mein Problem ist, ich muss ein PlugIn schreiben, hab also auf das Host-Programm keinen Einfluss mehr, kann es also nicht so realisieren das der Host den Dialog lädt.<br />
Die DLL muss dies von sich aus tun, sobald sie vom Host-Prog geladen wird.</p>
<p>Bin für jeglliches Feedback dankbar!</p>
<p>Gruss<br />
Artur</p>
]]></description><link>https://www.c-plusplus.net/forum/post/378784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/378784</guid><dc:creator><![CDATA[feisX]]></dc:creator><pubDate>Fri, 24 Oct 2003 12:05:24 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Fri, 24 Oct 2003 12:22:15 GMT]]></title><description><![CDATA[<p>Hi als ich weiß nicht ob das schon bei ddlmain möglich ist, aber wobei crasht er dir? Ich meine an welchem Punkt genau? Hast du es mal durchdebugt?<br />
Ich hatte mal ein ähnliches Problem aber halt nicht in dllmain. Hab den Dialog über eine Funktion erstellt. Ich hatte ein Problem mit den Resourcen, nämlich das er nicht die von der dll, sondern die von der .exe genommen hat und da meinen Dialog, wen wundert's nicht gefunden hat. Hier mal meine Lösung:</p>
<pre><code class="language-cpp">HRESULT TTapiManager::CreateDlg()
{
  HRESULT nRet = S_OK;

  HINSTANCE hinst = ::AfxGetResourceHandle();

  ::AfxSetResourceHandle(GetBPhoneInstance());

  //init the recieve dlg for incoming calls
  m_pDlg = new TapiRecieveDlg();

  if(m_pDlg-&gt;Create(IDD_RECIEVE_DLG))
  {
	m_pDlg-&gt;SetinTray();

	//set the reciever in the event interface
	m_pEventHandler-&gt;SetReciever((TTapiCallInterface*)m_pDlg);
  }
  else
  {
	delete m_pDlg;
	m_pDlg = NULL;

	nRet = FAILED_TO_INIT_DLG;
  }

  ::AfxSetResourceHandle(hinst);

  return nRet;
}
</code></pre>
<p>Also GetBPhoneInstance() liefert mir nur die Instance zurück die ich bei dllmain erhalten habe, also kannst du diese ja gleich benutzen. Einen Versuch ist es wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/378817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/378817</guid><dc:creator><![CDATA[Stalin]]></dc:creator><pubDate>Fri, 24 Oct 2003 12:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Fri, 24 Oct 2003 18:24:14 GMT]]></title><description><![CDATA[<p>danke für antwort <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
also der fehler ist: assertion failed .... afxwin1.inl line26<br />
aber er lässt sich nicht mit dem debugger abfangen.<br />
der fehler kommt beim erzeugen des dialoges mit create, die instanzbildung funktioniert. d.h. kommentiere ich diese beiden zeilen aus:</p>
<pre><code class="language-cpp">m_pDlg-&gt;Create(IDD_DIALOG1); 
    m_pDlg-&gt;ShowWindow(SW_SHOW);
</code></pre>
<p>stürtzt es nicht ab, hab dann aber auch keinen sichtbaren dialog.<br />
ich hatte für das ganze auch schon eine extra klasse gemacht und die funktion von einer ganz anderen stelle als der main aufgerufen, ergebnis was das gleiche.<br />
ich werde mal gleich am montag deine lösung genauer angucken und ausprobieren.</p>
<p>gruss<br />
artur</p>
]]></description><link>https://www.c-plusplus.net/forum/post/379078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/379078</guid><dc:creator><![CDATA[feisX]]></dc:creator><pubDate>Fri, 24 Oct 2003 18:24:14 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Sat, 25 Oct 2003 13:37:30 GMT]]></title><description><![CDATA[<p>Der Beitrag von Stalin ist ein sehr guter Ansatz.Zum testen solltest du deinem Dialog erstmal irgend eine &quot;exotische&quot; ID zuweisen.<br />
Weitere Info´s findest du hier:<br />
<a href="http://www.codeguru.com/dll/dialog_in_extdll.shtml" rel="nofollow">http://www.codeguru.com/dll/dialog_in_extdll.shtml</a></p>
<p>MfG Spacelord <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/379418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/379418</guid><dc:creator><![CDATA[Spacelord]]></dc:creator><pubDate>Sat, 25 Oct 2003 13:37:30 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Mon, 27 Oct 2003 09:50:49 GMT]]></title><description><![CDATA[<p>hab mich jetzt ein mit den beispielen auseinadergesetzt. bin aber noch zu keiner funktionierenden lösung gekommen. das beispiel auf codegure funktioniert bei mir leider auch nicht.<br />
zu stalin's beispiel hab ich noch folgende fragen, da ich es nicht hingekriegt hab es zu implementieren:</p>
<p>1. was genau macht bei dir GetBPhoneInstance() und wie sieht die funktion aus? ich hab stattdessen immer hinst eingesetzt, das scheint falsch zu sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>2. SetinTray() , meine Dialogklasse hat diese Methode garnicht, hast du da selber was verändert? oder liegt es am .Net 2003, ist das etwas anderst?</p>
<p>3. m_pEventHandler-&gt;SetReciever((TTapiCallInterface*)m_pDlg) , was genau wird hier gemacht?</p>
<p>4. ich hab irgentwo auf msdn hilfeseiten gelesen dieser assertion fail kommt nur bei modalen dialogen vor, von wegen bei mir kommt er aber auch bei nicht modalen dialogen vor. weiter stand da, es rührt daher wenn das host-programm nicht mit mcf programmiert wurde. das kann ich ja nicht wissen, ich hab das host-programm ja nicht gemacht ich hab auch keinen zugriff auf den source-code. ich muss ein plugin schreiben.</p>
<p>sorry, wenn ich mich evt. blöd anstelle aber ich weiss es nicht besser. vielleicht mach ich etwas grundlegendes falsch. zu faul bin ich nicht, ich hab schon so ziemlich alle beiträge gelesen die mit dll &amp; co zu tun haben, aber ich krieg diesen fehler nicht weg! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/380371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/380371</guid><dc:creator><![CDATA[feisX]]></dc:creator><pubDate>Mon, 27 Oct 2003 09:50:49 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Mon, 27 Oct 2003 16:37:41 GMT]]></title><description><![CDATA[<p>feisX schrieb:</p>
<blockquote>
<p>hab mich jetzt ein mit den beispielen auseinadergesetzt. bin aber noch zu keiner funktionierenden lösung gekommen. das beispiel auf codegure funktioniert bei mir leider auch nicht.<br />
zu stalin's beispiel hab ich noch folgende fragen, da ich es nicht hingekriegt hab es zu implementieren:</p>
<p>1. was genau macht bei dir GetBPhoneInstance() und wie sieht die funktion aus? ich hab stattdessen immer hinst eingesetzt, das scheint falsch zu sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Hab ich schon gesagt. Sie gibt mir nur die HINSTANCE von der dllmain-Funktion zurück. Ich speicher die halt in einem Objekt.</p>
<p>feisX schrieb:</p>
<blockquote>
<p>2. SetinTray() , meine Dialogklasse hat diese Methode garnicht, hast du da selber was verändert? oder liegt es am .Net 2003, ist das etwas anderst?</p>
<p>3. m_pEventHandler-&gt;SetReciever((TTapiCallInterface*)m_pDlg) , was genau wird hier gemacht?</p>
</blockquote>
<p>Brauchst du nicht und hast du nicht, da ich die Funktionen bzw. Klassen selber geschrieben habe. Machs doch mal so:</p>
<pre><code class="language-cpp">extern &quot;C&quot; int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
	// Entfernen Sie dies, wenn Sie lpReserved verwenden
	UNREFERENCED_PARAMETER(lpReserved);

	if (dwReason == DLL_PROCESS_ATTACH)
	{
		TRACE0(&quot;YYYY.DLL Initializing!\n&quot;);

		// One-Time-Initialisierung der Erweiterungs-DLL
		if (!AfxInitExtensionModule(YyyyDLL, hInstance))
			return 0;

		new CDynLinkLibrary(YyyyDLL);
/*YyyyDLL heißt meine Dll, 
hier muss der Name deiner Dll rein rein 
aber das wird ja eh vom Studio alles gemacht, 
also nicht editieren sondern nur anschließende Zeilen bis einschließlich AfxSetReosurceHandle(...) einfügen.*/

		HINSTANCE hinst = ::AfxGetResourceHandle(); 

		::AfxSetResourceHandle(hInstance); 

		CmcDlg* m_pDlg = new CmcDlg; 
	         m_pDlg-&gt;Create(IDD_DIALOG1); 
		m_pDlg-&gt;ShowWindow(SW_SHOW); 

		::AfxSetResourceHandle(hinst); 

	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		TRACE0(&quot;YYYY.DLL Terminating!\n&quot;);
		// Bibliothek vor dem Aufruf der Destruktoren schließen
		AfxTermExtensionModule(YyyyDLL);
	}
	return 1;   // OK
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/380741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/380741</guid><dc:creator><![CDATA[Stalin]]></dc:creator><pubDate>Mon, 27 Oct 2003 16:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Tue, 28 Oct 2003 07:04:55 GMT]]></title><description><![CDATA[<p>guten morgen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>nee, so ähnlich hab ich das gestern auch noch hingekriegt wie dein zweites beispiel. hab es heut morgen aber trotzdem nochmal 1:1 getestet. der assertion fail kommt trotzdem beim ausführen. das problem wird wohl an einer ganz anderen stelle liegen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/381021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/381021</guid><dc:creator><![CDATA[feisX]]></dc:creator><pubDate>Tue, 28 Oct 2003 07:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Tue, 28 Oct 2003 15:22:38 GMT]]></title><description><![CDATA[<p>so sieht der <a href="http://www.rz.fh-ulm.de/~arwagner/Clipboard.jpg" rel="nofollow">fehler</a><br />
aus. kompilieren und linken geht einwandfrei, nur beim ausführen kommt der scheiß. was mir aber augefallen ist, wenn ich mehrmals auf ignore drücke werden die fehlermeldungen geschlossen und der dialog wird geladen.<br />
ist das vielleicht eine falsche einstellung in der sdk???<br />
ich habe es mit VC++6 und VS.Net2003 ausprobiert.</p>
<p>weiss den keiner was da faul ist???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/381397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/381397</guid><dc:creator><![CDATA[feisX]]></dc:creator><pubDate>Tue, 28 Oct 2003 15:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Wed, 29 Oct 2003 06:32:12 GMT]]></title><description><![CDATA[<p>Zeig doch mal, was genau bemeckert wird, den ASSERT-Befehl.<br />
Wenn dort eine Variable geprüft wird, wäre deren Inhalt auch interessant.</p>
<p>Du schreibst, dass du mehrere Assertions bekommst - mach doch mal eine Liste:<br />
Was wird mit welchem Kriterium bemeckert? &lt;-&gt; Welchen Wert hat meine Variable an der Stelle?</p>
<p>Manchmal ist es ganz hilfreich, sich den Callstack raufzuarbeiten und mal in den anderen Funktionen zu suchen, was da nicht passen könnte.</p>
<p>PS: Sei mir nicht böse, aber die Frage muss sein: Kennst du denn den ASSERT Befehl? Weisst du, wann und warum er eingesetzt wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/381665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/381665</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Wed, 29 Oct 2003 06:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Wed, 29 Oct 2003 07:27:31 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>also zunächst mal deine letzte Frage. Nein ich hab kein Plan was ein ASSERT befehl ist. Was genau macht er?? Ich bin unerfahren im programmieren, bin jetzt im Praxissemester und hab eine für meine Verhältnisse recht anspruchsvolle Aufgabe erhalten. Die ich lösen werde! Egal wie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Der 1. Fehler in afxwin1.inl Line26 siht so aus: <a href="http://www.rz.fh-ulm.de/~arwagner/Clipboard.jpg" rel="nofollow">klicken</a></p>
<p>die Code Zeilen sind diese hier:</p>
<pre><code class="language-cpp">_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
	{ ASSERT(afxCurrentResourceHandle != NULL);
		return afxCurrentResourceHandle; }
</code></pre>
<p>Wenn ich Ignore drücke, sieht der nächste Fehler genauso aus, nur in Line23:</p>
<pre><code class="language-cpp">_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
	{ ASSERT(afxCurrentInstanceHandle != NULL);
		return afxCurrentInstanceHandle; }
</code></pre>
<p>Der 3. ist ebenfalls in Line23 und der 4. ist in Line29, hier kommt schon der Dialog der Host-Progs:</p>
<pre><code class="language-cpp">_AFXWIN_INLINE void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource)
	{ ASSERT(hInstResource != NULL); afxCurrentResourceHandle = hInstResource; }
</code></pre>
<p>nachdem ich den 4. ignoriere wird auch schon der zweite Dialog um den es sich hier handelt geladen.</p>
<p>Ich weis nicht was für'n Inhalt in den zu prüfenden Variablen steht, wie finde ich das raus? Und wie prüfe ich den Callstack?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/381683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/381683</guid><dc:creator><![CDATA[feisX]]></dc:creator><pubDate>Wed, 29 Oct 2003 07:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Wed, 29 Oct 2003 07:42:06 GMT]]></title><description><![CDATA[<p>oha!<br />
hab grad rumexperementiert, mein Projekt von debug Modus auf Release gestellt, jetzt kommt nix Fehler, zumindest nicht in meinem Testprogramm. In dem Programm für das ich eigentlich das PlugIn schreibe führt das ganze alledings zum Absturz <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> (Fehler heißt ja Debug Assertion blabla)<br />
Liegt es vielleicht darin, das ich im Hauptprog, keine *.lib und auch keine header einbinde? Weil das geht schlecht, kann ich ja nicht machen.<br />
Mein Hauptprog ist Cubasis, ich hatte schonmal ein Thema dazu erstellt:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=51343&amp;start=0&amp;postdays=0&amp;postorder=asc&amp;highlight=" rel="nofollow">VST Plug-In schreiben, hat jemand Erfahrung mit sowas??</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/381688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/381688</guid><dc:creator><![CDATA[feisX]]></dc:creator><pubDate>Wed, 29 Oct 2003 07:42:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Wed, 29 Oct 2003 07:53:18 GMT]]></title><description><![CDATA[<p>Guck da mal hin, das sind die Suchergebnisse nach ASSERT auf der MSDN Seite. <a href="http://search.microsoft.com/search/results.aspx?View=msdn&amp;st=a&amp;qu=ASSERT&amp;c=4&amp;s=2" rel="nofollow">http://search.microsoft.com/search/results.aspx?View=msdn&amp;st=a&amp;qu=ASSERT&amp;c=4&amp;s=2</a></p>
<p>Aber eine grobe Zusammenfassung auch hier:</p>
<p>ASSERT ist ein Makro, das nur im Debugmodus etwas macht (im Releasemodus ist es nix) - nämlich prüfen, ob die in den Klammern stehende Bedingung erfüllt ist. Wenn sie nicht erfüllt ist (der Vergleich liefert FALSE), wird eine Meldung ausgegeben, die dem Entwickler folgende Möglichkeiten bietet:</p>
<p>Abort: Die Ausführung des Programms wird abgebrochen, der Debugger wird beendet.<br />
Retry: Der Debugger wird ggf. gestartet und das Programm an der Stelle angehalten, wo die Assertion ausgelöst wurde. Damit kann man schön nachschauen, was denn da nun falsch gelaufen ist und warum.<br />
Ignore: Das Programm soll trotzdem normal weitermachen, das kann unter Umständen böse enden, also Vorsicht in dem Fall.</p>
<p>Wenn du auf einen ASSERT aufläufst, der nicht von dir ist, dann musst du überlegen, was du falsch gemacht hast und / oder nachprüfen, ob du einen bekannten Fehler in der MFC gefunden hast. Im Team wende dich an den Kollegen, von dem der Code ist, der wird sich hoffentlich was dabei gedacht haben.</p>
<p>----------------------------------</p>
<p>Wofür man ASSERT benutzt: (Meine Meinung!!!)</p>
<p>- Wenn ein Wert auftritt, der nicht sein sollte, z.B. keine Daten gefunden, NULL-Zeiger, zu grosser Arrayindex.<br />
- Wenn in einer switch ein Wert auftaucht, der da nicht sein dürfte.<br />
- (Der ist jetzt wirklich nur ein kleiner Tipp) Als Todo-Markierung im Projekt, wenn du z.B. erstmal deinen Dialog angucken willst, und das Datenladen später machen willst. Dann kannst du statt des Ladens ein</p>
<pre><code class="language-cpp">ASSERT(FALSE);
</code></pre>
<p>schreiben und schon wirst du automatisch errinnert, dass du noch etwas vergessen hast. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>----------------------------------</p>
<p>Wenn du eine ASSERT-Meldung bekommst ist also eine Situation eingetreten, die fehlerhaft ist. In dem Fall sollte dringend geprüft werden, was da falsch ist. Das Programm sieht oft so aus, als ob trotzdem alles okay ist - das böse Erwachen kommt dann oft an anderer Stelle.</p>
<p>In deinem Fall würde ich vermuten, dass es Probleme mit der Ressource gibt.</p>
<p>&lt;Ironie on&gt; Alle Klarheiten beseitigt? &lt;Ironie off&gt; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>PS: Informier dich in dem Zusammenhang mal über VERIFY. Das kann ich leider nicht so gut erklären. Wenn ich noch über eine gute Beschreibung stolpere, werde ich die hier posten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/381697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/381697</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Wed, 29 Oct 2003 07:53:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Wed, 29 Oct 2003 08:21:51 GMT]]></title><description><![CDATA[<p>stimmt ja, jetzt erinnere ich mich wo du das sagst, hab das mal in nem buch gelesen. beim release werden die asserts alle entfernt.</p>
<p>nun der erste fehler wird von dieser zeile verursacht:</p>
<pre><code class="language-cpp">HINSTANCE hinst = ::AfxGetResourceHandle();
</code></pre>
<p>meine hinst variable bleibt leer,<br />
der nächste fehler wird wohl ein folgefehler darauf sein,<br />
der wird beim erzeugen des dialogs ausgelöst, weil der<br />
darauf kein handle hat oder so.</p>
<pre><code class="language-cpp">m_pDlg-&gt;Create(IDD_DIALOG1);
</code></pre>
<p>ich muss jetzt mal guxen warum das AfxGetResourceHandle nicht funktionier, eigentlich hab ich alles richtig gemacht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/381710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/381710</guid><dc:creator><![CDATA[feisX]]></dc:creator><pubDate>Wed, 29 Oct 2003 08:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kann eine DLL einen DIALOG laden? on Wed, 29 Oct 2003 09:07:43 GMT]]></title><description><![CDATA[<p>Ich hab grad mal nach AfxGetResourceHandle in der MSDN gesucht und den folgenden Abschnitt gefunden:</p>
<blockquote>
<p>How do I build an &quot;extension DLL&quot;?</p>
<p>When you're building a 32-bit extension DLL, define _AFXEXT on the compiler command line. If you look in AFXVER_.H, you'll see that this forces _AFXDLL to also be defined. So an &quot;AFXEXT&quot; DLL is an AFXDLL.</p>
<p>When _AFXDLL is defined, AfxGetResourceHandle returns a value stored in MFC's global data, which is shared by the .EXE, the extension DLL, and the MFC DLL. The handle returned identifies the module that will be searched first when looking for a resource.<br />
(See the source code for AfxFindResourceHandle() if you're curious about the order of the search.)</p>
<p>Strictly speaking, what we need to load a resource is a module handle rather than an instance handle. (Instances share modules—that is, code and resources—but have different data.) A DLL has a module handle that is distinct from the handle of the .EXE.</p>
<p>You can use ::GetModuleHandle to get the handle for your DLL, then pass it to AfxSetResourceHandle so that your DLL is the first place searched for resources. But note that this removes the .EXE module from modules searched. You'll probably want to save a copy of the handle returned by AfxGetResourceHandle before calling AfxSetResourceHandle, then restore it once you're done loading the DLL resource.<br />
Charlie Kester, Microsoft Developer Support, MSMFC, 7/19/95</p>
</blockquote>
<p>Ausserdem klingt das Kapitel &quot;Extension DLLs&quot; interessant für dich. Schmöker da mal durch.</p>
<p>Ich vermute, du hast beim Erstellen der Dll etwas vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/381738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/381738</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Wed, 29 Oct 2003 09:07:43 GMT</pubDate></item></channel></rss>