我们有一个包含TXTextControl(v.13.0)的delphi应用程序。 此应用程序使用C ++ DLL(使用visual studio 2008编写)来处理语音识别。初始化DLL时,TXTextControl的DispatchInterface从delphi应用程序传递到DLL并存储以供以后使用。 当在DLL代码中收到文本识别事件时,对TXTextControl的IDispatch接口引用用于调用文本控件上的方法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是初始化DLL时存储的TXTextXontrol接口。
但是当调用接口时,没有任何反应,并且不执行以下的loge指令代码。似乎IDispatch接口不再有效。
在delphi中,idispatch接口在DLL初始化期间使用以下代码传递:
tmpRedit := TTxtextcontrol(tmpvocField.obj);
ires := gst.CreateNewDocument( tmpvocfield.DocID , tmpRedit.DefaultInterface , '');
其中“tmpvocField.obj”是delphi中TXTextControl的引用。
可能是什么问题? 这是一个线程问题吗?我的意思是TXTextControl在线程1中但文本识别事件在不同的线程(线程2)中,因此idispatch在第二个线程中不再有效?
感谢您的回复。 保罗。
答案 0 :(得分:1)
在c ++中,没有像Delphi那样的自动引用计数用于接口。 您需要调用AddRef以确保refcount至少为1。