Explorer++ 컴파일

Code/Desktop 2015. 5. 16. 03:02

Explorer++ patch and build(compile)
    - 최근 정렬 방식으로 설정저장하고 새탭열기 패치하기


    - last sorting method (sort by type) save and load (alignment  mode remember)

- visual studio 2013(vc12) 에서 빌드


//===========
* 패치한 소스 (patched source)


pantheios-1.0.1-beta214-vc12 patch.7z


stlsoft-1.9.118-vc12 patch.7z



explorer _1.3.5_src-vc12 patch.7z


Explorer exe.rar




//================
* 본래 소스 다운로드
https://explorerplusplus.com/download



* 필요한 추가 라이브러리
    Boost C++ http://www.boost.org
        - 빌드 방법 : http://codens.info/653


    Pantheios logging library http://www.pantheios.org/
    STLSoft libraries http://www.pantheios.org/



* 환경변수 추가
$(BOOST)    C:\Program Files (x86)\boost_1_58_0
$(BOOST_LIB)    %Boost%\stage\lib

$(STLSOFT)    c:\stlsoft-1.9.118
$(PANTHEIOS) c:\pantheios-1.0.1-beta214


*INCLUDE
c:\pantheios-1.0.1-beta214;c:\stlsoft-1.9.118;%Boost_root%;

* LIB
%Boost_root%\stage\lib


//==================================
//분석

//추가
HASH_SORTMODEGLOBAL:    m_nSortModeGlobal

HASH_SORTASCENDINGGLOBAL:    m_bSortAscendingGlobal // 기준


