Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R]Librairie pour batch
Auteur Message
Répondre en citant
Message [R]Librairie pour batch 
Bonjour,

Cette question pourrait sembler idiote (c'est juste pour être sûr Razz ) mais pouvons-nous intégrer des bibliothèques (librairies) en batch ? Du style OpenCV ou des choses comme cela ?

Merci d'avance,



Dernière édition par programme le Dim 3 Juin 2018 - 09:44; édité 1 fois

______________________________________________________

Programme
Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R]Librairie pour batch 
Non, sauf dans certains cas.

1) Avec rundll32

On peut appeler certaines fonctions (mais pas tant que ça) avec rundll32.
Par exemple :
Code:
rundll32 user32.dll MessageBeep


2) Avec la librairie en tant que commande externe

Le meilleur moyen d'utiliser des librairies, c'est de faire des commandes externes qui interagissent avec.
Par exemple, darkbox, batbox, et d'autres interagissent avec la WinAPI pour gérer des choses dans la console.
socket.exe utilise l'API WinSock2 pour fournir des sockets mais accessibles depuis le Batch.

3) FFI ?

J'avais sinon pensé à une librairie permettant de charger puis gérer des DLL en fournissant un FFI type LuaJIT FFI et CFFI.
En soit, c'est pas magique, en terme d'architecture, c'est plus complexe que socket.exe.
Mais ça n'existe pour le moment pas.



Répondre en citant
Message [R]Librairie pour batch 
Citation:
1) Avec rundll32

On peut appeler certaines fonctions (mais pas tant que ça) avec rundll32.
Par exemple :
Code:
rundll32 user32.dll MessageBeep


Il y a une documentation pour les utilisations de rundll32? Est-il possible de charger des polices et tout ce qui est mentionné ici https://fr.wikipedia.org/wiki/Dynamic_Link_Library?

Pour WinAPI est-ce ici https://docs.microsoft.com/en-us/windows/console/console-reference? Il faut d'office travailler en C alors...

Citation:
socket.exe utilise l'API WinSock2 pour fournir des sockets mais accessibles depuis le Batch.


Si j'ai bien compris (d'après mes recherches) c'est pour la communication entre la commande externe et le programme batch ? Et donc l'WinAPI sait pas transmettre tout seul ses commandes au BATCH?

Citation:
3) FFI ?

J'avais sinon pensé à une librairie permettant de charger puis gérer des DLL en fournissant un FFI type LuaJIT FFI et CFFI.
En soit, c'est pas magique, en terme d'architecture, c'est plus complexe que socket.exe.
Mais ça n'existe pour le moment pas.


C'est quoi le FFI ? J'ai un peu cherché mais c'est un peu vague pour moi Embarassed Apparemment cela va plus vite… mais concrètement ca peut faire quoi?

Merci d'avance !




______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Librairie pour batch 
Citation:
Il y a une documentation pour les utilisations de rundll32? Est-il possible de charger des polices et tout ce qui est mentionné ici https://fr.wikipedia.org/wiki/Dynamic_Link_Library?
rundll32 est extrêmement limité, il ne supporte pas les variables ni même les structures et peut poser problème avec certaines fonctions.
Il est généralement fait pour fonctionner avec des fonctions faites pour. Il y a des exemples ici : https://ss64.com/nt/rundll32.html

Citation:
Si j'ai bien compris (d'après mes recherches) c'est pour la communication entre la commande externe et le programme batch ? Et donc l'WinAPI sait pas transmettre tout seul ses commandes au BATCH?
Oui et non, c'est ce que j'appelle un "modèle de commande externe en serveur" Shocked .
En gros, on démarre une commande en arrière plan puis on lui envoie des messages (avec différentes techniques).
Du coup, sauf pour certaines cas, cette communication se fait à l'aide d'une commande externe (et non pas avec du code batch directement).
Code:
batch
@Echo off
setlocal enabledelayedexpansion

(
    socket -id:bin_test -n
    socket -id:bin_test -c new server
    socket -id:bin_test -c bind server 127.0.0.1 25567
    socket -id:bin_test -c listen server 1

    socket -id:bin_test -c new client
    socket -id:bin_test -c connect client 127.0.0.1 25567

    socket -id:bin_test -c accept server socket > nul
) || goto :error

:: Send binary file
socket -id:bin_test -c nms_send client < bin_test || echo nms_send error (!errorlevel!)

:: Receive binary file
socket -id:bin_test -c nms_recv socket > bin_output || echo nms_recv error (!errorlevel!)

echo Finished, check bin_output
goto :end

:error
echo Error occured.
goto :end

:end
socket -id:bin_test -c exit
pause
goto :eof
Il faut savoir qu'il y a une instance de socket.exe en arrière plan ce qui permet de garder des variables (ici des sockets) que ne peuvent pas gérer cmd ni même une commande externe batbox-like.

