从C++DLL中调用Delphi应用程序
Callback within Delphi application from within C++ DLL
我们有一个delphi应用程序,它包含一个TXTextControl(v.13.0)。此应用程序使用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在第二个线程中不再有效?
感谢您的回复。保罗。
在c++中,没有像Delphi对接口那样的自动引用计数。您需要调用AddRef以确保refcount至少为1。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 将数据从Delphi DLL传递到C++应用程序中
- 将二进制数据从Qt/C++DLL传递到Delphi主机应用程序中
- MFC应用程序中Delphi 7和Delphi XE4之间的ActiveX差异
- 从C++DLL中调用Delphi应用程序
- 在Delphi应用程序中使用c++ DLL回调函数
- 在Delphi应用程序中调用C++DLL