13日:
一個使用ADO的程序,在程序中使用了_IConnectionPtr conPtr; conPtr->CreateInstance("ADODB.Connection")創建連接。程序在win7上編譯鏈接后,
在win7上運行沒有問題,然而在win 2008 server上跑時,創建不了數據連接。返回的錯誤碼表示不支持相應的接口。同樣的代碼拿到win2008上編譯鏈接后在win7,
winxp上都能運行。
分析:
由錯誤碼可以得知是查詢接口時失敗,可以推出它是這樣來導入ado組件的。
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF")
由win 2008編譯后可以在xp,win7 win2008運行,推出win2008的連接GUID版本是舊的。并且2008不支持新的版本。
解決辦法:
簡單的方法,從win2008 的相應目錄把msado15.dll拷到某個地方,改寫上面的import是從相應的文件夾導入,再編譯鏈接即可。
改代碼的方法:查出win 2008連接IID={00000550-0000-0010-8000-00aa006d2ea4},有了這個IID我們改代碼的方法就有多種了。這里介紹封一個函數的方式。
這種方式其實有缺點,我們信奉接口是穩定的。如果擔心,應采用上述最簡單的辦法。
HRESULT OriginalCreateConnection(_Connection *pCon)


{
HRESULT hr = 0L;
pCon = NULL;
CComPtr<IClassFactory> cfPtr;
CComPtr<IUnknown> unPtr;
CLSID clsid;
IID iidCon;

CLSIDFromProgID(L"ADODB.Connection", &clsid);
if(FAILED(hr = CoGetClassObject(clsid, CLSCTX_ALL, 0, IID_IClassFactory, (void **)&cfPtr)))

{
return hr;
}
if(FAILED(hr = cfPtr->CreateInstance(0, IID_IUnknown, (void **)&unPtr)))

{
return hr;
}
IIDFromString(L"{00000550-0000-0010-8000-00aa006d2ea4}",&iidCon);
if(FAILED(hr == unPtr->QueryInterface(iidCon, (void **)&pCon)))

{
pCon = NULL;
return hr;
}
return hr;
} 24日:
弱序在這里是指a < b,反地來b < a也可能成立的一種比較關系。STL中的排序容器中不能有弱序關系,當弱序關系存在于STL中的排序容器中時會產生錯誤。舉個例子下面的比較就
是弱序關系,if(a.year > b.year) return false; if(a.month > b.month) return false; ......。如果應用于容器的排序就會出現錯誤。
25日:
關于對時的問題,對是的服務器沒有聯網并且不對,或者雖然聯網了但是時區和客戶端不統一時。客戶端和服務端對時,如果此時客戶端聯網。會造成客戶端的時間走的過快或者過慢。
29日:
在ubuntu環境中,到linux kernel源碼目錄行make menuconfig提示找不到curses.h頭文件,可以看出是沒有安裝相應的庫。
sudo apt-get install libncurses5-dev libncursesw5-dev 安裝好庫之后,再輸行Linux內核配置工具成。