首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi应用程序中的C++动态链接库回调

Delphi应用程序中的C++动态链接库回调
EN

Stack Overflow用户
提问于 2012-02-15 00:27:16
回答 1查看 271关注 0票数 1

我们有一个包含TXTextControl (v13.0)的delphi应用程序。此应用程序使用C++动态链接库(用visual Studio2008编写)来处理语音识别。当动态链接库被初始化时,TXTextControl的DispatchInterface被从delphi应用程序传递到动态链接库,并存储起来以供以后使用。当在DLL代码中接收到文本识别事件时,将使用对TXTextControl的IDispatch接口引用来调用文本控件上的setText方法,如下所示:

代码语言:javascript
复制
  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接口:

代码语言:javascript
复制
tmpRedit := TTxtextcontrol(tmpvocField.obj);
ires := gst.CreateNewDocument( tmpvocfield.DocID , tmpRedit.DefaultInterface , '');

其中"tmpvocField.obj“是对delphi中的TXTextControl的引用。

可能的问题是什么?这是线程问题吗?我的意思是TXTextControl在线程1中,但文本识别事件在不同的线程(线程2)中,所以idispatch在第二个线程中不再有效?

感谢您的回复。保罗。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-16 01:24:19

在c++中,没有像Delphi那样对接口进行自动引用计数。您需要调用AddRef以确保refcount至少为1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9280478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档