跳至內容
Sars' History
使用者工具
登入
網站工具
工具
顯示頁面
舊版
反向連結
最近更新
多媒體管理器
網站地圖
登入
最近更新
多媒體管理器
網站地圖
足跡:
programming:dot_net_framework
本頁是唯讀的,您可以看到原始碼,但不能更動它。您如果覺得它不應被鎖上,請詢問管理員。
====== .Net Framework ====== ===== Visual C++ CLR Class Library ===== 公司內大部分的核心處理元件都是使用 COM DLL 寫成的,而且大部分的情況下也都是用 C++ 讀進去使用。這次由於接到的專案,客戶要求用 C# 做為 UI,呼叫我們的核心處理元件,由於核心處理元件有些複雜與低階,公司不打算讓客戶直接接觸到核心元件,有些功能可能也不打算開給客戶使用,因此希望能先包一層 wrapper 層。 整個架構就差不多是這樣: * UI - C# Console * Wrapper - Visuall C++ CLR Class Library * Kernel - COM DLL 以前其實已經有類似的合作經驗,當時是透過 Visuall C++ ATL Project 來完成的,但是當時傳遞的參數比較簡單,只有基本的 int/float/HRESULT 等等,最複雜也只到 SafeArray,這次則是要直接傳遞圖片的 raw data,處理起來複雜許多。 如果用 ATL 來寫 wrapper 層,預估可能五天還不一定做得玩,寫到第二天的時候發現窒礙難行,決議整個重來,改用 CLR Class Library 寫,兩天就把 UI + wrapper 層全部做完了! 趁記憶還新鮮,紀錄有用到的東西。使用 Visual Studio 2008 以及 .NET Framework 3.5 SP1。 ==== Create Project ==== 首先建立新的 Solution,選擇 Visual C++ → CLR → Class Library 接著建立 C# 的 Console Project,在 Solution Explorer 視窗裡面的 Solution 'CLRTest' 上按滑鼠右鍵 → Add → New Project 完成後 Solution Explorer 應該會長這樣 接著在 C# 的 Project 上按滑鼠右鍵 -> Add Reference 選擇 Project 分頁,然後選擇剛剛建立的 CLR Project 完成後應該就可以在 C# Project 的 References 裡面看到 CLR 的 Project ==== CLR Class Library ==== 在完成 Project 的建立之後,就可以開始寫 CLR Class 裡面所需要的功能,像是把 COM DLL 讀進來用,或是寫只有在 C++ 才能用的 Windows Imaging Component (WIC) 等等。 這邊範例先增加兩個簡單的功能:Add、Minus CLRTest.h <code> #pragma once using namespace System; namespace CLRTest { public ref class CLRTestClass { public: int Add(int x, int y); int Minus(int x, int y); }; } </code> CLRTest.cpp <code> // This is the main DLL file. #include "stdafx.h" #include "CLRTest.h" using namespace CLRTest; int CLRTestClass::Add(int x, int y) { return x + y; } int CLRTestClass::Minus(int x, int y) { return x - y; } </code> 完成後即可編譯 CLR Project,生出 Debug\CLRTest.dll 檔案。 這時用 Object Browser 打開 CLR Project,應該可以看到 Class 裡面有兩個 function 可以使用。 ==== C# ==== 建立好 CLR Project 後,在 C# 就可以很方便的直接拿來用 <code> using System; using CLRTest; namespace CLRTestConsole { class Program { static void Main(string[] args) { CLRTestClass clr = new CLRTestClass(); Console.WriteLine("3+2=" + clr.Add(3, 2)); Console.WriteLine("3-2=" + clr.Minus(3, 2)); } } } </code>
programming/dot_net_framework.1374223917.txt.gz
· 上一次變更: 2013/07/19 16:51 由
wenpei
頁面工具
顯示頁面
舊版
反向連結
回到頁頂