Bonjour,
J'ai une procédure d'écriture en mémoire partagée qui fonctionne très bien sous Delphi7 mais ne fonctionne pas sous Delphi10.
Il s'agit d'écrire en mémoire partagée une chaine de quelques caractères.
Avec Delphi10, je n'écris que le premier caractère de la chaine ! Pourquoi ? Je ne sais pas.
Je pense qu'il s'agit d'un problème entre String et AnsiString ou Char et AnsiChar ou de longueur de chaine mais je ne vois pas où.
Je vous soumets la procédure D7 :
Si quelqu'un peut me corriger ça pour que ça marche avec D10, je l'en remercie par avance pour l'aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 procedure TForm1.WriteInSharedMemory(const lpLine:string); var lpData: Pointer; //pointeur sur la mémoire partagée begin //on prend possession du mutex pour écrire et empêcher les autres d'écrire waitForSingleObject(hMutex,3000); //on attend 3 sec maximum lpData:=MapViewOfFile(hSharedMemory,FILE_MAP_WRITE,0,0,SizeOf(Char)*Length(lpLine)+4); if lpData=nil then begin PanelLastError.caption:='Echec d''écriture en mémoire partagée'; exit; end; //on écrit la longueur de la chaine dans les 32 premiers bits de la mémoire partagée Integer(lpData^):=SizeOf(Char)*Length(lpLine); //on écrit la chaine CopyMemory(Pointer(Integer(lpData)+4),PChar(lpLine),SizeOf(Char)*Length(lpLine)); //on signale qu'on finit d'écrire UnMapViewOfFile(lpData); //on signale l'évènement aux autres applis PulseEvent(HEvent); //on libère le Mutex pour que les autres puissent écrire ReleaseMutex(hMutex); end;
Gab
Partager