2010年8月2日 星期一

如何在wxWidgets 2.9編譯wxActivex (wxIE)

wxActiveX可以讓wxWidgets在windows的環境下使用ActiveX元件,
不過它很久沒更新了,所以在wxWidgets 2.8、2.9都得自己動手改程式。



  1. 下載wxActiveX
  2. 將wxActiveX解壓縮。
  3. 用Microsoft Visual C++ 2008 Express Edition(下載)開啟它的wxIE.dsp,會問要不要轉換,按「是」




  4. 更改專案的環境設定:






    1. 把組態切換到Unicode Release
    2. 將「其他Include目錄」更改到正確的wxWidgets 2.9路徑。(例:"D:\libs\wxWidgets-2.9.1\include";"D:\libs\wxWidgets-2.9.1\lib\vc_lib\mswu")
    3. 將「前置處理器定義」的內容換成


      WIN32
      __WIN32__
      __WXMSW__
      wxUSE_UNICODE
      _WINDOWS
      _CRT_SECURE_DEPRECATE
      _CRT_NONSTDC_NO_DEPRECATE
      NDEBUG
    4. 將「其他程式庫目錄」更改到編譯好的wxWidgets 2.9程式庫路徑。 (例:"D:\libs\wxWidgets-2.9.1\lib\vc_lib";"D:\libs\wxWidgets-2.9.1\lib\vc_lib\mswu")
    5. 將「其他相依性」裡的wxmswu.lib改成wxmsw29u.lib
  5. wxIEFrm.cpp第265行:


    原始:
    wxOPEN
    修改後:
    wxFD_OPEN
  6. wxActiveXFrame.cpp第117行:


    原始:
    (wxObjectEventFunction) OnActiveXEvent
    修改後:
    (wxObjectEventFunction) &wxActiveXFrame :: OnActiveXEvent
  7. wxactivex.cpp第303行:


    原始:
    SetTransparent();
    修改後:
    //SetTransparent();
  8. wxactivex.cpp第909行:


    原始:
    m_activeX->GetParent()->ProcessEvent(event);
    修改後:
    m_activeX->GetParent()->GetEventHandler()->ProcessEvent(event);
  9. wxactivex.cpp第924行:


    原始:
    m_activeX->GetParent()->AddPendingEvent(event);
    修改後:
    m_activeX->GetParent()->GetEventHandler()->AddPendingEvent(event);
  10. wxactivex.cpp第1033行:


    原始:
    for (i = 0; i < m_params.GetCount(); i++)
    修改後:
    for (int i = 0; i < m_params.GetCount(); i++)
  11. wxactivex.cpp第1533行:


    原始:
    for (i = 0; i < nargs; i++)
    修改後:
    for (int i = 0; i < nargs; i++)
  12. wxactivex.cpp第1672行:


    原始:
    dc.BeginDrawing();
    修改後:
    //dc.BeginDrawing();
  13. wxactivex.cpp第1697行:


    原始:
    dc.EndDrawing();
    修改後:
    //dc.EndDrawing();
  14. wxactivex.cpp第2494行:


    原始:
    char buf[256];
    修改後:
    WCHAR buf[256];
  15. IEHtmlWin.cpp第174行:


    原始:
    int n = min(prepend.size(), cb);
    修改後:
    int n = min(prepend.size(), cb);

沒有留言:

張貼留言