[C++] DLL-Callback-Funktion

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

[C++] DLL-Callback-Funktion

Beitrag 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.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

C benutz CDECL Aufrufkonvention, du must schreiben:

Code: Alles auswählen

ProcedureCDLL
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Deklarier deine C++ Funktion so

Code: Alles auswählen

extern "C" void myfunc();
und es sollte funktionieren...
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von X0r am 22.02.2009 18:51, insgesamt 1-mal geändert.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

es kann ja auch durchaus der Inhalt der Procedure sein...
Win11 x64 | PB 6.20
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag 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.
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Pack doch bitte mal ein Beispielprojekt zusammen, dann werd ichs mir mal ansehen.
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

:mrgreen:
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.

Code: Alles auswählen

//...
FSU_ReceiveUpdateInformation(UpdateInfo);
//...
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag 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...
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag 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.
Antworten