繁体   English   中英

旧版MySQL Connector C ++使用sql :: ConnectOptionsMap异常

[英]Legacy MySQL Connector C++ using sql::ConnectOptionsMap exception

我已经尝试了两天,以了解为什么会发生这种情况,但是我没有足够的调试技能来了解为什么会发生这种情况。

我需要使用sql :: ConnectOptionsMap,以便可以传递所需的连接选项,例如charset等。

举一个简单的例子:

sql::ConnectOptionsMap connection_properties;

connection_properties["hostName"] = sql::SQLString("localhost");
connection_properties["userName"] = sql::SQLString("username");
connection_properties["password"] = sql::SQLString("password");
connection_properties["CLIENT_MULTI_STATEMENTS"] = (true);

sql::Driver * driver = get_driver_instance();
std::unique_ptr<sql::Connection> con(driver->connect(connection_properties));

在调试下与VS 2017一起编译:

Exception thrown at 0x00007FFFECC811D0 (vcruntime140d.dll) in Demo.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

创建一些“小型转储”之后,我可以看到代码在此处崩溃:

    _NODISCARD static _CONSTEXPR17 int compare(_In_reads_(_Count) const char * const _First1,
        _In_reads_(_Count) const char * const _First2, const size_t _Count) noexcept // strengthened
        {   // compare [_First1, _First1 + _Count) with [_First2, ...)
#if _HAS_CXX17
        return (__builtin_memcmp(_First1, _First2, _Count));
#else /* _HAS_CXX17 */
        return (_CSTD memcmp(_First1, _First2, _Count)); <-- HERE
#endif /* _HAS_CXX17 */
        }

有人遇到过吗? 我进行了很多搜索,直到现在找不到任何有此问题的人。

我真的不明白为什么会这样,因为没有自定义,仅是文档中的一个示例...

请指教。

我终于找到了这个问题的答案,这个问题在任何地方都没有记载。 您可以使用“ sql :: ConnectOptionsMap connection_properties;” 仅当您静态链接库时。 (mysqlcppconn-static.lib)

我是怎么发现的? 遵循以下惊人信息: http : //www.voidcn.com/article/p-yltwwlte-pd.html

引用:

接口中使用的字符串均为SQLString。 尽管它是std :: string的进一步包装,但无法将std :: string对象作为参数传递。 因为它是一种动态链接的方式,所以DLL中的内存管理与EXE没有连接。 过去传递对象将导致异常:bad_alloc

但是,我确实测试了本文中的代码并将其添加到mysql_connection.cpp中,该错误消失了,但仍然无法正常工作。

我的警告:

我正在构建自己的mysql-connector-cpp-master的“调试”版本,由于某种原因,编译未达到“预期的效果”。 例如,在我的编译中,“ mysqlcppconn-static.lib”不能编译为Debug,只能编译为“ RelWithDebInfo”,只有10 MB,而“正式”编译为64 MB。

结论:

您必须从MySQL网站静态链接发布版本(mysqlcppconn-static.lib),才能使用“ sql :: ConnectOptionsMap”。 我真的希望他们能醒来,并为人们和文档提供适当的库。

如果我能找到在Debug模式下构建它的方法,我将发布更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM