Je voudrais passer des pointeurs de fonction (dll ou non) comme arguments à certaines fonctions dll et les appeler de l'intérieur de la DLL. Je me demande si c'est sûr parce que j'ai trouvé une information sur http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.cbcpx01/fpref.htm que:Est-il prudent de passer des pointeurs de fonction en tant qu'arguments aux fonctions dll et de les appeler de l'intérieur de la DLL?
Dans le code de DLL, on suppose qu'un pointeur de fonction pointe vers un descripteur de fonction. Un appel de pointeur de fonction est effectué en obtenant d'abord l'adresse de fonction par déréférencement du pointeur; puis, en se ramifiant à l'entrée de la fonction. Lorsqu'un pointeur de fonction non-DLL est passé au code DLL, il pointe directement vers l'entrée de la fonction. Une tentative de déréférencement à travers un tel pointeur produit une adresse de fonction indéfinie. La dérivation ultérieure à l'adresse indéfinie peut entraîner une exception. Cette règle s'applique-t-elle également à Visual Studio et à d'autres compilateurs?
Ce que j'essaie précisément de faire est de résoudre le problème de l'allocation de mémoire et de la désallocation entre diverses fonctions dll et non-dll. Mon idée est de passer deux pointeurs de fonction - pour les fonctions communes d'allocation et de désallocation - à chaque DLL dans une initialisation (par exemple Initialize (& malloc, & free)) puis de gérer la mémoire en utilisant ces fonctions communes et donc toujours compatibles.
L'article référencé n'est pas pour Windows. Les fonctions exportées n'étaient spéciales que dans Win16. – Joshua