Я пытаюсь создать и реализовать DDE-dll с Qt, но пока я не могу правильно подключиться к службе, которую, как я знаю, работает после тестирования с помощью Excel.Ошибка подключения DDE по неизвестным причинам
DLL, функция подключения выглядит следующим образом:
UINT respTemp;
respTemp = DdeInitializeA(&pidInst, NULL, APPCLASS_STANDARD | APPCMD_CLIENTONLY, 0L);
//handle error messages here
//...
//![]
hszService = DdeCreateStringHandleA(pidInst, (LPCSTR)service.utf16(), CP_WINANSI); //service.toLatin1().toStdString().c_str()
hszTopic = DdeCreateStringHandleA(pidInst, (LPCSTR)topic.utf16(), CP_WINANSI); //topic.toLatin1().toStdString().c_str()
hConv = DdeConnect(pidInst, hszService, hszTopic, NULL);
DdeFreeStringHandle(pidInst, hszService);
DdeFreeStringHandle(pidInst, hszTopic);
if (!hConv)
{
UINT ddeLastError = DdeGetLastError(pidInst);
switch (ddeLastError)
{
case DMLERR_DLL_NOT_INITIALIZED: return DDEConn_DLLNotInitialized;
case DMLERR_INVALIDPARAMETER: return DDEConn_InvalidParameter;
case DMLERR_NO_CONV_ESTABLISHED: return DDEConn_NoConvEstablished;
default: return DDEConn_NoConnectionStablished;
}
}
connStatus = true;
return DDEConn_NoError;
Функция теста выглядит следующим образом:
void MainWindow::on_start_clicked()
{
const QString application = "profitchart"; //=profitchart|COT!VALE5.ult
const QString topic = "COT";
const QString item = "VALE5.ult";
test = CommDDE::instance();
CommDDE::DDEConnectionErrorList resp = test->connect(application,topic);
if (resp == CommDDE::DDEConn_NoError)
{
qDebug() << "request RESULT: " << test->request(item);
}
else
qDebug() << "Can't connect to application" << resp;
}
Всегда, когда я пытаюсь соединить я получаю ошибку DMLERR_NO_CONV_ESTABLISHED
после вызова DdeConnect
. Я не мог найти уверенности в том, что делать, когда возникает такая ошибка. Я не слишком разбираюсь в деталях настройки таких функций, поэтому использовал конфигурацию по умолчанию, используемую рабочей dll, из которой я получил часть исходного материала для этой DLL. Должен ли я попробовать другую конфигурацию, о которой я не знаю? Помня, что вызов работает над Excel.