【问题标题】:Setting TFDConnection to MongoDB将 TFDConnection 设置为 MongoDB
【发布时间】:2016-04-27 16:29:19
【问题描述】:

在打开TFDConnection->Open()后的空项目中,程序完成后与Mongodb的连接崩溃错误“蓝牙:无法清理Winsock”。

【问题讨论】:

    标签: mongodb firedac c++builder-10-seattle


    【解决方案1】:

    此错误似乎发生在 System.Win.Bluetooth 中的 TWinBluetoothSocket.Destroy 例程期间。出于某种原因,在 C++ 应用程序中调用了 TWinBluetoothSocket 析构函数,即使没有使用蓝牙。

    问题是 TWinBluetoothSocket 析构函数正在调用 WSACleanup(),但从未调用过 WSAStartup(),因此 WSACleanup() 返回错误。

    当在 C++ 应用程序中使用 Mongo 驱动程序时会发生这种情况,即使 TFDConnection 在 Delphi 单元中,只要在设计或运行时选择了 Mongo 驱动程序并将 Connected 设置为 true。

    不需要 MongoDB 服务器来重现它;只需在按钮单击处理程序中将 Connected 设置为 true。当然会因为没有MongoDB服务器而报错,但是在应用退出的时候会报这个错。

    解决方法是将其放入构造函数中(来自https://msdn.microsoft.com/en-us/library/windows/desktop/ms742213(v=vs.85).aspx

    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    /* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
    wVersionRequested = MAKEWORD(2, 2);
    err = WSAStartup(wVersionRequested, &wsaData);
    if (err != 0)
      {
         ShowMessage("err nonzero"); 
      }
    

    现在,WSAStartup() 被调用,因此 WSACleanup() 不会返回错误,并且应用程序可以关闭。

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 1970-01-01
      • 2017-09-07
      • 2014-12-21
      • 2012-02-26
      • 1970-01-01
      • 2023-04-02
      • 2017-01-16
      • 2015-07-04
      相关资源
      最近更新 更多