Transfert de données locales via DLL et socket!

Signaler
Messages postés
12
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
4 juillet 2010
-
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Bonjour à tous;

Ceci est ma deuxième requête sur le forum et comme pour la première je tiens à préciser que j'ai fait des recherches avant de m'adresser à vous :-)!

Voilà, je voudrais créer une DLL qui enverrait des information de type String et Integer via Socket et TCP, mais seulement je ne sais pas si c'est faisable.

Je voudrais, grâce à cette dernière faire communiquer deux applications sur mon PC.
L'application qui enverrait les données s'appelle MetaTrader 4 de la société MetaQuote.
C'est un logiciel de trading qui permet de créer ses propre fonction en C et qui permet aussi l'utilisation de DLL. (des apis sont crées pour cette plateforme mais il son payants, et moi j'aime tout faire moi même)

Et l'application qui recevrait les données est codée en PASCAL par moi même sous delphi 7.

Donc voilà, ma question est:
Est-ce faisable et si oui auriez vous un conseils ou un liens vers un tuto ou autre.

Je ne vous demande pas un code complet, mais juste quelques petits trucs qui me permettrait de la faire moi même ;-)

Cordialement

4 réponses

Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Salut,
c'est tout à fait faisable, mais il faudra passer tes chaînes au format PChar (ou mieux, PAnsiChar), car les chaînes de Delphi que tu connais ne sont pas compatibles avec Windows en général. Donc oui, tu crées les fonctions dans ta DLL, tu les exportes (paramètres autorisés : tout ce qui peut être lu par le langage destination, donc adieu les String, classes et objets), et dans ces fonctions tu fais des appels à Winsock pour réaliser des connexions TCP dans des sockets. N'oublies pas d'initialiser Winsock en appellant WSAStartup et de terminer avec WSACleanup !

Note que tu peux utiliser les classes et objets à l'intérieur de ta DLL, et si la DLL n'est utilisée que par Delphi/Pascal alors c'est même jouable de communiquer à l'aide de ces classes, mais en général c'est très déconseillé.

Si tu n'es pas à l'aise avec le concept de DLL, je t'engage à lire ceci (si ce n'est pas déjà fait bien sûr )

Cordialement, Bacterius !
Messages postés
12
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
4 juillet 2010

Merci Bactérius,
Je ne connaissais pas Winsock, je fait des recherches de tuto sur cette DLL

Pour le Tuoriel que tu propose, oui déjà lus celui, ça fait plusieurs jours que je cherches, mais là je commence à désespérer lol.
Je suis tombé sur une sujet Tcp auquel tu as participé (enfin je pense que c'est toi), assez intéressant:
http://www.commentcamarche.net/forum/affich-2465334-delphi-transfert-fichier-avec-tcp

Je continue mes recherches; merci encore
Messages postés
12
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
4 juillet 2010

Arf, tout ce que je trouve est avec les Tsocket, ect....

Vraiment, sur ce coups je ne trouve rien pour créer des socket dans une dll, envoyer/recevoir des données toujours via DLL en Pascal, sniff

e vais devoir allez voir du coté de C ou C# pour la faire je pense
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Rha la la !
C'est pas dur pourtant. Si tu sais faire une DLL, alors tu fais les procédures, et dedans tu fais les appels à Winsock :

fonction Socket pour créer un socket
fonction Connect pour se connecter à un hôte distant
fonction Bind pour binder
fonction CloseSocket pour fermer un socket
fonction Send pour envoyer des données sur un socket
fonction Recv pour recevoir des données (attention, c'est bloquant donc il faut faire un thread)

...

Il y a plein d'exemples d'utilisation de Winsock en Delphi sur le net. C'est sûr que si tu tapes "Sockets dans une DLL delphi" tu vas rien trouver ! Sépares ton problème en deux parties :

I. utiliser les sockets
II. les utiliser dans une DLL

Tu verras ça sera direct plus simple

Cordialement, Bacterius !