DWORD dwLow + DWORD dwHigh => __int64 nNum



  • Hallo Leute.

    Gegeben seinen zwei DWORD Werte, einmal das Low order word und das High order word. Diese möchte ich in einen __int64-Integer verwandeln, um die dann vergleichen zu können.

    Also 32bit + 32bit = 64 bit.

    Danke.



  • nNum = (dwHigh << 32) | dwLow;
    


  • YO!!! bester mann! danke

    Aber was muss ich machen, um die beiden Werte wieder zu extrahieren, das heißt einen Lower und einen Higher part zu bekommen?

    Ich möchte das so machen, dass ich die __int64-Zahl aus einer INI-Datei gewinne. Wie soll ich dass machen? Mit (__int64)GetPrivateProfileInt???



  • Script-Styler schrieb:

    Aber was muss ich machen, um die beiden Werte wieder zu extrahieren, das heißt einen Lower und einen Higher part zu bekommen?

    dwLow = nNum & 0xFFFFFFFF;
    dwHigh = (nNum >> 32) & 0xFFFFFFFF;

    Script-Styler schrieb:

    Ich möchte das so machen, dass ich die __int64-Zahl aus einer INI-Datei gewinne. Wie soll ich dass machen? Mit (__int64)GetPrivateProfileInt???

    da frage einen winapi spezialisten 😛



  • Ich nehme dafür immer ULARGE_INTEGER:

    DWORD dwLow = 1, dwHigh = 1;
    
    ULARGE_INTEGER ulTemp;
    ulTemp.LowPart = dwLow;
    ulTemp.HighPart = dwHigh;
    
    DWORDLONG dwlTemp = ulTemp.QuadPart;
    
    ulTemp.QuadPart = 0x000000FF000000FF;
    
    dwLow = ulTemp.LowPart;
    dwHigh = ulTemp.HighPart;
    


  • DWORDLONG dwlTemp = ulTemp.QuadPart;
    
    ulTemp.QuadPart = 0x000000FF000000FF;
    

    Wofür ist das gut???



  • Script-Styler schrieb:

    DWORDLONG dwlTemp = ulTemp.QuadPart;
    
    ulTemp.QuadPart = 0x000000FF000000FF;
    

    Wofür ist das gut???

    das soll nur symbolisieren was in dem moment in ulTemp.QuadPart drin ist 🙂



  • So, ich habe verstanden.

    Aber jetzt habe ich meine Func implementiert.
    Die returnt, ob die Datei in den Algy eingeschlossen werden soll, oder nicht.
    ulMaxFileSize ist die maximale Dateigröße und lpFilter der Filter, der ist aber uninteressand^^

    BOOL FileFinder::CheckFile(LPWIN32_FIND_DATA lpFindData)
    {
    	ULARGE_INTEGER ulFileSize;
    	ulFileSize.LowPart = lpFindData->nFileSizeLow;
    	ulFileSize.HighPart = lpFindData->nFileSizeHigh;
    
    	if (PathMatchSpec(lpFindData->cFileName, lpFilter) == FALSE)
    		return FALSE;
    
    	if ((ulMaxFileSize.QuadPart > 0) && (ulFileSize.QuadPart > ulFileSize.QuadPart))
    		return FALSE;
    
    	return TRUE;
    }
    

    Danke.



  • In Zeile 10 ist Dir wohl ein Fehler unterlaufen, "ulFileSize.QuadPart > ulFileSize.QuadPart" wird garantiert nie auftreten. 😉


Anmelden zum Antworten