[英]Callback within Delphi application from within C++ DLL
我们有一个包含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中,在DLL初始化期间,使用以下代码传递idispatch接口:
tmpRedit := TTxtextcontrol(tmpvocField.obj);
ires := gst.CreateNewDocument( tmpvocfield.DocID , tmpRedit.DefaultInterface , '');
其中“ tmpvocField.obj”是delphi中对TXTextControl的引用。
可能是什么问题呢? 这是线程问题吗? 我的意思是TXTextControl在线程1中,但是文本识别事件在另一个线程(线程2)中,所以idispatch在第二个线程中不再有效吗?
感谢您的任何回复。 保罗
在c ++中,没有像Delphi那样对接口进行自动引用计数。 您需要调用AddRef以确保refcount至少为1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.