Bonjour,

Je cherche à créer un client de Messagerie. Pour ceci j'ai développé une bibliothèque de fonctions de gestion du protocole POP en C.

Pour ce qui est de l'interface graphique, je me suis tourné vers Visual Basic.

Ce qui me pose problème actuellement :
Une de mes fonctions C est censée récupérer l'en-tête de chacun de mes mails, l'analyser pour en sortir les infos importantes (Expéditeur, Date, Objet...) via la commande POP3 TOP.

Signature de la fonction utilisée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
int pop_msgs_details_vb(int socket,struct bal *mailb);
La structure bal est une liste classique (pointeur vers le premier et le dernier element, et taille) pointant vers une chaine de structures de type mail réprésentant chaque message du dépot de courrier et ses infos que je cherche à récupérer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* Description d'une BAL */
struct bal
{
	struct mail *debut;
	struct mail *fin;
	int nb_msgs;
};
 
/* Description d'un mail */
struct mail
{
	int num;
	int size;
	char *expediteur;
	char *time;
	char *subject;
	struct mail *next;
};
Pour ce qui est C et construction de la DLL aucun soucis.

Par contre, je n'arrive pas à appeler la fonction depuis VB.
J'ai spécifié les types coté VB :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
' Type BAL pour stocker les différents messages
    Public Structure BAL
        Dim debut As Int32
        Dim fin As Int32
        Dim nb_msgs As Integer
    End Structure
 
    ' Type MSG décrit la structure d'un message
    Private Structure MSG
        Dim num As Integer
        Dim size As Integer
        Dim expediteur As String
        Dim time As String
        Dim subject As String
        Dim suiv As Int32
    End Structure
Déja qqun pourait-il me confirmer que mes déclarations par rapport aux pointeurs sont correctes (j'ai eu raison de remplacer par Int32 ?)

Ensuite, L'Appel de la fonction me plante sur une exception "MarshallDirectiveException"... Pourquoi ?

Ma Déclaration :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Declare Function pop_previs_msg Lib "PopClient.dll" ByRef boite As BAL)
Mon Appel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
If (erreur = pop_previs_msg(mailbox)) Then (...)
Je ne comprends pas trop le concept qui vise à "Marshaller" la fonction..

Merci pour vous réponses.