Gast
#201291
Hallo!
Folgendes Problem:
Ich versuche ein DLL zu schreiben, dessen Funktionen aus VC++ und VB
aufgerufen werden und die eine Funktion des aufrufenden Programmes
aufrufen kann. Dabei tritt das Problem auf, dass ich aus der DLL eine
Methode einer Klasse im Hauptprogramm aufrufen muss. Ich hab als
Beispiel folgende Klasse geschrieben:
HEADER
class CCaller
{
typedef void (*CALL_FUNC)(char para);
public:
void call_function(void);
void set_function(CALL_FUNC func);
CCaller();
virtual ~CCaller();
private:
CALL_FUNC m_function_to_call;
};
BODY
CCaller::CCaller()
{
}
CCaller::~CCaller()
{
}
void CCaller::set_function(CALL_FUNC func)
{
this->m_function_to_call = func;
}
void CCaller::call_function()
{
this->m_function_to_call(10);
}
was in C super funktioniert.
Jetzt binde ich das ganze in C++ folgendermaßen ein wobei m_caller vom
Typ CCaller ist.
void CMein_problem_mfcDlg::OnOK()
{
// TODO: Zusätzliche Prüfung hier einfügen
this->m_caller.set_function(&CMein_problem_mfcDlg::call_me);
this->m_caller.set_function(call_me);
this->m_caller.call_function();
CDialog::OnOK();
}
void CMein_problem_mfcDlg::call_me(char param)
{
char temp[10];
this->MessageBox(itoa(param,temp,10));
}
Für die beiden set_function Zeilen bekomme ich Konvertierungsfehler
error C2664.
Ich hab schon einige Seiten im Internet durchforstet und habe nur
Lösungsmöglichkeiten erspäht, die sich auf Zeiger innerhalb einer
Klasse, aber nicht über Klassen hinweg erstrecken. Ähnliche Infos sind
auch im MSDN
Als Anhang hab ich das VC Projekt hinzugefügt.
Schonmal Danke für eure Mühen.