發文作者:wekon | 九月 15, 2008

How to build Google Gears for Windows Mobile on Windows Server 2003 ?? (過程記錄)

[http://code.google.com/p/gears/wiki/BuildingGearsForWindows]

(特別聲明,此文章僅為嘗試的記錄,如果照此文章來改,會把 VS 改到爛掉)


Building

Install the following to create the build environment:

 

Follow the instructions at http://code.google.com/p/gears/source to set up your source tree.

Finally open a command prompt, setup your build environment, and build Gears. (These instructions assume you put Gears in c:\svn-gears and installed Visual Studio and the Platform SDK to their default locations.)

  • Start -> Run -> cmd.exe
    • cd \svn-gears\gears\gears\
    • “c:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"
    • “c:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\SetEnv.cmd"
    • set PATH=%PATH%;<<python path>>;<<wix path>>;<<unxutils path>>\usr\local\wbin
  • Build Gears
    • make BROWSER=[IE|FF] MODE=[dbg|opt] OS=[win32|wince]


Installing

To install Gears, go to bin-dbg\win32\installers\ from your Gears directory and run the .msi (IE and Firefox) or open the .xpi (Firefox only).

Testing

After installing, you should restart your browser. Go to the Gears API page. At the lower left corner, it should indicate the build of Gears that is active. You should be able to try out the demos or create your own. You can also run the unit tests in the source tree (/gears/test/unit_tests.html).

以上是 Google Gears 網站上的說明
然而,實際情形並不像是網站說的那麼簡單
在此環境下進行 build,會產生很多錯誤
以下將列舉我所遇到的錯誤以及我解決的方法
很多解決方式是硬來的,不知道最後會不會整個被我改爛掉

按照標準步驟,會出現 localtime 重複定義的問題
看到 VS8 中檔案 C:\Program Files\Microsoft Visual Studio 8\VC\include\time.inl
發現 line 114 的 localtime 已經被 DEPRECATED
既然如此,將原有程式片段註解如下,可暫時解決此問題

//_CRT_INSECURE_DEPRECATE(localtime_s) static __inline struct tm * __CRTDECL localtime(const time_t * _Time)
//{
//#pragma warning( push )
//#pragma warning( disable : 4996 )
//    return _localtime64(_Time);
//#pragma warning( pop )
//}

接下來,碰到 png.obj 檔做不出來的問題
奇怪的是,將 C:\gears-read-only\third_party\libpng\pngconf.h
裡面的 line 30 (#include “pngusr.h") 砍掉
就可以過了

再來,碰到了 zlib 中的 zutil.c 裡面 errno 重複定義問題
將 stdlib.h 中的 line 268 (#define errno   (*_errno())) 暫時註解掉即可

接下來這是個相當奇怪的問題
在 googleurl 中 url_canon_internal.cc 有用到 EINVAL
但是所有 googleurl 相關程式都沒有定義 EINVAL 是啥
因此會有 EINVAL 未宣告的錯誤產生
應該是因為 UnxUtils 不算是完整的 Unix 環境
所以有些系統定義的東西會找不到
沒辦法,只好自己寫
在用到前隨便找個地方加上 “#define EINVAL  22″ 即可

再來,碰到了 ATL 的問題
Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE\atldef.h(30) 回報:
“This version of ATL is not currently supported for CE"
將這行註解掉,先當作沒看到 …

然後,碰到了一個重複宣告的 warning
Microsoft Platform SDK for Windows Server 2003 R2\Include\winnt.h (950)
裡面宣告的 ARRAYSIZE 跟 gears 中 basictypes.h 裡面宣告的衝到
將 winnt.h 中的宣告暫時註解即可

再來,又是一個重複定義
Microsoft Platform SDK for Windows Server 2003 R2\Include\mshtml.h (22846)
中的 IHTMLDocument
跟 gears 裡面的 ie/activex_utils.h(45) 衝到
以及 Microsoft Platform SDK for Windows Server 2003 R2\Include\mshtml.h (40854)
中的 IHTMLDocument2
跟 gears 裡面的 ie/activex_utils.h(46) 衝到
在 mshtml.h 裡面的 IHTMLDocument2 似乎很重要
隨便註解掉會有嚴重錯誤發生
所以只好改將 activex_utils.h 的這兩行先註解

接著,下一個錯誤是認不得 HANDLE 型別
問題發生在 gears/base/common/file.h (236)
一般來說用到 HANDLE 應該是要寫  “#include <windows.h>"
這裡不知為何沒有
自己寫吧,在用到前找個地方補上去

再過來的問題是找不到檔案
問題發生在 gears/base/common/wince_compatibility.h (34)
找不到 connmgr.h 以及 connmgr_status.h
connmgr_status.h 這玩意兒是 Windows Mobile 的東西
所以要安裝 Windows Mobile SDk:
http://www.microsoft.com/downloads/details.aspx?familyid=83A52AF2-F524-4EC5-9155-717CBE5D25ED
安裝 Windows Mobile SDK 之前,要先裝 ActiveSync
http://www.microsoft.com/windowsmobile/en-us/help/synchronize/activesync45.mspx
安裝好後,用設定環境變數的方法似乎沒用
只好將 include 改寫為:
<C:\Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/connmgr.h>
#include <C:\Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/connmgr_status.h>

再來,又一個重複定義
Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h 裡面的
ARRAYSIZE 跟 gears/base/common/basictypes.h(172) 裡面的相衝
同樣的,將 winnt.h 中的註解掉

之後,還是重複定義
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winsock.h 跟
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winsock2.h 衝
所有的函式都衝到了
照理來說如果 #ifndef 用得對
應該不會發生這種事情才對
既然發生了,只好手動改
在 winsock2.h 前面加上 #ifndef _WINSOCKAPI_
後面加上  #endif  /* _WINSOCKAPI_ */

後面的錯誤,明天再說 …

繼續昨天的錯誤處理
首先是 Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Include\Armv4i\connmgr_status.h
裡面用到的 SOCKADDR_STORAGE 找不到
照理來說這是 Microsoft Visual Studio 8/VC/PlatformSDK/Include/winsock2.h
裡面會定義的,自己來吧
將以下定義塞在他前面:
#define _SS_MAXSIZE 128                  // Maximum size.
#define _SS_ALIGNSIZE (sizeof(__int64))  // Desired alignment.
#define _SS_PAD1SIZE (_SS_ALIGNSIZE – sizeof (short))
#define _SS_PAD2SIZE (_SS_MAXSIZE – (sizeof (short) + _SS_PAD1SIZE \
                                                    + _SS_ALIGNSIZE))
struct SOCKADDR_STORAGE {
    short ss_family;               // Address family.
    char __ss_pad1[_SS_PAD1SIZE];  // 6 byte pad, this is to make
                                   // implementation specific pad up to
                                   // alignment field that follows explicit
                                   // in the data structure.
    __int64 __ss_align;            // Field to force desired structure.
    char __ss_pad2[_SS_PAD2SIZE];  // 112 byte pad to achieve desired size;
                                   // _SS_MAXSIZE value minus size of
                                   // ss_family, __ss_pad1, and
                                   // __ss_align fields is 112.
};

再來,有個認不得 ATL 成員的錯誤
在 gears\base\common\wince_compatibility.h 中
會認為 PathFindExtensionW 以及 PathFindFileName 不是 ATL 成員
先將以下兩行註解掉:
using ATL::PathFindExtensionW;
using ATL::PathFindFileName;

同樣是在 wince_compatibility.h  裡面,
CreateThread 第三個參數型別錯誤
只好自己將 reinterpret_cast<DWORD (*)(void*)>(start_address),
改成 reinterpret_cast<LPTHREAD_START_ROUTINE>(start_address),

又是在 wince_compatibility.h  裡面,
GetShortPathNameW 的定義跟
Microsoft Visual Studio 8\VC\PlatformSDK\Include\WinBase.h 衝到
將 WinBase.h 中的 GetShortPathNameW 定義暫時註解掉即可

接下來,是 webvw.h 找不到的問題
將 gears/base/common/js_dom_element.cc(35) 改成
#include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/webvw.h>  // For IPIEHTMLInputTextElement
即可

然後,是 types.h 找不到的問題
通常 types.h 應該是指 sys/types.h
改成這樣就可以過了

再來,碰到了 SOCKADDR_STORAGE 重複定義的問題
實在是很無言,剛剛才說 SOCKADDR_STORAGE 找不到
現在又說重複定義
把剛剛加的這段:
#define _SS_MAXSIZE 128                  // Maximum size.
#define _SS_ALIGNSIZE (sizeof(__int64))  // Desired alignment.
#define _SS_PAD1SIZE (_SS_ALIGNSIZE – sizeof (short))
#define _SS_PAD2SIZE (_SS_MAXSIZE – (sizeof (short) + _SS_PAD1SIZE \
                                                    + _SS_ALIGNSIZE))
