Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Créer une variable Panoramic à partir d'une DLL Ven 22 Jan 2021 - 12:39 | |
| Oui, je sais - je touche là à un domainde réservé. Et pourtant... Je suggère de créer un évènement INTERNE A PANORAMIC, selon le style du USER_EVENT, mais sans que cela soit traduit à un évènement Panoramic pour l'utilisateur. Actuellement, pour déclencher un évènement USER_EVENT, j'utilise le code évènement - Code:
-
USER_EVENT_Message = WM_USER + 3000; Ca marche parfaitement et je m'en sers en abondance. Je suggère donc un code du type - Code:
-
PANORAMIC_EVENT_Message = WM_USER + 3001; avec LPARAM = integer(@NomVariablePanoramicSimple[1]) et LPARAM = longueur de la variable si la variable est du type string (nom terminé par $). Panoramic intercepterait cet évènement et créerait la variable du nom indiqué (et de la longueur indiquée remplie d'espaces si la variable est de type string). Si la variable de ce nom existe déjà dans Panoramic, elle serait remplacée. SendMessage devrait retourner une valeur correspondant à adr(NomDeLaVariablePanoramicCree). Evidemment, ce retour ne serait fait que lorsque la création de la variable est achevée, selon le principe d'une opération synchrone. Et, bien sûr, ce message PANORAMIC_EVENT_Message serait traîté par Panoramic de façon interne, sans générer un USER_EVENT au niveau du code du programme utilisateur !Ceci permettrait à une DLL de retourner des chaînes de caractères d'une façon beaucoup plus simple. Actuellement, il faut faire: - Code:
-
dim s$, res% s$ = string$(500," ") res% = dll_call1("Test",adr(s$)) s$ = trim$(s$)
ce qui est lourd et "consomme" 1 paramètre sur les 6 possibles. Avec ce que je propose, on pourrait coder comme suit: - Code:
-
dim res% res% = call_call0("test") message "résultat = "+ResultatDeTest$ sachant que dans la fonction Test, j'aurai codé: - Code:
-
function Test: integer; stdcall; export; var s, nom: string; p: pByte; begin s := "Ceci est mon résultat de la fonction TEST"; nom := 'ResultatDeTest$'; p := pByte(SendMessage(MainFormHandle,PANORAMIC_EVENT_Message,Length(s),integer(@nom[1]))); ... ici, je copie s dans p^ par une boucle sur la longueur de s
Dernière édition par Klaus le Mar 12 Oct 2021 - 10:34, édité 5 fois | |
|
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Créer une variable Panoramic à partir d'une DLL Jeu 4 Fév 2021 - 13:02 | |
| C'est une idée qui me parait intéressante. Je vais voir comment la mettre en musique. Mais cela s'adressera à des spécialistes et sera spécifique à Windows. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer une variable Panoramic à partir d'une DLL Jeu 4 Fév 2021 - 13:27 | |
| En effet. Tout comme d'autres fonctions: HANDLE OBJECT_INTERNAL HANDLE_APPLICATION HANDLE_CANVAS etc Evidemment, l'usage est réservé pour l'accès à des DLLs dans l'environnement Windows. Pour ma part, c'est ma cible exclusive et tout l'objet de KGF.dll.
Juste pour info: je viens d'implémenter la gestion d'une zone de mémoire partagée, via le mapping d'un fichier en mémoire et des procédures de verrouillage par CriticalSection. Ca marche parfaitement et l'effet est bluffant. Je suis en train d'écrire la doc et je vais publier tout cela. Cela servira surtout à développer des applications client/serveur an Panoramic, sur une même station, afin de partager les données. Ultérieurement, j'envisage d'étendre le mécanisme à une configuration de machines multiples en réseau (local ou distant), ce qui permettra de jouer en réseau.
Windows a encore beaucoup de choses à nous révéler ! | |
|
Contenu sponsorisé
| Sujet: Re: Créer une variable Panoramic à partir d'une DLL | |
| |
|