Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何重新连接到DDE服务器_C++_Windows_Winapi_Dde - Fatal编程技术网

C++ 如何重新连接到DDE服务器

C++ 如何重新连接到DDE服务器,c++,windows,winapi,dde,C++,Windows,Winapi,Dde,如何重新连接到DDE服务器 下面的代码不断给我0x4006错误,根据,这意味着DMLERR\u INVALIDPARAMETER HCONV g_conv; void dde_server_reconnect(HCONV hconv) { while (true) { if (g_conv = DdeReconnect(hconv)) { std::cout << "Reconnect success!" << std::endl;

如何重新连接到DDE服务器

下面的代码不断给我0x4006错误,根据,这意味着
DMLERR\u INVALIDPARAMETER

HCONV g_conv;

void dde_server_reconnect(HCONV hconv)
{
  while (true)
  {
    if (g_conv = DdeReconnect(hconv))
    {
      std::cout << "Reconnect success!" << std::endl;
      return;
    }
    else
    {
      std::cerr << "Unable to reconnect. Error: " << DdeGetLastError(g_id_inst) << std::endl;
    }

    boost::this_thread::sleep_for(boost::chrono::seconds(1));
  }
}

HDDEDATA CALLBACK dde_callback(
  UINT uType,
  UINT uFmt,
  HCONV hconv,
  HSZ hsz1,
  HSZ hsz2,
  HDDEDATA hdata,
  DWORD dwData1,
  DWORD dwData2)
{
  switch (uType)
  {
  case XTYP_ADVDATA:
  {
    process_data(hdata);
    return (HDDEDATA)DDE_FACK;
  }

  case XTYP_DISCONNECT:
  {
    auto reconnect_th = boost::thread(dde_server_reconnect, hconv);
    reconnect_th.detach();
  }
  }

  return NULL;
}
HCONV g_conv;
无效dde\u服务器\u重新连接(HCONV HCONV)
{
while(true)
{
如果(g_conv=DDE重新连接(hconv))
{

std::cout代码在哪里失败?传递给
dde\u服务器\u重新连接
hconv
是什么?您是否在调用线程上发送消息?您能否提供一个。提供的信息不足以回答您的问题。@IInspectable“代码在哪里失败?”--在
DdeReconnect
函数调用中失败(此函数返回0L,并且
DdeGetLastError
表示这是一个0x4006错误)。“什么是传递给dde_服务器\u重新连接的hconv?”--
hconv
传递给
dde_服务器\u重新连接的
函数直接来自
dde_回调
回调。“您在调用线程上发送消息吗?”--如果发生
XTYP\u DISCONNECT
事件,我将创建单独的线程并尝试重新连接它们。不要在注释中回答。而是更新您的问题。将hconv句柄传递给另一个线程是可疑的。我希望在
dde\u回调
返回后,该句柄将变为无效。这可能发生在执行之前、之后或执行之间g
dde\u server\u reconnect
@IInspectable我已经尝试在回调线程中重新连接--我得到了一个0x400a错误(
DMLERR\u NO\u CONV\u已建立)
--),因此您知道,服务器已终止对话,句柄无法再使用。