顯示具有 vc 標籤的文章。 顯示所有文章
顯示具有 vc 標籤的文章。 顯示所有文章

2016年5月3日 星期二

[C++] WIA with VC++ 無法解析的外部符號 / 解決方法

在寫WIA的時候遇到了一個很棘手的問題,

大概錯誤訊息如:

error LNK2001: unresolved external symbol _CLSID_WiaDevMgr
error LNK2001: unresolved external symbol _IID_IWiaDevMgr

找了三天還是沒結果,後來才了解,解法:



就是這樣,在Project裡面的連結器(Linker)-->輸入(input)-->其它相依性輸入"WiaGuid.Lib"

問題解決! (記錄起來以免忘記)


END

2016年4月22日 星期五

[C++] Visual Studio 遇到ATL Com Crash的問題(解決方案)

在做IMAPI的東西的時候,需要用到CoCOM的東西,

然後他又需要使用ATL....總之很麻煩0rz


好了,重點就是在trace bug的時候跑到atlcom.h這個檔案裡面的

class CComObjectCached : public Base
{
public:
typedef Base _BaseClass;
CComObjectCached(void* = NULL){}
// Set refcount to -(LONG_MAX/2) to protect destruction and
// also catch mismatched Release in debug builds
// This will be made virtual again for Beta 2
/*virtual*/ ~CComObjectCached()
{
m_dwRef = -(LONG_MAX/2);
FinalRelease();
#ifdef _ATL_DEBUG_INTERFACES
_AtlDebugInterfacesModule.DeleteNonAddRefThunk(_GetRawUnknown());
#endif
}
//If InternalAddRef or InternalRelease is undefined then your class
//doesn't derive from CComObjectRoot
STDMETHOD_(ULONG, AddRef)() throw()
{
ULONG l = InternalAddRef();
if (l == 2)
_pAtlModule->Lock();
return l;
}

沒錯,就是_pAtlModule->Lock();這邊,然後你發現他記憶體位址居然是0x000000

然後就crash了!


不要相信甚麼add ATL support to MFC 之類的鬼話(加了以後我不知道怎麼刪掉,只能重寫)

解決方法:

在你的主程式(.cpp)裡面,

#include .......

//在這邊新增
CComModule _Module;
extern __declspec(selectany) CAtlModule* _pAtlModule=&_Module;

//新增完成

主程式:建構子....

主程式.....

這樣就可以解決了

END