Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » FunctionPointer casten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
04.04.2007, 14:23 Uhr
Der_Michel



Hallo zusammen,

ich benutze in meinem Projekt eine externe FTP-Bibliothek, und der Fortschritt des Down/Up-Loads soll in meinem Programm angezeigt werden.
Meine Frage: Ist es möglich einen normalen FunctionPointer in einen Pointer auf einer Member-Function zu casten?
Sonst müsste ich ja die Header-Dateien meines Projekts im FTP-Quellcode includen, und irgendwie ist das doch nicht so schön.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.04.2007, 14:59 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,
static-funktionen gehen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.04.2007, 08:45 Uhr
Der_Michel



Irgendwie krieg ich das überhaupt nicht hin... hast Du vielleicht ein Mini-Beispiel parat?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.04.2007, 12:28 Uhr
stephanw
localhorst


Zeig doch mal ein wenig Quellcode von Dir, also ein Mini-Beispiel, bei dem es bei Dir nicht funktioniert.
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.04.2007, 14:45 Uhr
Der_Michel



Ok, ich hab da mal ein kleines beispiel erstellt...

hier wäre mein Projekt


C++:
#include <stdio.h>
#include "MyLib.h"

class MyClass {
public:
  void MyClassMethod(int iValue) {
    printf("iValue : %i", iValue);
  }
};

void main() {
  MyClass abc;
  MyLibFunction();
}



und das hier wäre die Library die ich benutze

C++:
// MyLib.h
void MyLibFunction();

// MyLib.cpp
#include "MyLib.h"
#include <stdio.h>

void MyLibFunction() {
  // hier soll MyClass::MyClassMethod aufgerufen werden
  printf("Hier tu ich was \n");
}



Ich würde nun gern an MyLibFunction einen FunctionPointer übergeben der es ermöglicht MyClass::MyClassMethod aufzurufen. Aber soweit ich weiss muss man, um ein Funktion über einen Funktionspointer aufzurufen der auf eine Klassenmethode zeigt eine Instanz der Klasse (bzw. einen Zeiger auf eine Instanz der Klasse) habe. Aber so brutal würde ich die Library die ich benutze nur ungern ändern.
Deswegen hatte ich gedacht ich erstelle einen Zeiger auf die Methode meiner Klasse, übergebe ihn an MyLibFunction aber als "normalen" Funktionszeiger der keine Instanz meiner Klasse braucht. Ist das überhaupt möglich?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.04.2007, 15:04 Uhr
ao

(Operator)


OK. Ich vermute mal, dass die Library eine C- und keine C++-Library ist - da würde man nämlich andere Techniken verwenden als nackige Funktionszeiger.

Wie sieht denn die Signatur der Callback-Funktion genau aus? Ist das wirklich

C++:
void callback (int value)


oder gibts da noch andere Argumente, zum Beispiel sowas?

C++:
void callback (int value, void * context);


Gruß,
ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.04.2007, 15:19 Uhr
Der_Michel



Genau, es ist eine C-Library.
Als Signatur würde mir wirklich schon das trockene

C++:
void callback (int value)


reichen.
Es ist ja eine FTP-Library, und ich wollte einfach einen callback einfügen der mir erzählt wieviele Bytes schon übertragen wurden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.04.2007, 10:51 Uhr
stephanw
localhorst



Zitat von Der_Michel:
...
Deswegen hatte ich gedacht ich erstelle einen Zeiger auf die Methode meiner Klasse, übergebe ihn an MyLibFunction aber als "normalen" Funktionszeiger der keine Instanz meiner Klasse braucht. Ist das überhaupt möglich?


Wie Flo schon gesagt hat geht das, wenn die Funktion static ist:


C++:
class MyClass {
public:
  static void MyClassMethod(int iValue) {
    printf("iValue : %i", iValue);
  }
};


--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 16.04.2007 um 10:52 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.04.2007, 12:29 Uhr
Der_Michel



Hm, irgendwie will das bei mir nicht so richtig klappen, kann nicht jemand mal ein Beispiel angeben wie man den FunctionPointer "zurechtbiegen" muss?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.04.2007, 12:50 Uhr
ao

(Operator)


Du willst eine Callback-Funktion in einem dir vorgegebenen Kontext aufrufen lassen. Akademische Beispiele gibts zuhauf, aber wenn du mit denen nichts anfangen kannst, brauchst du wohl Hilfe am lebenden Objekt. Zeig uns doch mal diesen Kontext, dann können wir vielleicht einen passenden Callback liefern.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: