typedef struct _GUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
GUID est une structure qui n'a pas d'opérateur == surchargé, donc si vous souhaitez comparer deux GUID, vous devez soit implémenter l'opérateur ==, soit comparer honnêtement les variables membres une par une.
// PVOID lpbuffer;
// GUID g = {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}};
GUID *p = (GUID*)lpbuffer;
BOOL flag = FALSE;
if ((*p->Data1 == g.Data1)
&& (*p->Data2 == g.Data2)
&& (*p->Data3 == g.Data3)){
flag = TRUE;
for(int i; i < 8; i++){
if (*p->Data4[i] != g.Data4[i]){
flag = FALSE;
}
}
}
// flag变量为比较结果
Quant au type GUID qui ne surcharge pas l'opérateur == mais connaît sa structure interne, vous pouvez vous référer à la réponse d'un autre répondant @一代Key客
Le type GUID n'a pas surchargé l'opérateur == et ne connaît pas sa structure interne, je pense qu'il peut être comparé octet par octet
.
if (sizeof(*lpbuffer) != sizeof(g)) return false;
size_t size = sizeof(*lpbuffer);
size_t i = 0;
char* p1 = (char*)lpbuffer;
char* p2 = &g;
while ( i != size ) {
if (*p1 != *p2) return false;
p1++;
p2++;
i++;
}
return true;
Selon la définition de la structure GUID sur MSDN
GUID est une structure qui n'a pas d'opérateur == surchargé, donc si vous souhaitez comparer deux GUID, vous devez soit implémenter l'opérateur ==, soit comparer honnêtement les variables membres une par une.
Il existe deux situations :
Les adresses sont différentes, en supposant que le type GUID surcharge l'opérateur ==
L'adresse est la même et le nombre d'octets est le même
Quant au type GUID qui ne surcharge pas l'opérateur == mais connaît sa structure interne, vous pouvez vous référer à la réponse d'un autre répondant @一代Key客
Le type GUID n'a pas surchargé l'opérateur == et ne connaît pas sa structure interne, je pense qu'il peut être comparé octet par octet
.