Funktionspointer

Andreas Witt

Grünschnabel
Hallo!
Ich habe ein Problem bei der Parameterübergabe bei Funktionspointern.

Ich möchte eine Funktion aus einer static lib in einer DLL verpacken, um diese in C# zu verwenden.

Wie übergebe ich den Parameter ( ein Funktionspointer ) der DLLFunktion an die LIBFunktion? Ich habe es, wie nachfolgend beschrieben, versucht, doch der Compiler gibt diesen Fehler aus: Syntaxfehler: '__stdcall'

__declspec(dllexport)int DLLFunktion( int (WINAPI *saveImage)(imgdes *thisimg))
{
return LIBFunktion((WINAPI *saveImage)(imgdes *thisimg));
}

Wie müßte die Parameterübergabe richtig sein?

Im voraus vielen dank!
 
Zuletzt bearbeitet:
Hi,
versuche es mal so
Code:
return LIBFunktion(saveImage);

//edit:
ausserdem rate ich dir typedefs zu benutzen. z.B. wegen Lesbarkeit.
Code:
typedef int (WINAPI *MYPROC)(imgdes *thisimg); 
__declspec(dllexport)int DLLFunktion(MYPROC saveImage) 
{
return LIBFunktion(saveImage); 
}
 
Zuletzt bearbeitet:
Vielen Dank für deine schnelle Antwort.

Ich habe es ausprobiert, geht aber auch nicht.

Fehler: Konvertierung des Parameters 1 von 'int (__stdcall *)(imgdes *)' in 'int (__stdcall *)(void)' nicht möglich
 
aha, der Fehler heisst du solltest 'int (__stdcall *)(void)' in LIBFunction() geben, hast aber ein 'int (__stdcall *)(imgdes *)'. Sorry ich kannte LIBFuntion() nicht. Jetzt aber casten, das geht so:
Code:
typedef int (WINAPI *SAVEIMAGEPROC)(imgdes *thisimg); 
typedef int (WINAPI *LIBFNCPROC)(void);
__declspec(dllexport)int DLLFunktion(SAVEIMAGEPROC saveImage) 
{
return LIBFunktion((LIBFNCPROC)saveImage); 
}
 
Vielen Dank.

War ein Fehler von mir. LIBFunktion will tatsächlich ein 'int (__stdcall *)(void)' haben. Habe mich verguckt. Nochmals vielen Dank für deine Hilfe.
 
Um Himmels Willen nicht einfach casten

Die eine Funktionsart will einen Parameter (imgdes*), die andere nicht! Wenn da brutal gecastet wird, fliegen die Fetzen.

Da wird einfach ein anderer Funktionstyp erwartet, mehr nicht.
 
Ich weiss schon, Funktionspointer arten oft in hässliches gecaste aus (die Syntax ist potthässlich).Ich wollte darauf hinaus, dass er nicht die eine Funktion, die einen Parameter nimmt, zu einer Funktion, die keinen Parameter nimmt, castet.

Nix für ungut :)
 
Zurück