簡體   English   中英

從C ++ DLL內部在Delphi應用程序中進行回調

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM