C++ Oracle异常::getMessage()导致调试断言

C++ Oracle异常::getMessage()导致调试断言,c++,oracle,C++,Oracle,我正在使用Visual Studio 2015 Enterprise和Oracle 12.1.0。下面是导致断言的代码: try { // .. }catch(oracle::occi::SQLException &e) { std::cout << "Error code: " << e.getErrorCode() << std::endl; std::cout << "Error message: " <

我正在使用Visual Studio 2015 Enterprise和Oracle 12.1.0。下面是导致断言的代码:

try
{
    // ..
}catch(oracle::occi::SQLException &e)
{
    std::cout << "Error code: " << e.getErrorCode() << std::endl;
    std::cout << "Error message: " << e.getMessage() << std::endl;   // Most likely here 
}
试试看
{
// ..
}catch(oracle::occi::SQLException&e)
{

std::难道你真的应该通过引用而不是通过值来捕获异常吗?
oracle::occi::SQLException&e
@AcarX我也不知道如何修复它。--你需要说明异常对象是由DLL创建的还是在可执行文件中。如果它是由DLL生成的,那么任何解决方案都可能会因为o跨DLL边界传递对象,如
std::string
。问题是Oracle DLL使用的
std::string
可能不兼容(不同的内部)比Visual Studio 2015使用的
std::string
更高。如果是这样,则需要获得与VS 2015兼容的DLL版本。另一个可能导致问题的原因是,如果您使用内部更改
std::string
类的设置构建应用程序,从而使其与来自的
std::string
不兼容Oracle。还有其他问题,但这些都是使用诸如
std::string
之类的类型进行接口的DLL的缺点。我没有更改std::string实现,同样的代码在visual studio 2013中工作,因此我假设visual studio 2015中的标准std::string与我的Oracle库不兼容。我使用的是OCCI库的最新版本,所以我想我无能为力。似乎Oracle在添加对MS Visual studio编译器新版本的支持方面有点慢。它们现在升级到VS2013:您应该通过引用而不是通过值捕获异常。
Oracle::OCCI::SQLException&e
@AcarX我也不知道如何捕获异常o修复它。--您需要说明该异常对象是由DLL创建的还是在可执行文件中创建的。如果它是由DLL生成的,则由于跨越DLL边界传递对象(如
std::string
),任何解决方案都可能非常痛苦。问题是Oracle DLL使用的
std::string
可能不兼容(不同的内部构件)比Visual Studio 2015使用的
std::string
更高。如果是这样,则需要获得与VS 2015兼容的DLL版本。另一个可能导致问题的原因是,如果您使用内部更改
std::string
类的设置构建应用程序,从而使其与来自的
std::string
不兼容Oracle。还有其他问题,但这些都是使用诸如
std::string
之类的类型进行接口的DLL的缺点。我没有更改std::string实现,同样的代码在visual studio 2013中工作,因此我假设visual studio 2015中的标准std::string与我的Oracle库不兼容。我使用的是OCCI库的最新版本,所以我想我无能为力。似乎Oracle在添加对MS Visual studio编译器新版本的支持方面有点慢。它们现在升级到VS2013: