C++ 如何重新连接到DDE服务器
如何重新连接到DDE服务器 下面的代码不断给我0x4006错误,根据,这意味着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;
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回调
返回后,该句柄将变为无效。这可能发生在执行之前、之后或执行之间gdde\u server\u reconnect
@IInspectable我已经尝试在回调线程中重新连接--我得到了一个0x400a错误(DMLERR\u NO\u CONV\u已建立)
--),因此您知道,服务器已终止对话,句柄无法再使用。