void Explorerplusplus::OnListViewColumnClick(LPARAM lParam)
{
    NMLISTVIEW *pnmlv = NULL;

    pnmlv = (NMLISTVIEW *)lParam;

    int nSortMode = m_pActiveShellBrowser->ColumnClicked(pnmlv->iSubItem);
    m_nSortModeGlobal = nSortMode;



//설정 저장
void Explorerplusplus::CLoadSaveXML::SaveTabs(void)
{
    m_pContainer->SaveTabSettingsToXML(m_pXMLDom,m_pRoot);
}

void Explorerplusplus::SaveTabSettingsToXML(MSXML2::IXMLDOMDocument *pXMLDom,
MSXML2::IXMLDOMElement *pRoot)
{


void Explorerplusplus::SaveTabSettingsToXMLnternal(MSXML2::IXMLDOMDocument *pXMLDom,MSXML2::IXMLDOMElement *pe)
{

        m_pFolderView[(int)tcItem.lParam]->GetSortMode(&SortMode);
        NXMLSettings::AddAttributeToNode(pXMLDom,pParentNode,_T("SortMode"),NXMLSettings::EncodeIntValue(SortMode));


//설정 로드
    - 호출됨
void Explorerplusplus::CLoadSaveXML::LoadDefaultColumns(void)
{
    m_pContainer->LoadDefaultColumnsFromXML(m_pXMLDom);
}

void Explorerplusplus::CLoadSaveXML::LoadState(void)
    m_pContainer->LoadStateFromXML(m_pXMLDom);
        int Explorerplusplus::LoadTabSettingsFromXML(MSXML2::IXMLDOMDocument *pXMLDom)




- 새탭
HRESULT Explorerplusplus::CreateNewTab(TCHAR *TabDirectory, InitialSettings_t *pSettings,TabInfo_t *pTabInfo,BOOL bSwitchToNewTab, int *pTabObjectIndex)
{

HRESULT Explorerplusplus::CreateNewTab(LPITEMIDLIST pidlDirectory, InitialSettings_t *pSettings,TabInfo_t *pTabInfo,BOOL bSwitchToNewTab, int *pTabObjectIndex)
{

            is.SortMode                = DEFAULT_SORT_MODE; // FSM_NAME



- 정렬
IDM_ARRANGEICONSBY_ASCENDING
LRESULT CALLBACK Explorerplusplus::CommandHandler(HWND hwnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
        case IDM_ARRANGEICONSBY_ASCENDING:
            OnSortByAscending(TRUE);

void Explorerplusplus::OnSortByAscending(BOOL bSortAscending)
        m_pActiveShellBrowser->SetSortAscending(bSortAscending); IShellBrowser2
            BOOL CFolderView::SetSortAscending(BOOL bAscending){    m_bSortAscending = bAscending; return m_bSortAscending;}

        m_pFolderView[m_iObjectIndex]->GetSortMode(&SortMode); MyIFolderView2
            HRESULT CFolderView::GetSortMode(UINT *SortMode){    *SortMode = m_SortMode;    return S_OK; }
       
        m_pFolderView[m_iObjectIndex]->SortFolder(SortMode);
            HRESULT CFolderView::SortFolder(UINT SortMode){   
                m_SortMode = SortMode;//FSM_NAME = 1 (기본), FSM_TYPE    = 4,



-
void Explorerplusplus::SetDirectorySpecificSettings(int iTab,LPITEMIDLIST pidlDirectory)
    m_pFolderView[iIndexInternal]->SetSortMode(ds.dsi.SortMode);
        HRESULT CFolderView::SetSortMode(UINT SortMode){    m_SortMode    = SortMode;    return S_OK; }
   





//==================================
//에러 처리

//==================================
PANTHEIOS Visual C++ version not supported visual studio 2013
    pantheios-1_0_1-beta214-MSVC2013-patch.diff 대로 수정
http://sourceforge.net/p/pantheios/patches/9/

    windows diff patch

//==================================
Error    15    error LNK1104: cannot open file 'pantheios.1.util.vc12.widestring.mt.debug.lib'    D:\Projects\explorer++_1.3.5_src\Explorer++\Explorer++\LINK    Explorer++

    -> 해결 방법 : PANTHEIOS 라이브러리 빌드 (컴파일) 방법
http://sourceforge.net/p/pantheios/patches/9/ 에서 make 파일 다운로드
    make 파일 수정
CC_F_WARNING_ERR        =    -WX-
CPPC_F_WARNING_ERR        =    -WX-


    C:\pantheios-1.0.1-beta214\build\vc12복사 ->  이동 -> cmd.exe
> "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
> nmake build


    - 64bit 빌드 방법
> "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x64
> nmake build



//==================================
    iterator_helper.hpp
    7    IntelliSense: #error directive: reverse_iterator form not recognised    c:\stlsoft-1.9.118\include\stlsoft\util\std\iterator_helper.hpp    475    4    Explorer++

stlsoft-1_9_117-MSVC2013-patch.diff 대로 수정
http://sourceforge.net/p/stlsoft/patches/2/


//==================================
error RC2104 : undefined keyword or key name $WCREV$
    -> Version.h 수정

//==================================
* Version.h 파일이 없는 문제
    -> Version.h.tmpl 파일을 Version.h로 복사

//==================================
error C1189: #error :  Dinkumware C++ Library version unrecognised: are you using a version of VC++ later than 10.0?    c:\stlsoft-1.9.118\include\stlsoft\util\std\library_discriminator.hpp    351    1    Explorer++

STLsoft 1.9 compilation error: reverse_iterator form not recognised   Leave a comment

    -> 원인 : STLSOFT 가 vc10이상에서 컴파일 안됨
    -> 진짜원인 : Dinkumware 버전을 제대로 판단못함
    http://binglongx.com/2010/08/27/stlsoft-1-9-compilation-error-reverse_iterator-form-not-recognised/
//#include <yvals.h> //_CPPLIB_VER 정의됨
VC버전                               (9),  10,        11,        12
_CPPLIB_VER      -  -  310  313  405 503/5 520        540,    610 //yval.h
 
    -> 해결방법 :
C:\stlsoft-1.9.118\include\stlsoft\util\std\library_discriminator.hpp 수정

#define STLSOFT_CF_DINKUMWARE_VC_VERSION_12_0           (0x0c00)//293행 추가

//349행에 추가
#  elif _CPPLIB_VER <= 610
/* Version 120 */
#   ifdef STLSOFT_COMPILE_VERBOSE
#    pragma message("  Dinkumware version 12.0")
#   endif /* STLSOFT_COMPILE_VERBOSE */
#   define STLSOFT_CF_STD_LIBRARY_DINKUMWARE_VC_VERSION      STLSOFT_CF_DINKUMWARE_VC_VERSION_12_0


//==================================
Error    106    error MSB3073: The command "subwcrev.exe "D:\Projects\explorer++_1.3.5_src\Explorer++\.." "D:\Projects\explorer++_1.3.5_src\Explorer++\Explorer++\Version.h.tmpl" "D:\Projects\explorer++_1.3.5_src\Explorer++\Explorer++\Version.h"
:VCEnd" exited with code 9009.   
    -> 원인 : tortoisesvn 설치 요구
    -> 해결 : 주석처리 rem

//==================================
MSXML2 IntelliSense: name followed by  must be a class or namespace name   

//==================================
IAsyncOperation class undefined    windows 8
https://msdn.microsoft.com/en-us/library/windows/desktop/bb776309%28v=vs.85%29.aspx
    - 원인 : Win 8 SDK 부터 IAsyncOperation 가 IDataObjectAsyncCapability 로 바뀜
        Windows::Foundation::IAsyncOperation<T> 와 충돌되서
    - 해결방법 :
        - 방법1 : SDK를 Win7로 변경
        - 방법2 : IAsyncOperation 를 IDataObjectAsyncCapability 로 변경

#if _MSC_VER >= 1700
#define IAsyncOperation        IDataObjectAsyncCapability
#define IID_IAsyncOperation IID_IDataObjectAsyncCapability
#endif


//참고
https://github.com/mozilla-services/services-central-legacy/blob/master/widget/windows/nsDataObj.h



//================================
에러 : windows 7.1 sdk (.net 4.0) install ERROR in windows 8.1 (설치 문제 발생)
    DDSet_Error: Patch Hooks: Missing required property 'ProductFamily': Setup cannot continue.
    - 해결방법 : Visual Studio 2010 Redistributable  를 제거한다
https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/6e6c8a17-1666-42fa-9b5b-dfc21845d2f9/error-installing-windows-7-sdk-71-with-vs2008-vs2010-premium-on-win-7-32bit?forum=windowssdk



반응형
Posted by codens