SQLGetInstalledDirvers函数 在VC6.0中第一个参数是LPSTR 而在 VS2010中 是LPWSTR 区别在于是否为宽字符 在处理这个问题写法上稍微有一点区别
VC6.0:
char szBuf[2001];
WORD cbBufMax = 2000;
WORD cbBufOut;
char *pszBuf = szBuf;
CString sDriver;
// 获取已安装驱动的名称(涵数在odbcinst.h里)
if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
return "";
// 检索已安装的驱动是否有Excel...
do
{
if (strstr(pszBuf, "Excel") != 0)
{
//发现 !
sDriver = CString(pszBuf);
break;
}
pszBuf = strchr(pszBuf, '\0') + 1;
} while (pszBuf[1] != '\0');
return sDriver;
VS2010:
wchar_t szBuf[2001];
wchar_t excl[] = L"Excel";
WORD cbBufMax = 2000;
WORD cbBufOut;
wchar_t *pszBuf = szBuf;
CString sDriver; // 获取已安装驱动的名称(涵数在odbcinst.h里)
if (!SQLGetInstalledDrivers((LPWSTR)szBuf, cbBufMax, &cbBufOut))
return L"";
// 检索已安装的驱动是否有Excel...
do
{
if (wcsstr(pszBuf, excl) != 0)
{
//发现 !
sDriver = CString(pszBuf);
break;
}
wchar_t ze = {'\0'};
pszBuf = wcschr(pszBuf, '\0') + 1;
} while (pszBuf[1] != '\0');
return sDriver;
char szBuf[2001];
WORD cbBufMax = 2000;
WORD cbBufOut;
char *pszBuf = szBuf;
CString sDriver;
// 获取已安装驱动的名称(涵数在odbcinst.h里)
if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
return "";
// 检索已安装的驱动是否有Excel...
do
{
if (strstr(pszBuf, "Excel") != 0)
{
//发现 !
sDriver = CString(pszBuf);
break;
}
pszBuf = strchr(pszBuf, '\0') + 1;
} while (pszBuf[1] != '\0');
return sDriver;
如果你想要的到更多的功能实现可以参考:http://www.vckbase.com/index.php/wv/494以及http://hi.baidu.com/xiao___q/item/1fd973b6f0a42f71254b0926。它们对Excel的操作做了进一步的类封装,比较完善