Interop C / C#

Signaler
Messages postés
17
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
10 juin 2005
-
Messages postés
17
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
10 juin 2005
-
Nous avons un problème avec une dll.

En fait, nous avons testé notre dll en la compilant en .exe: nous avons constaté que tout fonctionnait.

0 | 2

1 | 2

2 | 1

3 | 1

4 | 0

Nb Violations : 2



Mais lors de l'appel de la dll dans notre programme (appelé dans l'IHM
en C#), le fichier de sortie nous indiquait des choses du style :

0 | -842150451

1 | -842150451

2 | -842150451

3 | -842150451

4 | -842150451



Nombre de violations : -858993460



Sachant que tout le traitement se fait dans la dll... On n'a rien compris...



Morceaux de code:

en C#:

[DllImport("ordonantsdll.dll")] static extern int dialogue(string numfichier,int NbVoiture,int NbOptions,int NbClasses);

Appel:

erreur = dialogue(numfichier, NbVoiture, NbOptions, NbClasses);

en C:





FILE* FichierCree=NULL;

char NomFich[27];



sprintf(NomFich,"data//CSout");

strcat(NomFich,TmpStr);

sprintf(TmpStr,".txt");

strcat(NomFich,TmpStr);



FichierCree=fopen(NomFich,"w");



if(FichierCree==NULL)

{


printf("\n Erreur
d'écriture dans le fichier\n");

}

else

{

fprintf(FichierCree,"Numero Voiture | Classe\n");

for(i=0;i<NbVoiture;i++)

{

fprintf(FichierCree,"\t\t%d\t\t|\t ", i);

fprintf(FichierCree,"%d \n",tabseq[1][i]);

}

fprintf(FichierCree,"\nNombre de violations : %d",NbViolation);

fprintf(FichierCree,"\n\n(c) Ordonants project");

}

fclose(FichierCree);

}



et

_declspec( dllexport)int dialogue (char NumFichier[], int NbVoiture,int NbOptions,int NbClasses)

{



Si vous avez besoin d'info, envoyez moi un mail !

8 réponses

Messages postés
17
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
10 juin 2005

Z'êtes pas cool les gars on galère là... Vous auriez pas une idée siouplééé ?
Messages postés
17
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
10 juin 2005

un truc bizarre c'est toujours les memes valeurs meme si elles sont archifausses qui ressortent dans le fichier de sortie...
Messages postés
17
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
10 juin 2005

est ce que le fait de lancer notre programme c a partir d'une IHM c#
pourrait faire en sorte que les doubles pointeurs ne sont plus acceptés
dans le prog C ?

apparemment c'est ce qui se passe
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

Si ces valeurs ne sont utilisées qu'en interne il n'y a pas de raisons que l'interop soit la raison du problème.
Par contre si il y a une quelconque interaction avec les paramètres il faudrais peut etre que tu verifies leurs valeurs justement, dans la méthode exposée du code C lors de son appel.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Moi je veux bien (en ce qui concerne le sujet du message)

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Ah oui à ce propos donne nous donc un titre plus parlant sur le sujet, parce que je ne suis pas sur que ça soit très parlant pour ceux qui n'ont pas lu l'autre post ^^

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
36
Mais de toute facon c'est bien ton programme C# qui envoie des donnees a ta lib en C, hein ? C'est surement la qui a un probleme.. Peut etre que qlq part tu envoies une adresse ou lieu d'envoyer une valeur !? ou alors un mauvais cast, genre un int en uint ?
Messages postés
17
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
10 juin 2005

Ce n'est pas ça : j'ai vérifié que j'avais bien envoyé la bonne donnée en mode debug.



PS Merci à coq pour avoir changé le nom du post !