Ecriture en mémoire partagée Delphi10
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 :
Code:
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; |
Si quelqu'un peut me corriger ça pour que ça marche avec D10, je l'en remercie par avance pour l'aide
Gab