Bonjour,
Je crée un filemapping et avant de copier des données dedans je souhaite savoir si celui ci n'est pas déjà plein pour ne pas faire de bêtise alors voilà mon filemapping :
et ma vérification :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 hSharedData = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0/*high-order DWORD*/, BUF_SIZE, szName); if (hSharedData == NULL){ return 1; } ::pBuf = (LPTSTR) MapViewOfFile(hSharedData, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE); if (::pBuf == NULL){ CloseHandle(hSharedData); return 1; }
Le problème c'est que dans ce buffer il pourrat y avoir des caractère chinois par exemple et _tcslen (wcslen dans mon cas) retourne : Returns the length of the C wide string wcs. (le nombre de caractère donc) mais il me faut le nombre d'octet, j'ai essayer strlen sur le buffer (::pBuf) mais il foire totalement je pense que quelque chose m’échappe (strlen((const char*)::pBuff).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if (_tcslen(::pBuf) < BUF_SIZE && _tcslen(wszBuff) < BUF_SIZE - _tcslen(::pBuf)) CopyMemory((PVOID)(::pBuf + _tcslen(::pBuf)), Buff, (_tcslen(Buff) * sizeof(TCHAR)));
Merci d'avance.
Partager