Récemment, j'ai trouvé un problème avec le compilateur Visual C++ 2008, mais en utilisant un hack mineur, je l'évite. Actuellement, je ne peux pas utiliser le même hack, mais le problème existe comme en 2008 comme en 2010 (Express).Erreur fatale lors de l'utilisation de FICHIER * dans Windows à partir de la DLL
Alors, je l'ai préparé pour vous 2 simple fichier C: un pour DLL, un pour programme:
DLL (fichier dll.c):
#include <stdio.h>
__declspec(dllexport) void
print_to_stream (FILE *stream)
{
fprintf (stream, "OK!\n");
}
Et pour le programme, qui liens cette DLL via un fichier-dll.lib:
Programme:
#include <stdio.h>
__declspec(dllimport) void print_to_stream (FILE *stream);
int
main (void)
{
print_to_stream (stdout);
return 0;
}
Pour compiler et lier DLL:
cl /LD file-dll.c
Pour compiler et programme de lien:
cl file-test.c file-dll.lib
Lors de l'appel de fichiers test.exe, j'ai eu l'erreur fatale (similaire à la segmentation défaut sous UNIX).
Comme je l'ai dit au début, j'avais déjà le même problème avant: sur le transfert du pointeur FILE * vers la DLL. Je pensais que c'était peut-être à cause de la discordance du compilateur, mais maintenant j'utilise un compilateur pour tout et ce n'est pas le problème. ;-(
Que puis-je faire maintenant
UPD: J'ai trouvé la solution:
cl /LD /MD file-dll.c
cl /MD file-test.c file-dll.lib
La clé est de créer un lien vers la bibliothèque dynamique, mais (je ne savais pas il) par défaut, il lie erreur staticaly et (hencefore) se produit (je vois pourquoi).
PS Merci pour la patience.
Oui, je l'ai déjà trouvé. Merci à vous. –