C++ 与VC+的互操作异常+;和MySQL C++;连接器

C++ 与VC+的互操作异常+;和MySQL C++;连接器,c++,mysql,visual-c++,C++,Mysql,Visual C++,我正在帮助一位朋友完成他的学士学位论文项目。这是一个计算各种材料弯矩的程序。客户机需要的额外需求之一是数据库功能,用于存储和检索程序中使用的各种数据 程序是用C++编写的表单应用程序。我加入了编写数据库功能的团队。我正在使用MySQL Server 5.5和MySQL Connector/C++连接程序和数据库。一切都进行得很顺利,我们需要的所有功能都运行得很好,但只有在调试中。一旦我们将程序置于发布模式,运行时就会出现未定义的行为。以下是用于打开数据库连接的函数: try { m_dr

我正在帮助一位朋友完成他的学士学位论文项目。这是一个计算各种材料弯矩的程序。客户机需要的额外需求之一是数据库功能,用于存储和检索程序中使用的各种数据

程序是用C++编写的表单应用程序。我加入了编写数据库功能的团队。我正在使用MySQL Server 5.5和MySQL Connector/C++连接程序和数据库。一切都进行得很顺利,我们需要的所有功能都运行得很好,但只有在调试中。一旦我们将程序置于发布模式,运行时就会出现未定义的行为。以下是用于打开数据库连接的函数:

try
{
    m_driver = get_driver_instance();
    m_conn = m_driver->connect(m_dbHost, m_dbUser, m_dbPwd);
    m_conn->setSchema(m_dbSchema);
}
catch(sql::SQLException &e)
{
    int a = e.getErrorCode();
    MessageBoxA(NULL, e.what(), "DB Error", MB_OK);
}
传递到connect函数的值都是std::string。在调试模式下,连接不会出现任何问题。在释放模式下,调用connect函数后会捕获异常,并显示消息“未知MySQL服务器主机”#####(0)”,其中####总是一些垃圾文本。我还注意到,在输出窗口中引发了另一个异常,这个异常的类型是System.Runtime.InteropServices.SEHException

我一直在做一些研究,在许多论坛(这里是stack exchange)上都看到过许多这种异常的案例,但似乎没有人在MySQL连接器上遇到这种问题。我的假设是内存被破坏,因为程序是混合模式,主程序代码是用托管C++编写的,而我的数据库助手代码是在本地C++中(根据连接器的要求)。p> 我是否可以在代码中更改一些内容,以尝试修复此问题,使字符串在运行时不会损坏。我尝试了很多不同的方法来解决这个问题,但都没有奏效

谢谢, 汤姆

更新:我现在在调试模式下看到这个错误。我添加了从数据库中检索值的代码,并填充表单上的一些文本框。代码如下:

             // Populate the form with material details
             String^ selectedMaterial = (String^)(comboBox1->SelectedItem);
             string selectedMaterial_ = "";
             MarshalString(selectedMaterial, selectedMaterial_);

             sql::ResultSet* results = dbHelper.GetData("matname", selectedMaterial_);
             if (results->rowsCount() == 1)
             {
                 // Outdim
                 string outdim_ = "";
                 outdim_ = results->getString("outdim");

                 String^ outdim = gcnew String(outdim_.c_str());
                 textBox1->Text = outdim;
             }
             else
             {
                 // !!!! Duplicate materials in list
             }
当它试图从结果集中读取outdim时,会抛出SEHException,给出的唯一其他信息是它是在外部组件中抛出的


更新2:我对调试可执行文件运行了应用程序验证程序,然后从VS2010启动了该程序。但是表单窗口从不加载,因此程序必须在某个地方停止。奇怪的是,Application Verifier中的日志文件中完全没有任何信息。我也尝试过发布版本,但也没有从中获得任何有用的信息。

您使用的是哪个VS版本?我试图将VC++连接到VS2010项目中,遇到了一些奇怪的问题。然后我在mysql连接器下载站点上看到了以下警告:“可能出现的一个问题是,用于构建应用程序的工具与用于构建MySQL Connector/C++二进制版本的工具不兼容。理想情况下,您需要使用与构建MySQL Connector/C++二进制文件相同的工具构建应用程序。“没有用VS2010生成的二进制文件,我自己也没有从E源代码生成它。我也在使用VS2010。我记得我自己也看到过那个奇怪的评论!我想我可以试着从源代码构建这个连接器,或者看看我是否还有VS2008的ISO。嗯,值得思考,谢谢!我用C连接器做了一个解决方案,我自己写了一个非常简单的C++包装器。我在某个地方看到C++连接器1.1.1将支持VS2010。当然,我忘记了C连接器。我还要看一下那个。谢谢你建议我使用C连接器。我已将代码切换到使用C连接器,不再有任何问题。