MFC DLL mit Resourcen
-
Hallo zusammen,
ich bin noch Anfänger in Sachen MFC/DLL... es interessiert mich jedoch sehr inwieweit es möglich ist DLLs zu nutzen um Resourcen oder Dialogfenster anzuzeigen.
ICh würde gerne in einer DLL ein Klasse für ein Dialogfeld schreiben und diese DLL dann in einem anderen Programm verwenden um dieses Dialogfeld bei Bedarf anzuzeigen. Wenn dies möglich ist, worauf muss man dann achten?
Danke für eine Antwort
Jochen
-
Das kann nicht schaden:
http://www.codeguru.com/cpp/w-p/dll/article.php/c107/
-
Schonmal vielen dank für den Link! Das sieht vielversprechend aus

-
Ich habe jetzt mal zwei Projekte erstellt... eine DLL und ein Programm welches die DLL nutzt. Leider führt der Aufruf der Funktion, welche das Dialogfeld einzeigt immer zu einem Fehler.
class CMyClass { public: __declspec(dllexport) BOOL TestApp(); __declspec(dllexport) CMyClass(); __declspec(dllexport) virtual ~CMyClass(); };__declspec(dllexport) BOOL CMyClass::TestApp() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CTestDia dlg; dlg.DoModal(); return FALSE; }Das "Client-Programm" hat die Klasse
class CTestDLLDlg : public CDialog { // Konstruktion public: CTestDLLDlg(CWnd* pParent = NULL);// Standard-Konstruktor [b]CMyClass objMyClass;[/b] // Dialogfelddaten //{{AFX_DATA(CTestDLLDlg) enum { IDD = IDD_TESTDLL_DIALOG }; CString m_EDIT1; //}}AFX_DATA // Vom Klassenassistenten generierte Überladungen virtueller Funktionen //{{AFX_VIRTUAL(CTestDLLDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); //}}AFX_VIRTUAL // Implementierung protected: HICON m_hIcon; // Generierte Message-Map-Funktionen //{{AFX_MSG(CTestDLLDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); virtual void OnOK(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };Hat eventuell jemand ein Beispiel bei dem es funktioniert? Oder kann mir sonst weiterhelfen?
Danke!
-
void CTestDLLDlg::OnOK() { objMyClass.TestApp(); }Ruft die Methode aus der DLL auf...
-
class AFX_EXT_CLASS CMyClass { public: CMyClass(void); virtual ~CMyClass(void); public: bool TestApp(void); };bool CMyClass::TestApp(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CTestDia dlg; dlg.DoModal(); return false; }
-
Mit den Änderungen von (D)Evil erhalte ich beim Kompilieren folgende Fehler:
Temporäre Dateien und Ausgabedateien für "MyDLL - Win32 Debug" werden gelöscht.
--------------------Konfiguration: MyDLL - Win32 Debug--------------------
Ressourcen werden kompiliert...
Kompilierung läuft...
StdAfx.cpp
Kompilierung läuft...
MyClass.cpp
E:\Test\MyDLL\MyClass.cpp(21) : warning C4273: 'CMyClass::CMyClass' : Inkonsistente DLL-Bindung. dllexport angenommen.
E:\Test\MyDLL\MyClass.cpp(26) : warning C4273: 'CMyClass::~CMyClass' : Inkonsistente DLL-Bindung. dllexport angenommen.
E:\Test\MyDLL\MyClass.cpp(31) : warning C4273: 'TestApp' : Inkonsistente DLL-Bindung. dllexport angenommen.
TestDia.cpp
Generieren von Code...
Linker-Vorgang läuft...
Bibliothek Debug/MyDLL.lib und Objekt Debug/MyDLL.exp wird erstellt
MyClass.obj : error LNK2001: Nichtaufgeloestes externes Symbol "__declspec(dllimport) const CMyClass::`vftable'" (__imp_??_7CMyClass@@6B@)
Debug/MyDLL.dll : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.
Browse-Informationsdatei wird erstellt...MyDLL.dll - 2 Fehler, 3 Warnung(en)