struct SOCKADDR_STORAGE {
    short ss_family;               // Address family.
    char __ss_pad1[_SS_PAD1SIZE];  // 6 byte pad, this is to make
                                   // implementation specific pad up to
                                   // alignment field that follows explicit
                                   // in the data structure.
    __int64 __ss_align;            // Field to force desired structure.
    char __ss_pad2[_SS_PAD2SIZE];  // 112 byte pad to achieve desired size;
                                   // _SS_MAXSIZE value minus size of
                                   // ss_family, __ss_pad1, and
                                   // __ss_align fields is 112.
};
拿掉即可
(這個問題在後面經常碰到,總之就是衝到就拿掉,沒定義就加回來)

接著,碰到字元無法顯示的 warning
位在 gears\base\common\url_utils_test.cc
開啟後,第一行看起來怪怪的
嚜?/ Copyright 2007, Google Inc.
改成如下即可: // Copyright 2007, Google Inc.

接下來,又是一個找不到 header 的錯誤
gears\base\ie\activex_utils.cc (28,29)
找不到 piedocvw.h 及 webvw.h
同樣的,改成
#include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/piedocvw.h> 及
#include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/webvw.h>

繼續,是幾個重複定義的問題
Microsoft Visual Studio 8\VC\PlatformSDK\include\exdisp.h(273)
跟 Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/piedocvw.h(113)
裡面的 CommandStateChangeConstants 衝到
Microsoft Visual Studio 8\VC\PlatformSDK\include\exdisp.h(280)
跟 Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/piedocvw.h(120)
裡面的 SecureLockIconConstants 衝到
看起來應該是要以 Windows CE Tools 的為準
將以下內容註解
//typedef /* [helpstring][uuid] */  DECLSPEC_UUID(“34A226E0-DF30-11CF-89A9-00A0C9054129″)
//enum CommandStateChangeConstants
//    { CSC_UPDATECOMMANDS = 0xffffffff,
// CSC_NAVIGATEFORWARD = 0x1,
// CSC_NAVIGATEBACK = 0x2
//    }  CommandStateChangeConstants;

