Help compiling on Win8.1 or a feature request?

  • I can't seem to get around all the "deprecated" and "GetCompressedFileSizeW not found" errors...

    I need to add a feature and recompile 7zFM 9.22 (or the most recent source available) under Win8.1 64bit (but it needs to be functional under Win7 64bit also). I have downloaded VS 2013 Express and have followed several guides, but none have addressed the current issue that is stopping me.

    So my question is can anyone please layout the necessary steps to get 7zFM to compile in Win8.1 64bit?


    My users need to be able to drag and drop an email attachment directly from Outlook 2013 to 7zFM and it add the file to the zip archive (just like with a file dropped from Explorer). Currently, they are dropping to the desktop temporarily and then re-dragging to 7zFM. Is this something that I can request as a feature addition? Once I can compile, I will provide a diff! Or is there a reason that this can't be provided (before I begin)?


  • Nikkho

    I do not think that compiling under a different OS version will generate a different binary code.

    I guess your problem is more related on new permissions with Windows 8.x, that prevent dragging and dropping files between elevated and non elevated process.

    This can be overcomed, in fact my FileOptimizer does that by using ChangeWindowMessageFilterProc. Take a look at

  • I elevated both processes on my Win8.1 64bit box, but still couldn't drag and drop from and Outlook 2013 attachment and 7zFM with an archive open. Can anyone confirm that this should be functional? I fear that the drag and drop target types just isn't listening for what Outlook 2013 is giving...

    But my primary question is: any working instructions on how to compile on Win8.1 64bit?
    Attached is my current hurdle...

  • Igor Pavlov
    Igor Pavlov

    You can fix FSFolder.cpp:

    #include "SysIconUtils.h"
    #if _WIN32_WINNT < 0x0501
    #ifdef _APISETFILE_
    // Windows SDK 8.1 defines in fileapi.h the function GetCompressedFileSizeW only if _WIN32_WINNT >= 0x0501
    // But real support version for that function is NT 3.1 (probably)
    // So we must define GetCompressedFileSizeW
    WINBASEAPI DWORD WINAPI GetCompressedFileSizeW(LPCWSTR lpFileName, LPDWORD  lpFileSizeHigh );
    Last edit: Igor Pavlov 2014-05-07