在編譯 CE下的 format程式時,選擇 windows program, 並且編譯 沒有問題。
因為要link storeapi.lib
但是當我在lib path 中include C:\WINCE\PUBLIC\COMMON\OAK\LIB\MIPS\RETAIL 時
會出現以下錯誤
1>ceformatw.obj : error LNK2019: unresolved external symbol __imp_CommandBar_AddAdornments referenced in function "long __cdecl WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YAJPAUHWND__@@IIJ@Z)
1>ceformatw.obj : error LNK2019: unresolved external symbol __imp_CommandBar_InsertMenubar referenced in function "long __cdecl WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YAJPAUHWND__@@IIJ@Z)
1>ceformatw.obj : error LNK2019: unresolved external symbol __imp_CommandBar_Create referenced in function "long __cdecl WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YAJPAUHWND__@@IIJ@Z)
1>ceformatw.obj : error LNK2019: unresolved external symbol __imp_CommandBar_Show referenced in function "int __cdecl InitInstance(struct HINSTANCE__ *,int)" (?InitInstance@@YAHPAUHINSTANCE__@@H@Z)
調查後發現 在Standard SDK下的 Commctrl.lib 和 PUBLIC\COMMON\OAK\LIB下的 Commctrl.lib 並不相同
SDK下的 Commctrl.lib 只是一個 dll import library
OAK\LIB 下的則為實際的 static library
但是Standard SDK 下的Commctrl.h 和 PUBLIC\COMMON\SDK\INC 下的 Commctrl.h
是一樣的。
在 commctrl.h
//
// Define API decoration for direct importing of DLL references.
//
#ifndef WINCOMMCTRLAPI
#if !defined(_COMCTL32_) && defined(_WIN32)
#define WINCOMMCTRLAPI DECLSPEC_IMPORT
#else
#define WINCOMMCTRLAPI
#endif
#endif // WINCOMMCTRLAPI
IN winnt.h
#if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64)) && !defined(MIDL_PASS)
#define DECLSPEC_IMPORT __declspec(dllimport)
#else
#define DECLSPEC_IMPORT
#endif
所以 __imp_ 是Microsoft 為 dllimport 所加上的修飾詞
目前能想到的暫時解決方法(非完美)為
把Standard SDK 的Lib 也加入 在PUBLIC\COMMON\OAK\LIB 的前面
主要是 WINCOMMCTRLAPI 的定義
不應該跑到上面 DECLSPEC_IMPORT
沒有留言:
張貼留言