• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            Native c++ 和Managed 的 interop

            4種方法:

            There are four main ways to do interop in .NET between the managed and native worlds. COM interop can be accomplished using Runtime Callable Wrappers (RCW) and COM Callable Wrappers (CCW). The common language runtime (CLR) is responsible for type marshaling (except in the rare scenarios where a custom marshaler is used) and the cost of these calls can be expensive. You need to be careful that the interfaces are not too chatty; otherwise a large performance penalty could result. You also need to ensure that the wrappers are kept up to date with the underlying component. That said, COM interop is very useful for simple interop scenarios where you are attempting to bring in a large amount of native COM code.

            The second option for interop is to use P/Invoke. This is accomplished using the DllImport attribute, specifying the attribute on the method declaration for the function you want to import. Marshaling is handled according to how it has been specified in the declaration. However, DllImport is only useful if you have code that exposes the required functions through a DLL export.

            When you need to call managed code from native code, CLR hosting is an option. In such a scenario, the native application has to drive all of the execution: setting up the host, binding to the runtime, starting the host, retrieving the appropriate AppDomain, setting up the invocation context, locating the desired assembly and class, and invoking the operation on the desired class. This is definitely one of the most robust solutions in terms of control over what and when things happen, but it is also incredibly tedious and requires a lot of custom code.

            The fourth option, and quite possibly the easiest and the most performant, is to use the interop capabilities in C++. By throwing the /clr switch, the compiler generates MSIL instead of native machine code. The only code that is generated as native machine code is code that just can't be compiled to MSIL, including functions with inline asm blocks and operations that use CPU-specific intrinsics such as Streaming SIMD Extensions (SSE). The /clr switch is how the Quake II port to .NET was accomplished. The Vertigo software team spent a day porting the original C code for the game to code that successfully compiled as C++ and then threw the /clr switch. In no time they were up and running on the .NET Framework. Without adding any additional binaries and simply by including the appropriate header files, managed C++ and native C++ can call each other without any additional work on the part of the developer. The compiler handles the creation of the appropriate thunks to go back and forth between the two worlds.

            posted on 2006-08-17 16:26 夢在天涯 閱讀(2255) 評論(5)  編輯 收藏 引用 所屬分類: CPlusPlusC#/.NETManage c++ /CLIVS2005/2008

            評論

            # re: Native c++ 和Managed 的 interop 2006-08-17 16:28 夢在天涯

            msdn enlish:http://msdn.microsoft.com/msdnmag/issues/04/05/VisualC2005/default.aspx#S1  回復  更多評論   

            # re: Native c++ 和Managed 的 interop 2006-08-17 16:39 夢在天涯

            1 使用RCW和CCW來訪問
            是否可以在 .NET 框架程序中使用 COM 對象?
            是。您現在部署的任何 COM 組件都可以在托管代碼中使用。通常情況下,所需的調整是完全自動進行的。

            特別是,可以使用運行時可調用包裝 (RCW) 從 .NET 框架訪問 COM 組件。此包裝將 COM 組件提供的 COM 接口轉換為與 .NET 框架兼容的接口。對于 OLE 自動化接口,RCW 可以從類型庫中自動生成;對于非 OLE 自動化接口,開發人員可以編寫自定義 RCW,手動將 COM 接口提供的類型映射為與 .NET 框架兼容的類型。

            是否可以在 COM 程序中使用 .NET 框架組件?
            是。您現在創建的托管類型都可以通過 COM 訪問。通常情況下,所需的配置是完全自動進行的。托管開發環境的某些新特性不能在 COM 中訪問。例如,不能在 COM 中使用靜態方法和參數化構造函數。一般,提前確定給定類型所針對的用戶是一種較好的辦法。如果類型需要在 COM 中使用,您將被限制在使用 COM 可訪問的特性。

            默認情況下,托管類型可能是可見的,也可能是不可見的,這由用于編寫托管類型的語言決定。

            特別是,可以使用 COM 可調用包裝 (CCW) 從 COM 訪問 .NET 框架組件。這與 RCW(請參閱上一個問題)相似,但它們的方向相反。同樣,如果 .NET 框架開發工具不能自動生成包裝,或者如果自動方式不是您所需要的,則可以開發自定義的 CCW。

              回復  更多評論   

            # re: Native c++ 和Managed 的 interop 2006-08-17 16:53 夢在天涯

            2 使用p\invoke方法
            是否可以在 .NET 框架程序中使用 Win32 API?
            是。使用 P/Invoke,.NET 框架程序可以通過靜態 DLL 入口點的方式來訪問本機代碼庫。

            下面是 C# 調用 Win32 MessageBox 函數的示例:

            using System;
            using System.Runtime.InteropServices;

            class MainApp
            {
            [DllImport("user32.dll", EntryPoint="MessageBox")]
            public static extern int MessageBox(int hWnd, String strMessage, String strCaption, uint uiType);

            public static void Main()
            {
            MessageBox( 0, "您好,這是 PInvoke!", ".NET", 0 );
            }
            }
              回復  更多評論   

            # re: Native c++ 和Managed 的 interop 2006-08-17 16:57 夢在天涯

            3 使用 CLR hosting  回復  更多評論   

            # re: Native c++ 和Managed 的 interop 2006-08-17 16:58 夢在天涯

            4 修改clr編譯選項  回復  更多評論   

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1807602
            • 排名 - 5

            最新評論

            閱讀排行榜

            亚洲色欲久久久综合网东京热| 99精品久久精品一区二区| 看久久久久久a级毛片| 亚洲精品乱码久久久久久中文字幕| 久久久久亚洲av综合波多野结衣| 色偷偷久久一区二区三区| 97久久超碰国产精品旧版| 丁香久久婷婷国产午夜视频| 色偷偷88欧美精品久久久 | 亚洲日本va午夜中文字幕久久| 亚洲欧洲中文日韩久久AV乱码| 久久精品人人做人人妻人人玩| 18岁日韩内射颜射午夜久久成人| 99久久综合国产精品免费| MM131亚洲国产美女久久| 亚洲国产精品综合久久网络| 久久亚洲精品视频| 久久人人妻人人爽人人爽| 免费一级做a爰片久久毛片潮| 国产V亚洲V天堂无码久久久| 久久久久亚洲AV无码观看| 丰满少妇人妻久久久久久4| 久久综合九色综合网站| 中文成人久久久久影院免费观看| 久久婷婷综合中文字幕| 久久久免费精品re6| 久久亚洲国产精品成人AV秋霞| 久久男人中文字幕资源站| 久久精品成人国产午夜| 波多野结衣中文字幕久久| 性做久久久久久久| 亚洲乱码中文字幕久久孕妇黑人 | 一本色道久久88综合日韩精品 | AV无码久久久久不卡网站下载 | 狠狠色丁香婷婷综合久久来来去| 国产A级毛片久久久精品毛片| 久久婷婷午色综合夜啪| 欧美国产成人久久精品| 久久笫一福利免费导航| 久久亚洲熟女cc98cm| 久久免费大片|