<?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[DLL aufruf korrekt?]]></title><description><![CDATA[<p>Moin,</p>
<p>arbeite mich gerade in die DLL Nutzung ein, und möchte mal wissen ob das was ich da produziert habe auch korrekt ist.</p>
<p>Ich hab ne &quot;Standart DLL, MFC-DLL verwenden&quot; erstellt. (mit VC++ 6.0)</p>
<p>Zum probieren, wollte ich meine Funktion zum erstellen des eines Tray-Icons in die DLL schreiben, da man das ja öfter brauchen kann.</p>
<p>Meine DLL</p>
<pre><code class="language-cpp">// NormDLL.cpp : Legt die Initialisierungsroutinen für die DLL fest.
//

#include &quot;stdafx.h&quot;
#include &quot;NormDLL.h&quot;

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

//

.
.
.

/////////////////////////////////////////////////////////////////////////////
// CNormDLLApp

BEGIN_MESSAGE_MAP(CNormDLLApp, CWinApp)
	//{{AFX_MSG_MAP(CNormDLLApp)
		// HINWEIS - Hier werden Mapping-Makros vom Klassen-Assistenten eingefügt und entfernt.
		//    Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNormDLLApp Konstruktion

CNormDLLApp::CNormDLLApp()
{
	// ZU ERLEDIGEN: Hier Code zur Konstruktion einfügen
	// Alle wichtigen Initialisierungen in InitInstance platzieren
}

/////////////////////////////////////////////////////////////////////////////
// Das einzige CNormDLLApp-Objekt

CNormDLLApp theApp;

extern &quot;C&quot; __declspec(dllexport) void TrayIconErstellen(int trayIconID, int userID, int iconID, HWND m_hWnd)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	NOTIFYICONDATA nid;
    memset(&amp;nid, 0, sizeof(NOTIFYICONDATA));

    nid.cbSize = sizeof(NOTIFYICONDATA);
    nid.hIcon = AfxGetApp()-&gt;LoadIcon(iconID);
    nid.hWnd = m_hWnd;
    _tcsncpy(nid.szTip, &quot;Test Icon&quot;, sizeof(nid.szTip));
	nid.uCallbackMessage = userID;
    nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
    nid.uID = trayIconID;

    Shell_NotifyIcon(NIM_ADD, &amp;nid);
}
</code></pre>
<p>In meiner Dialoganwendung steht folgendes:</p>
<pre><code class="language-cpp">.
.
#define TRAY_ICON_ID (WM_USER + 111)
#define WM_USER_TRAY (WM_USER + 100)
.
.
.
extern &quot;C&quot; __declspec(dllimport) void TrayIconErstellen(int trayIconID, int userID, int iconID, HWND m_hWnd);

void CProgDlg::OnTest() 
{
	HWND m_hWnd = CWnd::GetSafeHwnd();
	TrayIconErstellen(TRAY_ICON_ID, WM_USER_TRAY, IDR_MAINFRAME, m_hWnd);	
}
</code></pre>
<p>Funktioniert &quot;fast&quot; einwandfrei.</p>
<p>3 Fragen:</p>
<p>1. Ist das korrekt so?</p>
<p>2. Wo ruf ich &quot;extern &quot;C&quot; __declspec(dllimport) void ...&quot; korrekterweise auf? Im Moment steht es einfach vor der Funktion in der ich es benötige.</p>
<p>3. In meinem Buch steht:&quot;Wird diese DLL dynamisch an die MFC-DLLs gebunden, muss bei allen von dieser DLL exportierten Funktionen, die MFC-Aufrufe durchführen, das Makro AFX_MANAGE_STATE direkt am Beginn der Funktion eingefügt sein.&quot;</p>
<p>Wenn ich diese Makro einfüge, erschein statt des gewälten TrayIcons nur ein graues Viereck in der Tray-Leiste. <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>
<p>Im Voraus vielen Dank.</p>
<p>Gruß Sven</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/155254/dll-aufruf-korrekt</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 03:39:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/155254.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Aug 2006 05:06:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DLL aufruf korrekt? on Fri, 04 Aug 2006 05:06:09 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>arbeite mich gerade in die DLL Nutzung ein, und möchte mal wissen ob das was ich da produziert habe auch korrekt ist.</p>
<p>Ich hab ne &quot;Standart DLL, MFC-DLL verwenden&quot; erstellt. (mit VC++ 6.0)</p>
<p>Zum probieren, wollte ich meine Funktion zum erstellen des eines Tray-Icons in die DLL schreiben, da man das ja öfter brauchen kann.</p>
<p>Meine DLL</p>
<pre><code class="language-cpp">// NormDLL.cpp : Legt die Initialisierungsroutinen für die DLL fest.
//

#include &quot;stdafx.h&quot;
#include &quot;NormDLL.h&quot;

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

//

.
.
.

/////////////////////////////////////////////////////////////////////////////
// CNormDLLApp

BEGIN_MESSAGE_MAP(CNormDLLApp, CWinApp)
	//{{AFX_MSG_MAP(CNormDLLApp)
		// HINWEIS - Hier werden Mapping-Makros vom Klassen-Assistenten eingefügt und entfernt.
		//    Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNormDLLApp Konstruktion

CNormDLLApp::CNormDLLApp()
{
	// ZU ERLEDIGEN: Hier Code zur Konstruktion einfügen
	// Alle wichtigen Initialisierungen in InitInstance platzieren
}

/////////////////////////////////////////////////////////////////////////////
// Das einzige CNormDLLApp-Objekt

CNormDLLApp theApp;

extern &quot;C&quot; __declspec(dllexport) void TrayIconErstellen(int trayIconID, int userID, int iconID, HWND m_hWnd)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	NOTIFYICONDATA nid;
    memset(&amp;nid, 0, sizeof(NOTIFYICONDATA));

    nid.cbSize = sizeof(NOTIFYICONDATA);
    nid.hIcon = AfxGetApp()-&gt;LoadIcon(iconID);
    nid.hWnd = m_hWnd;
    _tcsncpy(nid.szTip, &quot;Test Icon&quot;, sizeof(nid.szTip));
	nid.uCallbackMessage = userID;
    nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
    nid.uID = trayIconID;

    Shell_NotifyIcon(NIM_ADD, &amp;nid);
}
</code></pre>
<p>In meiner Dialoganwendung steht folgendes:</p>
<pre><code class="language-cpp">.
.
#define TRAY_ICON_ID (WM_USER + 111)
#define WM_USER_TRAY (WM_USER + 100)
.
.
.
extern &quot;C&quot; __declspec(dllimport) void TrayIconErstellen(int trayIconID, int userID, int iconID, HWND m_hWnd);

