VS Intellisense 不识别 ADO 对象

VS Intellisense does not recognize ADO objects

Visual Studio 2019 中的最小示例(复制粘贴到新的 C++ 控制台项目中):

#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF", "EndOfFile")  
int main()
{
    CoInitialize(NULL);
    _RecordsetPtr pRs("ADODB.Recordset");
    _ConnectionPtr pCn("ADODB.Connection");
    pCn->Provider = "sqloledb";
}

此程序运行正常,但在 IDE 中,_RecordsetPtr_ConnectionPtr 带有红色波浪线和工具提示“标识符 _RecordsetPtr 未定义”等下划线,然后是智能感知pCn->当然不可用等等。

如何修复它以便 IntelliSense 在这里工作?

注意 - 如果我没有在 #import 行中包含完整路径,则会出现错误 fatal error C1083: Cannot open type library file: 'msado15.dll': No such file or directory。有些在线代码示例包含完整路径,有些则没有。


背景: 我最终试图从非 MFC C++ 项目调用本地网络上 SQL 服务器上的数据库存储过程。 MSDN 文档指出 SQLNCLI 已弃用,不应在新代码中使用,建议改用 OLEDB。 MSDN 没有 OLEDB 的任何代码示例,第三方站点确实有一些,但是在不使用 ADO 的情况下使用 OLEDB COM 接口需要数百行代码,因此似乎建议使用 ADO。

我这边测试,貌似VS找不到生成的.tlh文件。

在我手动将路径(包含 msado15.tlh 文件的调试文件夹目录)添加到项目的 属性(配置属性 > VC++ 目录 > 包含目录)后,错误消失了.

或许你可以试试

考虑到 ADO 不会很快改变,添加是可行的 实际的 .tlh 和 .tli 文件到您的项目。您甚至可以将它们更改为 .h 和 .cpp 并清理其中的内容。此外,这允许 IntelliSense 和其他东西理解和找到这些东西的定义 必须构建/编译项目以生成这些文件之前!

就个人而言,无论如何我总是更喜欢保存生成的 .tlh 和 .tli 文件,以便在构建时保持一致性,尽管这消除了能够基于可能正在更改的类型库动态生成代码的全部意义。

通过删除#import,您还可以利用其他一些功能,例如并行编译。