//typedef /* [helpstring][uuid] */  DECLSPEC_UUID(“65507BE0-91A8-11d3-A845-009027220E6D")
//enum SecureLockIconConstants
//    { secureLockIconUnsecure = 0,
// secureLockIconMixed = 0x1,
// secureLockIconSecureUnknownBits = 0x2,
// secureLockIconSecure40Bit = 0x3,
// secureLockIconSecure56Bit = 0x4,
// secureLockIconSecureFortezza = 0x5,
// secureLockIconSecure128Bit = 0x6
//    }  SecureLockIconConstants;

然後,有個型態轉換錯誤
發生在 gears/base/ie/activex_utils.cc (114)
其中,有個 document 變數宣告為 IHTMLDocument **
但是 IPIEHTMLWindow::get_document 吃的是 IPIEHTMLDocument ** 型態的參數
乾脆將 document 宣告改掉,改成 IPIEHTMLDocument

之後,會有個找不到 piedocvw.h 的錯
發生在 gears/installer/iemobile/cab_updater.h(30)
一樣的解法,改成 #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/piedocvw.h>

再來,在 third_party\passthru_app\ProtocolCF.inl(152) 中
有個 const unsigned short [18] 不成轉成 LPCSTR 的問題
改成如下即可
  DllGetClassObjectPointer dll_get_class_object =
      reinterpret_cast<DllGetClassObjectPointer>(
      GetProcAddress(urlmon, LPCSTR(L"DllGetClassObject")));

再來的問題是,在 gears/base/ie/bho.cc(76) 中
認不得 ASSERT
將 ASSERT(site); 改成 assert(site); 即可

再來,問題出在 gears/base/common/js_runner_ie.cc(468)
不認得 COINIT_MULTITHREADED 以及 CoInitializeEx
加入以下程式:#define _WIN32_DCOM 在程式最前面即可

繼續,在 gears/base/common/wince_compatibility.h(65,99)
與 Microsoft Visual Studio 8\VC\PlatformSDK\include\shlobj.h (1816,1898)
之間有 CSIDL_LOCAL_APPDATA 以及 SHGetFolderPathW 重複定義的問題
將 shlobj.h 中的 CSIDL_LOCAL_APPDATA 以及 SHGetFolderPathW 定義註解掉即可