void CProgDlg::OnTest() 
{
	HWND m_hWnd = CWnd::GetSafeHwnd();
	TrayIconErstellen(TRAY_ICON_ID, WM_USER_TRAY, IDR_MAINFRAME, m_hWnd);	
}
</code></pre>
<p>Funktioniert &quot;fast&quot; einwandfrei.</p>
<p>3 Fragen:</p>
<p>1. Ist das korrekt so?</p>
<p>2. Wo ruf ich &quot;extern &quot;C&quot; __declspec(dllimport) void ...&quot; korrekterweise auf? Im Moment steht es einfach vor der Funktion in der ich es benötige.</p>
<p>3. In meinem Buch steht:&quot;Wird diese DLL dynamisch an die MFC-DLLs gebunden, muss bei allen von dieser DLL exportierten Funktionen, die MFC-Aufrufe durchführen, das Makro AFX_MANAGE_STATE direkt am Beginn der Funktion eingefügt sein.&quot;</p>
<p>Wenn ich diese Makro einfüge, erschein statt des gewälten TrayIcons nur ein graues Viereck in der Tray-Leiste. <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>
<p>Im Voraus vielen Dank.</p>
<p>Gruß Sven</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110264</guid><dc:creator><![CDATA[a.s.t_2003]]></dc:creator><pubDate>Fri, 04 Aug 2006 05:06:09 GMT</pubDate></item></channel></rss>