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内核配置工具成。