у нас есть приложение delphi, которое содержит TXTextControl (v. 13.0).
Это приложение использует C ++ DLL (написано с Visual Studio 2008) для обработки распознавания речи. Когда DLL инициализируется, DispatchInterface TXTextControl передается из приложения delphi в DLL и сохраняется для дальнейшего использования.
Когда событие распознавания текста получено в коде DLL, ссылка интерфейса IDispatch на TXTextControl используется для вызова метода setText в текстовом элементе управления следующим образом:
try{
CString val(text.c_str());
this->_txtInterface.SetSelLength(0);
this->_txtInterface.SetSelText(val);
}catch(...){
LOG4CXX_FATAL(getLogger(), "COM exception!");
}
LOG4CXX_DEBUG(getLogger(), "OK");
где _txtInterface - интерфейс TXTextXontrol, сохраняемый при инициализации DLL.
Но когда вызывается интерфейс, ничего не происходит, и следующий код инструкции loge не выполняется. Похоже, интерфейс IDispatch больше не действителен.
В delphi интерфейсу idispatch передается следующий код во время инициализации DLL:
tmpRedit := TTxtextcontrol(tmpvocField.obj);
ires := gst.CreateNewDocument( tmpvocfield.DocID , tmpRedit.DefaultInterface , '');
где "tmpvocField.obj" - это ссылка на TXTextControl в delphi.
В чем может быть проблема?
Это проблема многопоточности? Я имею в виду, что TXTextControl находится в потоке 1, но событие распознавания текста находится в другом потоке (поток 2), поэтому idispatch больше не действителен во втором потоке?
Спасибо за любой ответ.
Паоло.