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 :
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.
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 :
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 :
Declare Function pop_previs_msg Lib "PopClient.dll" ByRef boite As BAL)
Mon Appel :
If (erreur = pop_previs_msg(mailbox)) Then (...)
Je ne comprends pas trop le concept qui vise à "Marshaller" la fonction..
Merci pour vous réponses.
Partager