第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將COM事件從C#觸發(fā)到C ++的正確方法是什么

將COM事件從C#觸發(fā)到C ++的正確方法是什么

C++
慕工程0101907 2021-05-11 17:49:45
我們有一個(gè)項(xiàng)目,其中包含許多C ++(使用ATL),VB6和最近的C#遺留代碼。我們最近將組件從C ++移植到了C#,該事件觸發(fā)由C ++,VB6和C#中的組件處理的事件。從理論上講,一切正常,但是觸發(fā)事件會(huì)生成許多System.NotImplementedExceptions。我已經(jīng)修改了觸發(fā)事件的代碼,以便它分別調(diào)用每個(gè)事件處理程序,這樣一個(gè)對(duì)象的異常不會(huì)阻止它在下一個(gè)對(duì)象中調(diào)用事件處理程序。if ( GeneratedChannelChange != null ){  // Invoke each handler separately, so that an exception in one invokation does not prevent us calling the next one.  foreach ( GeneratedChannelChangeEventHandler del in GeneratedChannelChange.GetInvocationList() )  {    try    {      del.Invoke ( GenChan, ChangeMask ) ;    }    catch  ( Exception ) {}  }}實(shí)際上,由ATL向?qū)傻脑糃 ++代碼也忽略了invoke函數(shù)返回的錯(cuò)誤。這似乎工作正常,但是我對(duì)它產(chǎn)生的大量異常不滿意。在調(diào)試器中運(yùn)行時(shí),這也會(huì)降低性能。我認(rèn)為只有在C ++類(lèi)中處理事件時(shí)才會(huì)引發(fā)異常。這是使用ATL類(lèi)IDispEventSimpleImpl實(shí)現(xiàn)的。我發(fā)現(xiàn)的是,IDispEventSimpleImpl沒(méi)有實(shí)現(xiàn)功能GetIDsOfNames??隙〞?huì)調(diào)用此函數(shù),并且它將返回E_NOTIMPL。可能是新的C#代碼正在調(diào)用函數(shù)GetIDsOfNames,而舊的C ++代碼沒(méi)有嗎?如果是這樣,是否有任何簡(jiǎn)單的方法可以在使用IDispEventSimpleImpl的類(lèi)中實(shí)現(xiàn)功能GetIDsOfNames?如果我的分析是錯(cuò)誤的,是否有“正確”的方法在C#(作為事件源)和C ++(作為事件接收器)中實(shí)現(xiàn)事件邏輯?
查看完整描述

1 回答

?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

我想,我已經(jīng)解決了這一問(wèn)題,通過(guò)更換IDispEventSimpleImpl的與IDispEventImpl的。


這或多或少是一個(gè)即插即用的替代品,但是它確實(shí)需要引用類(lèi)型庫(kù)。


ATL類(lèi)繼承了多個(gè)基類(lèi),包括一個(gè)定義為WorkspaceEventSink的基類(lèi)。


class ATL_NO_VTABLE CImportChannels :

  ...

  public WorkspaceEventSink,

  ...

{

   ...

}

先前定義為


typedef IDispEventSimpleImpl< 42, CImportChannels, &DIID_ICs3WorkspaceEvents>        WorkspaceEventSink ;

我已將定義更改為


typedef IDispEventImpl< 42, CImportChannels, &DIID_ICs3WorkspaceEvents, &LIBID_McAnalEventsNET, 1, 0 >        WorkspaceEventSink ;

除了將IDispEventSimpleImpl更改為IDispEventImpl外,我還添加了類(lèi)型庫(kù)的GUID及其主要版本號(hào)和次要版本號(hào)。


最初,我嘗試不使用主要版本號(hào)和次要版本號(hào),但這導(dǎo)致了類(lèi)型庫(kù)未注冊(cè)的異常。


無(wú)需進(jìn)行其他更改(例如對(duì)接收器映射進(jìn)行更改)。


查看完整回答
反對(duì) 回復(fù) 2021-05-23
  • 1 回答
  • 0 關(guān)注
  • 330 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)