寫在前面:
最近在接觸office編程,使用vc6.0環境Debug能編譯通過,但是ReleaseUMinDependenc編譯就報錯libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _這個問題還沒有解決。希望通過CSDN有高手指點,日后再總結6.0環境這個問題。高手門都建議學習ATL COM最好使用VS2005。折騰半天還是遇見這個錯誤,這個錯誤又折騰半天!通過Google有問題你就個google)找到CSDN有朋友遇見同樣的問題!他的描述如下也是我要表達的):
VC6.0中用ATL生成的全局變量_Module,
CComModule _Module;
可以調用_Module.GetResourceInstance();
用VS2005生成時為_AtlModule,
COutLookAddinModule _AtlModule
不能調用GetResourceInstance();怎么辦?
在所有回復中沒有找到答案!但是通過QQ技術群平臺和Google還有百度找到一些方向!
1、VS2005的wizard生成ATL后,發現VS2005會用子類模板化的_AtlModule代替原來VC6.0的_Module
2、VS2005中 ATL 7.0取代了vc6.0中的 ATL 3.0。
3、MSDN英文中有提到CAtlBaseModule Contains information required by most applications that use ATL. Contains the HINSTANCE of the module and the resource instance.
也就是說要使用GetResourceInstance(); 必須派生于CAtlBaseModule 。結果自作聰明到處定義CAtlBaseModule _Module。結果有不少新的錯誤!還好我在CSDN發帖有問直接告訴我了!直接使用_AtlBaseModule,微軟已經為我們定義好了!在atlcore.h定義了extern CAtlBaseModule _AtlBaseModule;
示例如下:
// 設置位圖按鈕風格,位圖為x32大小,將其放入剪切板中用PasteFace()貼在指定按鈕上
HBITMAP hBmp =(HBITMAP)::LoadImage(_AtlBaseModule.GetResourceInstance(),
MAKEINTRESOURCE(IDB_BITMAP),IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS);
附一:
Earlier versions of ATL used CComModule. In ATL 7.0, CComModule functionality is replaced by several classes:
CAtlBaseModule Contains information required by most applications that use ATL. Contains the HINSTANCE of the module and the resource instance.
CAtlComModule Contains information required by the COM classes in ATL.
CAtlWinModule Contains information required by the windowing classes in ATL.
CAtlDebugInterfacesModule Contains support for interface debugging.
CAtlModule The following CAtlModule-derived classes are customized to contain information required in a particular application type. Most members in these classes can be overridden:
CAtlDllModuleT Used in DLL applications. Provides code for the standard exports.
CAtlExeModuleT Used in EXE applications. Provides code required in an EXE.
CAtlServiceModuleT Provides support to create Windows NT and Windows 2000 Services.
CComModule is still available for backward compatibility.
Earlier versions of ATL used CComModule. In ATL 7.0, CComModule functionality is replaced by several classes:
CAtlBaseModule Contains information required by most applications that use ATL. Contains the HINSTANCE of the module and the resource instance.
CAtlComModule Contains information required by the COM classes in ATL.
CAtlWinModule Contains information required by the windowing classes in ATL.
CAtlDebugInterfacesModule Contains support for interface debugging.
CAtlModule The following CAtlModule-derived classes are customized to contain information required in a particular application type. Most members in these classes can be overridden:
CAtlDllModuleT Used in DLL applications. Provides code for the standard exports.
CAtlExeModuleT Used in EXE applications. Provides code required in an EXE.
CAtlServiceModuleT Provides support to create Windows NT and Windows 2000 Services.
CComModule is still available for backward compatibility.
附二(寫在前面提及的錯誤,目前還沒有找到答案!貼出來希望有高手能指點):
ATL 工程 中ReleaseUMinDependency與 Debug區別是什么?
Debug可以編譯通過
ReleaseUMinDependency編譯報錯
Linking...
Creating library ReleaseUMinDependency/WordCOM.lib and object ReleaseUMinDependency/WordCOM.exp
LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
ReleaseUMinDependency/WordCOM.dll : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
WordCOM.dll - 2 error(s), 0 warning(s)
注意:
查資料反饋
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
這個錯誤的修改方法如下:
Windows項目要使用Windows子系統, 而不是Console, 可以這樣設置
[Project] --> [Settings] --> 選擇"Link"屬性頁
在Project Options中將/subsystem:console改成/subsystem:windows
可是我這邊這個參數沒有錯:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"ReleaseUMinDependency/OutLookAddin.pdb" /machine:I386 /def:".\OutLookAddin.def" /out:"ReleaseUMinDependency/OutLookAddin.dll" /implib:"ReleaseUMinDependency/OutLookAddin.lib"
是不是因為我的工程不是 MFC而是ATL,還有其他地方有錯誤!
第2個錯誤也沒有找到具體的靜態庫!
希望大家幫幫我!
基本完成office編程(Outlook)的示例程序link