然後,在 gears/base/common/vista_utils.cc(67,109)
有個 GetProcAddressA 找不到的問題
在程式前面加入:
WINBASEAPI
FARPROC
WINAPI
GetProcAddressA(
    __in HMODULE hModule,
    __in LPCSTR lpProcName
    );

再來,gears/base/common/file_wince.cc(364) 中
有個 “模稜兩可的呼叫多載函式" 的問題
gears/base/common/wince_compatibility.h(91) 以及
Microsoft Visual Studio 8\VC\PlatformSDK\include\shlobj.h(1760)
都有定義  SHCreateDirectoryExW
將 shlobj.h 中的定義註解掉即可

接著,在 gears/base/common/wince_compatibility.cc(119)
有個認不得 SHGetSpecialFolderPath 的問題
在程式最前面加上 #include <shlobj.h

即可
再來,在 desktop/shortcut_utils_win32.cc(132) 中
認不得 SHGetShortcutTarget
在程式前面加上:
BOOL WINAPI SHGetShortcutTarget(LPCTSTR szShortcut, LPTSTR szTarget, int cb); 即可

 

接著,在 desktop/file_dialog_win32.cc(270)
又發生了一個 不認得 COINIT_MULTITHREADED 以及 CoInitializeEx
一樣,加入以下程式:#define _WIN32_DCOM 在程式最前面即可

 

 

然後,在 gears/ui/ie/html_dialog_host_iemobile.h(43)
找不到 webvw.h 以及 htmlctrl.h
改成 #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/webvw.h> 以及
#include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/htmlctrl.h> 即可

 

再來,在 Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/htmlctrl.h 中
有個 “無法在目前字碼頁 (950) 中表示的字元" 的問題
將第二行 // Copyright (c) Microsoft Corporation.?All rights reserved.
改為 // Copyright (c) Microsoft Corporation. All rights reserved. 即可
然後,在 gears/ui/ie/tools_menu_item.h(43)
認不得 IContextMenu
在程式最前面加入:
#include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/shlobj.h> 即可
後面,在 ui/ie/html_dialog_host_iemobile.cc(28)
中有個找不到 imaging.h 以及 tpcshell.h 的問題
一樣,改為 #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/imaging.h> 以及
#include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/tpcshell.h> 即可接著,是 Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/imaging.h 中
找不到 imaging.h
還是一樣,改為  #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/imgguids.h> 即可

 

繼續,在 ui/ie/html_dialog_host_iemobile.cc(88) 中
找不到 SHINITDLGINFO
加上一段: #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/aygshell.h> 即可

再來,在 Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/aygshell.h 中
找不到 sipapi.h 以及 winuserm.h
改為  #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/sipapi.h> 以及
#include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/winuserm.h>即可

繼續,在 Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/aygshell.h 中
認不得 SIPSTATE
加入以下即可:
typedef enum SIPSTATE
{
    SIP_UP = 0,
    SIP_DOWN,
    SIP_FORCEDOWN,
    SIP_UNCHANGED,
    SIP_INPUTDIALOG,
};

然後, Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/aygshell.h
與 Microsoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(3064)
都有定義  ExitWindowsEx,互衝
將 winuser.h 中的定義註解掉即可

接下來,是 ui/ie/html_dialog_host_iemobile.cc(129,130)
認不得 ASSERT
將 line 49 改為 assert(false); \ 即可

再來,是 ui/ie/html_dialog_host_iemobile.cc(469)
認不得 SPI_GETPLATFORMTYPE
加入: #define SPI_GETPLATFORMTYPE 257  即可

然後,在 gears/ui/ie/html_dialog_bridge_iemobile.h(31)
以及 gears/ui/ie/html_dialog_bridge_iemobile.cc(30)
發生了找不到 piedocvw.h、pvdispid.h 以及 webvw.h 的錯
同樣,加入 #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/piedocvw.h> 、
#include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/pvdispid.h> 以及
#include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/webvw.h> 即可

接下來,是 ui/ie/html_dialog_bridge_iemobile.cc(66)
認不得 ASSERT
改為 assert(html_collection); 即可

再來,在 localserver/ie/async_task_ie.cc(155) 中
不認得 COINIT_MULTITHREADED 以及 CoInitializeEx
加入以下程式:#define _WIN32_DCOM 在程式最前面即可

