Noch immer programmiere ich an einem dll-Plugin für ein externes Programm rum. Diesmal geht es um folgendes:
Ich zeige erstmal den source, danach die Erklärung:
gemeinsame Header-Datei
struct ServerConfiguration
{
char\* address;
int port;
void (\*listenerFunction)(const char\*);
};
Aktivierungsfunktion der DLL, sowie callback Funktion
void receiveMessage(const char\* msg)
{
printf("%s", msg);
}
int startServerProxy(...)
{
struct ServerConfiguration config;
config.address = "127.0.0.1";
config.port = 4242;
config.listenerFunction = receiveMessage;
// \*\* PART1 \*\*
// void (\*f)(const char\*) = receiveMessage;
// (\*f)("Test");
// \*\*\*\*\*\*\*\*\*\*\*
\_beginthread(startServer, 0, &config);
}
Datei mit Thread-Methode
void (\*listenerFunction)(const char\*);
void startServer(void\* arg)
{
struct ServerConfiguration\* config = (struct ServerConfiguration\*)arg;
listenerFunction = config-\>listenerFunction;
(\*listenerFunction)("Test");
}
Also der code der DLL wird ausgeführt über die Funktion startServerProxy. Dort wird die Struktur ‚ServerConfiguration‘ mit allen Infos beladen, die die Funktion ‚startServer‘ braucht Funktion. startServer wird als eigener Thread geladen und soll in der Lage sein, über den Funktionszeiger ‚listenerFunction‘ Nachrichten an die Funktion ‚receiveMessage‘ senden zu können.
Mein Programm, für das ich die Dll programmiere, quittiert mir den Aufruf des Funktionszeigers mit einem Absturz, was erfahrungsgemäß eine Speicherverletzung o.ä. bedeutet.
Was ich nicht verstehe ist, die Funktionszeiger haben zumindest einen Wert und außerdem funktioniert der code, den ich unter PART1 auskommentiert habe.
Kann jemand den Fehler erahnen?