Dll toujours ...

Signaler
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004
-
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004
-
Bonjour,

Est-il possible de mettre dans une Dll des fonctions qui lisent ou écrivent dans un fichier ?

merci

15 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Pourquoi ce ne serait pas possible ?
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004

j'ai créé une Dll avec des fonctions qui écrivent, qui lisent dans des fichiers et puis d'autres fonctions.
Mon exécutable se construit sans problème.
Mais les fonctions de lecture et d'écriture ne fonctionnent pas !
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
poste ton code, jverrai si jpeu t'aider, car tu as certainement du te tromper sur les fonction d'ecriture et de lecture.
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004

Par exemple:

void ligne_suivante (int nb_ligne, char ligne[LONGUEUR], int l, FILE * fichier)

{
int i;

for (i=0;i<nb_ligne;i++)
{
fgets (ligne, l, fichier);
}
}
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Tu noublie pas de faire un fopen avant d'appeller ta fonction ? Ta fonction la, parcourt toutes les lignes de ton fichier mais seule la derniere ligne sera stockée ds ligne[]. Si c'est ca la cause de ton pb, utilise un tab a 2dimensions.
Si j'ai pas resolu ton pb, nesite pas a redemander !

++

Alhexman
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004

le but de la fonction est de garder la dernière ligne en fait.

avant j'ai fait

fichier = fopen ("simul_dat", "r");

et quand je debug
il y a un problème de mémoire à la ligne du fgets

Lorelei
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
A mon avis il faudrait mettre le chemin complet du fichier dans le 1er param de fopen(...).
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
si le fichier ke tu ouvres ne se trouve pas ds le dossier de l'exe, effectivement il faut mettre le chemin complet du fichier. Comment definis tu ta constante LONGUEUR ? Si elle n'est pas assez grande, c'est normal de tu obtienne un pb de memoire, definis la a 256 pour eviter ce type de pb..

Voila ++

Alhexman
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004

LONGUEUR est a 132

je vais mettre le chemin .....

merci les amis !
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004

euh je vais peut-être paraître bête :blush) mais quand on écrit le chemin, entre les différents dossiers on met des "" ?
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
Oui, et on les met par paire car \ est un caractere spécial.

fichier = fopen ("C:\\dossier\\fichier.txt", "r");
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004

ok par paire !!!

bon je verrais ca demain j'en ai trop marre!!!

merci

Bonne fin d'aprem
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004

Salut,

en fait ça marche si on ouvre le fichier dans la fonction de la Dll !!!
et non si on ouvre le fichier dans l'exécutable puis on passe en argument le pointeur sur fichier puis on écrit dans la Dll !!!

Qq1 peut il me dire pkoi ?
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
Faudrait voir comment tu ouvres ton fichier dans l'exe et comment tu l'utilise dans la fonction de la dll.
Messages postés
24
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
4 août 2004

Par ex:

dans l'exe
debug = fopen ( "simul_deb" , "w" ) ;
SauveMat ( debug , &M) ;
fclose ( debug ) ;

dans la Dll
void __stdcall SauveMat (FILE * fpo, matrice * p_M)
{
int i, j;
int k;

lib_mat_error = LIB_MAT_SUCCESS;

if (fpo == NULL)
{
lib_mat_error = LIB_MAT_SAUVEMAT_WRONG_FILE;
printf ("\n SauvMat : File does not exist");
lib$stop (0, 0);
exit (0);
}

fprintf (fpo, " %s (%d,%d)\n", lib_mat_info_msg[LIB_MAT_MSG_MATRIX],
M.nl, M.nc);

k = 0;

for (i=0; i<M.nl; i++)
{
for (j=0; j<M.nc; j++)
{
if (Mvec(k + j) >= 0) fprintf (fpo, " ");
fprintf (fpo, " %1.4e", Mvec(k + j));
}
k += M.nc;
fprintf (fpo, "\n");
}
}

Ca ca fonctionne pas

MAiS :

dans la Dll
void __stdcall SauveMat (matrice * p_M) //modif

{
int i, j;
int k;
FILE *fpo ;

lib_mat_error = LIB_MAT_SUCCESS;

fpo = fopen("simul_deb","a");

if (fpo == NULL)
{
lib_mat_error = LIB_MAT_SAUVEMAT_WRONG_FILE;
printf ("\n SauvMat : File does not exist");
lib$stop (0, 0);
exit (0);
}

fprintf (fpo, " %s (%d,%d)\n", lib_mat_info_msg[LIB_MAT_MSG_MATRIX], M.nl, M.nc);

k = 0;

for (i=0; i<M.nl; i++)
{
for (j=0; j<M.nc; j++)
{
if (Mvec(k + j) >= 0) fprintf (fpo, " ");
fprintf (fpo, " %1.4e", Mvec(k + j));
}
k += M.nc;
fprintf (fpo, "\n");
}

fclose(fpo);
}

dans l'exe
SauveMat ( &M ) ;

Ca fonctionne !!