Come posso passare una funzione C++ generata dinamicamente come * funcprt a un'API C?Come passare funcptr dalla classe C++ a un'API C?
Le esportazioni API questo:
DllImport void api_register_func(char *func_name, void (*funcptr)(char *, char *));
devo creare la funzione, mentre il runtime, perché io non so parlare prima. così ho usato una classe:
class JsFunc
{
public:
char * JsFuncName;
char * JsParameter;
void RunFunc(char * val1, char * val2)
{
printf("\nJsFunc.runFunc executed, JsParameter=%s passed\n",JsParameter);
}
};
e chiamarlo in questo modo:
JsFunc * jsm = new JsFunc();
jsm->JsFuncName = external_parameter1;
jsm->JsParameter = external_parameter2;
api_register_func(external_parameter1, jsm->RunFunc);
Ma VisualStudio 2015 mi dice:
Errore C3867 'jsFunc :: runFunc': non sintassi standard; uso '&' per creare un puntatore a membro VJCS C: \ Users \ astrauss \ Source \ Repos \ VCJS \ VCJS \ VCJS.cpp 54
Scusate se il codice è male, io non sono un Programmatore C/C++ ma ho bisogno di farlo funzionare per il mio lavoro quotidiano. Grazie!
Non si ha accesso al C++ 11? – Kupiakos
Sfortunatamente la maggior parte di questo non ha assolutamente senso. Sembra che tu stia chiedendo della soluzione invece di chiedere del problema ([Problema XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)). Prova a modificare la tua domanda – Amit
Non puoi farlo precisamente, dal momento che RunFunc ha un parametro "nascosto" 'questo' di cui C non ne sa nulla (che tiene un puntatore al tuo oggetto' jsm'. Dovrai trovare in qualche modo è possibile "stivare" l'indirizzo di 'jsm' da qualche parte. –