[Résolu] Communication Inter-Application via Zone memoire.
Stagiaire WDF
Inscrit:
14/02/2005 13:09
De Londres (UK)
Post(s): 9
Bjr,

je voudrais faire communiquer une DLL en delphi pour qu'elle puisse appeler une proc WD et lui retourner des valeurs.
J'ai essaye de passer l'adresse de la procedure avec la handle de mon exe mais a priori le call-back ne se fait pas. Donc je cherche autre chose.

Je voudrais essayer d'utiliser les zones memoires.

Est-ce que quelqu'un a reussi a dialoguer entre Delphi et WD via les zones memoires ?

D'avance merci.

Romain.

Contribution le : 14/02/2005 13:11
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.
Stagiaire WDF
Inscrit:
27/07/2004 08:52
Post(s): 11
Bonjour,

via des zones mémoires, non !

Mais avec des messages windows, oui.

Pascal

Contribution le : 14/02/2005 13:35
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.

Inscrit:
19/11/2002 12:20
Post(s): 390
C'est tout à fait possible au contraire...
Il y a un exemple livré avec Windev, il faut regarder dans le "guide", ça s'appelle départements de France, un truc du genre...

Contribution le : 14/02/2005 19:40
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.

Inscrit:
19/11/2002 12:20
Post(s): 390
L'exemple est livré apparemment avec Windev 7, fait une recherche sur la classe cmessage:
C:\WinDev75\Exemples\WD7 Partage de zone memoire

et dans les versions 8 et 9 de Windev Mobile.

Contribution le : 14/02/2005 19:53
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.
Stagiaire WDF
Inscrit:
14/02/2005 13:09
De Londres (UK)
Post(s): 9
En fait, j'ai fait des tests avec le freeware Process Explorer, et j'ai vu que l'utilisation des fonctions ZoneMemoire de WD8 ne produit pas qqchose de compatible avec les MMF (memory mapped files de Windows MSDN MMF article).
Par contre j'ai fait un bout de code qui utilise directement les API Windows, et la, c'est compatible avec les MMF ( ).

Par contre, j'ai evidemment un autre souci.
je definie un type structure et j'utilise l'API MapViewOfFile qui retourne un pointeur vers la zone memoire. J'ai essaye la fonction transfert mais cela ne fonctionne pas.

mon code snippet est :

Citation :

///////////////////
// Declaration Globlale
//////////////////////
TMMFData est une structure
dwFlags est un entier //Type C : DWORD
NextHook est un entier//: HHOOK;
WinHandle est un entier//: HWND;
MsgToSend est un entier //: DWORD;
BlockKeys est un booléen//: boolean;
FIN
MMFHandle est un entier// THandle;
MMFData est un entier // : PMMFData;

/////////////////////////////////
// code click Btn
//////////////////////
hMMF est un entier //: THandle;
pMMF est un entier//: PMMFData;
sMMF est une TMMFData
resultat est un entier= 0

hMMF = OpenMMF(Saisie1);
IF hMMF <> 0 THEN
pMMF = MapMMF(hMMF);
IF pMMF <> Null THEN
Transfert(&sMMF,pMMF,17)
Trace(sMMF:WinHandle,sMMF:MsgToSend,sMMF:BlockKeys)
UnMapMMF(pMMF);
CloseMMF(hMMF);
END
END


Si qqu'un sait comment associer le pointeur renvoye a ma structure WD, je suis preneur.

En outre, il faut aussi utiliser SizeOf de la structure mais je ne sais pas comment faire cela en WD [ la fonction taille marche uniquement pour les chaines..

Toutes les idees et conseils sont bienvenus.

Romain.

Contribution le : 15/02/2005 09:48
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour,

Pour récupérer la taille de tout objet il faut utiliser la fonction:
= dimension()

Contribution le : 15/02/2005 10:19
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.
Stagiaire WDF
Inscrit:
14/02/2005 13:09
De Londres (UK)
Post(s): 9
Merci ... et evidemment en connaissant la doc par coeur, ca marche mieux.

Sinon, des idees sur
<< comment associer le pointeur renvoye a ma structure WD >>

Romain.

Contribution le : 15/02/2005 10:24
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Je ne me suis pas permis de répondre plus en détails car je ne connais pas l'utilisation de ses apis.

pour passer des variables passées en paramettre et dont l'api doit renvoyer des infos vous devez passer ce paramètre par adresse en le préfixant par un '&'

Par conséquent vous pouvez normalement passer en paramètre directement une structure de données lorsque celle ci respecte la syntaxe attendue. (Donc pas nécessaire de passer tout par des entiers).

Contribution le : 15/02/2005 10:46
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.
Stagiaire WDF
Inscrit:
14/02/2005 13:09
De Londres (UK)
Post(s): 9
usuellement, j'utilise &var pour passer a une API une variable qui va etre modifiee mais dans ce cas precis, je veux utiliser l'API MapViewOfFile dont la syntaxe est :

LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap
);

Or cette API ne recoit pas la variable a modifier, elle renvoie un pointeur sur la zone memoire mappee.
Ensuite, on peut normalement lire le contenu de la zone via une structure.
D'ou ma question : comme les pointeurs n'existent pas sous WD, je pense recuperer un pointeur [entier] puis utiliser une variable Struct WD pour pointer a la meme adresse.

Mais :
1/ je ne sais pas comment faire l'assignation vers ma structure.
2/ il y a peut-etre une autre facon plus intelligente pour copier la zone pointee vers ma variable locale.



Romain.

Contribution le : 15/02/2005 11:10
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
1/ Normallement c'est avec la fonction Transfert() que l'on arrive à tranferer le contenu d'une adresse vers une struture.
(Ce que vous avez effectué apparement)

Vous pouvez aussi regarder via l'api RtlMoveMemory qui est similaire à la fonction WinDev.

Contribution le : 15/02/2005 12:33
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire.
Stagiaire WDF
Inscrit:
14/02/2005 13:09
De Londres (UK)
Post(s): 9
Je vais donc refaire des tests avec transfert et aussi directement l'api RtlMoveMemory.

Je vous dirai si j'ai du succes.

Merci pour l'aide.

Romain

Contribution le : 15/02/2005 12:44
Créer un fichier PDF de la contribution Imprimer


Re: Communication Inter-Application via Zone memoire [résolu].
Stagiaire WDF
Inscrit:
14/02/2005 13:09
De Londres (UK)
Post(s): 9
En fait, apres pas mal de test, tout marche beaucoup en utilisant dimension pour passer la taille de la structure (au lieu de la calculer a la main ).

Merci pour tous ces precieux conseils.

Romain .

Contribution le : 16/02/2005 10:11
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2