我正在使用Visual Studio开发一个C++程序,该程序使用OCCI查询Oracle 11g数据库。在这一点上,这是一个非常简单的程序,只进行一个查询,但我一直遇到运行时错误。我第一次尝试在VS2010中开发它,下载了11.2.0.3 OCCI文件,但我得到了一个与不在oci.dll中的堆分配过程的入口点有关的错误。我觉得这个错误可能是由于我的Oracle客户端是11.2.0.1。
由于支持方面的原因,我无法将我的客户端升级到更高的版本,我决定重新使用Visual Studio 2005,因为我在Oracle的OCCI文档中读到,OCCI库和DLL的vc8版本已经安装在11g客户端中。所以我把我的C++/OCCI程序移到了VS 2005,现在我得到了一个不同的调试运行时错误:一个错误消息框,上面写着"应用程序未能正确初始化",以及来自VS Output窗口中加载程序的一条消息,称"ldrpWalkImportDescriptor()未能探测[ORACLE CLIENT DIR]\oci\lib\msvc\vc8\oraocci11d.dll的清单ntstatus 0xc0150002"我看不到oraocci1d.dll的清单文件,因此我不知道如何解决此问题。有谁能更精通OCCI的VS设置吗?提前感谢。。。
Sheldon
我注意到这里有很多OCCI问题没有得到回答,所以我觉得有义务解释我是如何解决问题的:)正如OCCI线程中经常提到的那样,关键是下载适当版本的Oracle Instant Client。我曾尝试使用我已经安装的运行时客户端中的文件,但该客户端的版本号为11.2.0.1,VS2010的OCCI需要11.2.0.2或11.2.0.3的版本。因此,我最终下载了OCCI和即时客户端的11.2.0.2版本,因为版本号必须匹配才能正常工作。。。
之后,只需设置PATH环境变量并将Visual Studio项目配置为指向包含OCCI DLL、库和include文件的目录,还可以设置TNS_ADMIN环境变量指向包含TNSNAMES.ORA文件的目录(该文件定义了我要连接的数据库)。有关此设置的逐步描述,请参阅Mark Williams的这篇博客文章。尽管这篇文章是为Visual Studio 2008编写的,但2010年的过程仍然相同,只是版本不同。。。
Sheldon