最近在寫WAnts 的更新,使用 ie 透過 ActiveX,用wxWidgets 實在是不方便,有許多的錯誤,例如在IE7下抓取iFrame不知道為什麼一直錯誤,所以就想來裝裝看另一款有名的「WTL」。
在WTL安裝之前,請先安裝 PlamtForm SDK。我安裝的版本是「Microsoft Platform SDK for Windows Server 2003 SP1」
- WTL目前的版本是 8.0,在下載安裝之後,並沒有內附 2008Express 的安裝,於是修改 "\WTL80\AppWiz\setup80x.js"的檔案,編輯內容把8的字串都改為9,再另存為 "setup90x.js" ,點擊執行就可以安裝到 2008 Express 上了。
- 接下來修改 PlamFormSDK的檔案,在路徑"Microsoft Platform SDK\Include\atl\atlbase.h",在288行的位置,修改如下
#pragma pack(pop)
/*
PVOID __stdcall __AllocStdCallThunk(VOID);
VOID __stdcall __FreeStdCallThunk(PVOID);#define AllocStdCallThunk() __AllocStdCallThunk()
#define FreeStdCallThunk(p) __FreeStdCallThunk(p)#pragma comment(lib, "atlthunk.lib")
*/
#define AllocStdCallThunk() HeapAlloc(GetProcessHeap(),0,sizeof(_stdcallthunk))
#define FreeStdCallThunk(p) HeapFree(GetProcessHeap(), 0, p)#elif defined (_M_AMD64)
#pragma pack(push,2)以上,也可以增加專案中的stdafx.h 修改如下:(由TabBrowser中 支援 2005 Express 參考)
//#ifdef _VC80X
// Support for VS2005 Express & SDK ATL
#define _CRT_SECURE_NO_DEPRECATE
#pragma conform(forScope, off)
#pragma comment(linker, "/NODEFAULTLIB:atlthunk.lib")
#pragma warning(disable: 4565) // redefinition; the symbol was previously declared with __declspec(noalias)
#pragma warning(disable: 4068) // unknown pragma
//#endif // _VC80X#include <atlbase.h>
//#ifdef _VC80X
// Support for VS2005 Express & SDK ATL
namespace ATL
{
inline void * __stdcall __AllocStdCallThunk()
{
return ::HeapAlloc(::GetProcessHeap(), 0, sizeof(_stdcallthunk));
}inline void __stdcall __FreeStdCallThunk(void *p)
{
::HeapFree(::GetProcessHeap(), 0, p);
}
};
//#endif // _VC80X
- "Microsoft Platform SDK\Include\atl\atlwin.h",在1753行的位置
for(int i = 0; i < m_aChainEntry.GetSize(); i++)
- "WTL80\AppWiz\Files\Templates\1033\root.rc",在507的位置
[!if WTL_COM_SERVER]
1 TYPELIB "[!output PROJECT_NAME].tlb"
[!endif]
[!if WTL_USE_MANIFEST]
//CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\[!output PROJECT_NAME].exe.manifest"
[!endif]
- 如果在編譯Sample時出現以下錯誤
CVTRES : fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt.
就尋找專案中的 ".rc" 檔案,並注解掉
//CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST
以上,就是編譯WTL Sample 中遇到的問題,解決的方式。
沒有留言:
張貼留言