Si tu veux plus d'informations sur comment marche cette commande socket.exe :
- https://gitlab.com/TSnake41/darkbox/blob/master/lib/ipc/ + https://gitlab.com/TSnake41/darkbox/blob/master/lib/socket_ipc.h
- https://gitlab.com/TSnake41/darkbox/tree/master/socket
PS: socket.exe : darkbox-socket

Citation:
C'est quoi le FFI ? J'ai un peu cherché mais c'est un peu vague pour moi Embarassed Apparemment cela va plus vite… mais concrètement ca peut faire quoi?
A foreign function interface (FFI) is a mechanism by which a program written in one programming language can call routines or make use of services written in another.

En Français, ça permet d'utiliser des fonctions C en Batch de façon relativement transparente.

Comme cmd a aucune idée de ce qu'est une variable FFI, il faut créer une commande externe extrêmement avancée pour ce genre de chose.

Par exemple, ça permettrait de faire un tel système si on ajoute le point d'avant (avec les serveurs) :
Code:
batch
@Echo off
:: On démarre le serveur FFI
bffi -n
call :init

call :MessageBox
goto :eof

:init
bffi -d "int MessageBox(DWORD, char *, char *, unsigned int);"
goto :eof

:: call :MessageBox Title Caption
:MessageBox
setlocal
for /f %%A in ('bffi -nv DWORD 0') do set hwnd=%%A
for /f %%A in ('bffi -nv "char *" %1') do set title=%%A
for /f %%A in ('bffi -nv "char *" %2') do set caption=%%A
for /f %%A in ('bffi -nv "unsigned int" 0') do set utype=%%A

bffi -c MessageBoxA !hwnd! !title! !caption! !utype!
endlocal
goto :eof
(exemple imaginé)
En théorie, un tel système permettra de faire fonctionner n'importe quelle librairie utilisant une API C (genre WinAPI, GLFW, SDL, Lua, CPython, ...) sauf que autant dire : c'est super complexe.

Par exemple, pour OpenCV, le mieux serait d'utiliser un modèle serveur à-la socket.exe comme le FFI serait extrêmement complexe à mettre en place.
Il faut juste suivre comment marche OpenCV et réussir à mettre en place une commande externe et c'est bon.



Répondre en citant
Message [R]Librairie pour batch 
Ok merci Okay
Pour Socket.exe c'est un serveur à l'interieur du pc en gros donc qui ne communique pas avec un reseau externe? Ce serveur peut il marcher comme serveur ftp ?
Ce sont des pistes intéressantes pour des gens avec des connaissances en C et batch Okay

Merci de m'avoir éclairé !




______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Librairie pour batch 
programme a écrit:
Ok merci Okay
Pour Socket.exe c'est un serveur à l'interieur du pc en gros donc qui ne communique pas avec un reseau externe? Ce serveur peut il marcher comme serveur ftp ?
Ce sont des pistes intéressantes pour des gens avec des connaissances en C et batch Okay

Merci de m'avoir éclairé !
Par vraiment comme un serveur ftp, mais il est possible de faire communiquer un script batch avec un autre (en faisant ça) :

Une chose que j'ai oublié de mettre, dans les 2 batch, il y a un serveur, et un client (voir ici).

On peut aussi éventuellement faire ça avec plus de travail :

En ayant le batch qui fasse serveur FTP.

Le serveur IPC n'est pas spécialement TCP/IP, il fonctionne que pour faire de l'IPC, d'ailleurs, sur les plateformes unixiennes, les sockets sont implémentés avec des sockets spécialisés uniquement locaux (unix domain sockets donc pas de TCP/IP).



Répondre en citant
Message [R]Librairie pour batch 
TSnake41 a écrit:
programme a écrit:
Ok merci Okay
Pour Socket.exe c'est un serveur à l'interieur du pc en gros donc qui ne communique pas avec un reseau externe? Ce serveur peut il marcher comme serveur ftp ?
Ce sont des pistes intéressantes pour des gens avec des connaissances en C et batch Okay

Merci de m'avoir éclairé !
Par vraiment comme un serveur ftp, mais il est possible de faire communiquer un script batch avec un autre (en faisant ça) :

Une chose que j'ai oublié de mettre, dans les 2 batch, il y a un serveur, et un client (voir ici).

On peut aussi éventuellement faire ça avec plus de travail :

En ayant le batch qui fasse serveur FTP.

Le serveur IPC n'est pas spécialement TCP/IP, il fonctionne que pour faire de l'IPC, d'ailleurs, sur les plateformes unixiennes, les sockets sont implémentés avec des sockets spécialisés uniquement locaux (unix domain sockets donc pas de TCP/IP).


Okay Okay Okay Merci pour tout




______________________________________________________

Programme
Skype
Message [R]Librairie pour batch 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch