Funktion aufrufen
-
Hallo zusammen,
meine DLL funktioniert soweit. Nun hab ich aber folgendes Problem.
Ich hab eine DLL (Quelldatei --> testdll.cpp). In diese Datei habe ich einen Dialog (testdlldlg.cpp) eingebaut, der mir einfach nur ne MessageBox aufruft! Soweit funktioniert das auch! Nun habe ich die testdll.cpp folgende Funktion mit eingebaut
extern "C" __declspec(dllexport) void CdwDLLPut(long id, long buflen, char* buffer)
Über diese Funktion soll die MessageBox aufgerufen werden.
Ich habe es mal so probiertMGDlg dlg; dlg.MessageBox(message);
Hier bringt er dann die Fehlermeldung, dass er den Bezeichner message nicht finden kann!!!Ich schätze das liegt daran, dass ich die Funktion aus testdlldlg.cpp nicht direkt anspreche? Oder?
Kann mir jemand helfen?
Danke!!!
Gruß
-
Ich habs denk ich mal nich so ganz verstanden, aber versuchs doch mal mit
AfxMessageBox(message);
-
Du übergibst der AfxMessageBox(message) eine CString. Nur wo ist dieser Deklariert?
-
@ freakSkater: das mit der AfxMessageBox hab ich bereits probiert! Würde auch funktionieren, allerdings hätte ich gern den Inhalt bzw. die MessageBox aus der anderen Funktion!!!!
Zuerst hab ich es so gemacht:
//Ruft eine Message Box auf!!!! CString message = "Hallo Welt"; AfxMessageBox(message);
Aber das ist ja eine von mir neu deklarierte Variable. Ich aber hätte gern die Variabel aus der anderen Funktion!
Wie komm ich an die Funktion
void MGDlg::OnBmb()
aus der testdlldlg.cpp?
-
Ich bin schon etwas weiter gekommen!!!
extern "C" __declspec(dllexport) void CdwDLLPut(long id, long buflen, char* buffer) { //Benötigtes Makro zur anzeige des Dialogs AFX_MANAGE_STATE(AfxGetStaticModuleState()); CDialog dlg(IDD_DIALOG1,CWnd::GetActiveWindow()); dlg.DoModal(); //Dialog wird angezeigt //Soll die Funktion in der dialogdll.cpp aufrufen Cdialogdll dll; dll.OnBnClickedheute(); }
Erst ruf ich das Dialog auf und anschließend möchte ich beim betätigen des Buttons den Inhatl in ein Editfeld übergeben. All das Funktioniert nur über dieses Funktion (OnBnClickedheute()). Mein Problem ist, dass das Dialog sich zwar öffnen lässt, aber sobald ich auf den Button drück passiert gar nichts.
Bin ich überhaupt auf dem richtigen Weg?
Danke
-
Hi,
ich glaub ich komm der Sache schon etwas näher!
Vielleicht sollte ich es noch mal versuchen zu erklären.
Folgende Situation:Hab eine DLL mit einem Dialog! DLL -> testdll.cpp, Dialog -> testdlg.cpp
In der testdll.cpp befindet sich eine Funktion die für das Anzeigen des Dialogs verantwortlich ist (siehe Beitrag eins weiter oben). Drück ich in meiner anderen Anwendung auf einen Button, dann wird die DLL geladen und das Dialogfenster öffnet sich! In dem Dialog befindet sich ein Butten der forerst nur die Funktion hat eine MessageBox zu öffnen. Ich habe die MessageBox in diese Funktion im testdlg.cpp so eingebautvoid Cdialogdll::OnBnClickedheute() { AfxMessageBox("Hallo Welt"); }
Drück ich also auf den Button, dann passiert gar nichts! Schließe ich das Dialog, dann erscheint die MessageBox!
Meine Frage wäre nun wie ich die Box vor dem Dialog sichtbar bekomme ohne das das Dialogfenster geschlossen werden muss?
Sorry für die vielen Fragen!!! Und danke für die Hilfe!!!
Gruß Elle
P.S. Gehört das überhaupt noch zu meinem Hauptthema oder hätte ich ein neues Thread eröffnen müssen?
-
Ich habs geschaft!!!!
Hier die Lösung
//Benötigtes Makro zur anzeige des Dialogs AFX_MANAGE_STATE(AfxGetStaticModuleState()); //CDialog dlg(IDD_DIALOG1,CWnd::GetActiveWindow()); //dlg.DoModal(); //Dialog wird angezeigt //Soll die Funktion in der dialogdll.cpp aufrufen Cdialogdll dlg; if(dlg.DoModal()==IDOK) { }
Gruß