Seite 1 von 2
[C++] DLL-Callback-Funktion
Verfasst: 22.02.2009 17:48
von X0r
Hi,
ich hab hier folgende DLL in PB geschrieben:
Code: Alles auswählen
ProcedureDLL myfunc(*func)
CallFunctionFast(*func,"a","b")
EndProcedure
Nun wills in C++ einfach nicht funktionieren, die myfunc-Funktion meine Funktion in C++ aufrufen zu lassen. Das Programm stürtzt einfach ab.
Verfasst: 22.02.2009 17:58
von cxAlex
C benutz CDECL Aufrufkonvention, du must schreiben:
Verfasst: 22.02.2009 18:30
von milan1612
Deklarier deine C++ Funktion so
und es sollte funktionieren...
Verfasst: 22.02.2009 18:36
von X0r
Ja mach ich ja und die anderen Funktionen der DLL kann ich auch problemlos aufrufen, allerdings stürzt er immer bei dieser Funktion ab.
Verfasst: 22.02.2009 18:40
von Andesdaf
es kann ja auch durchaus der Inhalt der Procedure sein...
Verfasst: 22.02.2009 18:41
von X0r
Also ne, auf sowas pass ich schon auf, inhaltslos.
Edit:
Es funktioniert einfach nicht.

Könnte bitte jemand so lieb sein und es mal testen.
Verfasst: 22.02.2009 19:17
von milan1612
Pack doch bitte mal ein Beispielprojekt zusammen, dann werd ichs mir mal ansehen.
Verfasst: 22.02.2009 19:19
von X0r
Ich poste erstmal den Code, vielleicht kommste ja so drauf:
.h-Datei:
Code: Alles auswählen
//...
__declspec(dllimport) long __stdcall FSU_ReceiveUpdateInformation(void* procadr);
//...
dann in der main.cpp-Datei.
Verfasst: 22.02.2009 19:27
von milan1612
Und wie benutzt du die DLL? Per Import Lib oder mit der API? Bitte pack
doch mal schnell ein VS Beispielprojekt zusammen, sonst kann ich da gar
nix debuggen und die Compileroptionen bleiben mir auch unbekannt...
Verfasst: 22.02.2009 20:42
von X0r
So, hab jetzt nochmal paar Tests gemacht.
Also, wenn die Funktion von der DLL ohne Parameter aufgerufen wird, funktioniert es wunderbar. Ansonsten gibts nen Absturz.
Und dann hat man den Fehler auch schon. Man muss CallCFunctionFast nehmen.