接著,在 installer/iemobile/cab_updater.cc(183,188,233,318,371,441,415,419,424) 中
認不得 ASSERT
皆改為小寫 assert 即可

然後,在 installer/iemobile/cab_updater.cc(312) 中
認不得 IXMLDOMDocument2
在程式最前面加入 #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/msxml2.h> 即可

 

怎麼還有… 在 gears/geolocation/gps_location_provider_wince.h(30)
找不到 gpsapi.h
改為 #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/gpsapi.h> 即可

再來,在 gears/geolocation/gps_location_provider_wince.cc(46)
找不到

怎麼還有… 在 gears/geolocation/gps_location_provider_wince.h(30)
找不到 gpsapi.h
改為 #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/gpsapi.h> 即可

怎麼還有… 在 gears/geolocation/gps_location_provider_wince.cc(46)
找不到 service.h
改為 #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/service.h> 即可

然後,有個型別轉換錯誤
在 geolocation/radio_data_provider_wince.cc(90,92,95,98,101,104)
都是 const unsigned short [] 不成轉成 LPCSTR 的問題
將 L"RIL_Initialize" 改成 LPCSTR(L"RIL_Initialize"),其他依此類推

再來,在 geolocation/radio_data_provider_wince.cc(135)
有兩個型別轉換錯誤
強迫給他轉型即可,改成:
(RILRESULTCALLBACK)RILResultCallback,              // Result callback
(RILNOTIFYCALLBACK)RILNotifyCallback,              // Notify callback

接著,在 geolocation/wifi_data_provider_wince.cc(34)
找不到 nuiouser.h
改為 #include <C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/nuiouser.h> 即可

之後,在 Microsoft Visual Studio 8\VC\PlatformSDK\include\ntddndis.h
跳出了超過 100 個錯
是因為有這行:
typedef ULONG NDIS_OID, *PNDIS_OID;
在檔案最前面加上 #include   <windows.h>   即可

再來,在 bin-opt/wince-arm/ie/genfiles/string_table.rc(3) 以及
bin-opt/wince-arm/ie/genfiles/ui_resources.rc(27)
找不到 aygshell.h
改為 #include “C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/aygshell.h" 即可

然後,會有很多 lib 檔找不到的問題
先將 C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Lib\ARMV4I
裡面所有 lib 檔 copy 到 gears 目錄下
再將 C:\Program Files\Microsoft Visual Studio 8\VC\ce\atlmfc\lib\armv4i
裡面所有 lib 檔 copy 到 gears 目錄下

接著,碰到了 bin-opt/wince-arm/ie/async_router.obj 中
模組電腦類型 ‘X86’ 與目標電腦類型 ‘THUMB’ 衝突 的問題
錯誤訊息為:
bin-opt/wince-arm/ie/async_router.obj : fatal error LNK1112: 模組電腦類型 ‘X86’
與目標電腦類型 ‘THUMB’ 衝突
make[1]: *** [bin-opt/wince-arm/ie/gears.dll] Error 1112
make: *** [default] Error 2
乾脆將 Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Include/Armv4i/
複製到 Microsoft Visual Studio 8\VC\PlatformSDK\
將裡面的 include 資料夾取代掉
然後再把 async_router.obj 重做

再來,遇到超過 100 個 ATL 相關錯誤
例如:
C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE\atlconv.h(108) : error C2039: ‘GetThreadLocale’ : 不是 ‘`global namespace" 的成員
將 Microsoft Visual Studio 8\VC\atlmfc 裡面的 include
全部換成 C:\Program Files\Microsoft Visual Studio 8\VC\ce\atlmfc 裡面的 include

這些似乎都沒有用
於是,停在 “模組電腦類型 ‘X86’ 與目標電腦類型 ‘THUMB’ 衝突" 的問題
陷入僵局中 …

 


Responses

  1. 請問一下 我目前在windows mobile開發程式 需要用到 ie
    其中必須引用 exdisp.h 但編譯後會出現錯誤 說找無此檔案
    在 win32下執行就ok 網路的解法好像也沒詳細說明  不知您是否有遇到這樣的問題  謝謝

  2. Hi sam:
    不好意思沒遇過這問題
    不過我想如果是我遇到的話
    會先檢查 exdisp.h 是否是用來開發 mobile application 的 library, 或者相同功能在 mobile 環境中其實是由其他 library (如 piedocvw.h) 來提供的
    如果確定是,那可能就是沒有正確的設定 lib path 或者 include


發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

分類

%d 位部落客按了讚: