2015-09-17 75 views
-1

請任何人都可以闡明這一點。通過在互操作對象上使用非託管C++加速Com Interop調用

我有一個使用Outlook互操作程序集的程序,其中一部分速度非常慢,我想使用本地非託管C++來操作com對象以進行更深入的工作。

inline Microsoft :: Office :: Interop :: Outlook :: _ Application^OutlookApp() { return dynamic_cast(HostApplication); }

我希望做的是從日常通過上述返回Outlook對象可能與操縱或釘扎到非託管C++程序,然後操縱它作爲底層的本地COM對象,所以我得到非託管COM的速度。我想知道如何做到這一點,或者這會比在託管C++中來回編組更多。

這是甚至可能的,如果是的話,或者有什麼我不明白的概念和互操作?

+0

這是一個毫無意義的微觀優化。 Office應用程序是進程外服務器。進行互操作調用非常昂貴,它總是需要線程上下文切換以及序列化函數參數並返回函數結果的代價。成千上萬的cpu週期。沒有人能看到你的1%的性能改善。如果你想這樣做更快,那麼你必須編寫一個加載項。在Office進程中運行的代碼,因此可以避免必須橋接進程邊界的代價。 –

回答

-1

我想用母語非託管C++來操作COM對象(S)對一些更深入的工作

但你不使用非託管C++,而不是C++/CLI(託管C++)使用:

Microsoft::Office::Interop::Outlook::_Application^ OutlookApp() 
{ 
    return dynamic_cast(HostApplication); 
} 

如果你需要避免使用.NET Framework我建議開發非託管COM加載它實現了IDTExtensibility2接口或獨立的應用程序。

0

這是我認爲託管C++還沒有進入Office應用程序的流程邊界。所以還是很慢。看起來是使用Delphi的一個很好的理由。

相關問題