CLR(Managed C++)
CLR開發出來的Dll需安裝.NET Framework才能跑,好處是可以使用.NET Framework函式庫寫出的Dll也可在Visual Studio直接加入參考使用。
MFC(Native Visual C++
或 plain C++)
MFC 開發出來的Dll則可以不需安裝.NET Framework,因此無法使用.NET Framework的函式庫,寫出的Dll也無法直接加入參考使用,則要用C語言的動態或靜態載入方式。
補充:
CLI又稱共同語言規範,用來定義.NET程式怎樣運作,CLR是CLI規範的實做
動作步驟:
- 由於Managed的Dll必須要註冊才能使用
- 按開始,由程式集進入Microsoft Visual Studio 的Visual Studio 2010 Tools
- 開啟Visual Studio 2010 命令提示
- 輸入managed DLL 所在的資料夾位置
- 輸入
- RegAsm.exe XXX.dll /tlb:XXX.tlb /codebase 如圖↓
- 完成上面步驟則會產生.tlb檔
- 補充:
- tlb為CLR物件。因為tlb並不是C++標準的物件,必須編譯成標準的C++類型,使得C++開發者可以使用。 tlh表示(.h) tli表示(.cpp)
- 使用方法:
- #import “XXX.tlb”,然後compiler,則會在debug或release下面產生XXX.tli和XXX.tlh物件。
- 接著,Native Visual C++必須支援CLR,才可編譯。
- 支援CLR流程:
- 點擊Project,接者點擊 XXX Properties. (XXX 為你的專案名子)
- 展開Configuration Properties,點擊 General.
- 點擊 Common Language Runtime Support此欄框,選擇Old Syntax (/clr:oldSyntax),確定後按套用及確定。 如圖↓
- 為了讓CLR能Build還必須加入一個reference (System.Windows.Forms)
- 點擊Project,接者點擊 XXX Properties. (XXX 為你的專案名子)
- 展開Comom Properties,點擊 Framework and References
- 點擊Add New Reference,接著點擊Browse,加入System.Windows.Forms
- System.Windows.Forms通常路徑為: C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Windows.Forms.dll
- 完成此步驟後 ,接者在您的程式中加入#import指令並compiler 。
- 之後會產生出的.tlh會在專案的debug或release資料夾中。
- 最後,在您的專案中加入#using <XXX.dll> 及 using namespace YYY; (YYY為dll中的namespace名稱),則可使用dll中的Device function寫入控制動作。
![]() |
| #import "XXX.tlb" no_namespace, raw_interfaces_only |
- 或是呼叫dll中直接設定參數的function,寫法如下:
#include "stdafx.h"#include "tchar.h"// Import the type library.#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only//ManagedDLL為你dll中namespace的名稱using namespace ManagedDLL;int _tmain(int argc, _TCHAR* argv[]){// Initialize COM.HRESULT hr = CoInitialize(NULL);// Create the interface pointer.//ManagedClass為你dll中class的名稱ICalculatorPtr pICalc(__uuidof(ManagedClass));long lResult = 0;//呼叫dll中的Add functionpICalc->Add(5, 10, &lResult);wprintf(L"The result is %d\n", lResult);// Uninitialize COM.CoUninitialize();return 0;}
注意: 支援CLR會與OpenCV發生衝突,因此必須關掉OpenCV。
附註: dll是由project產生出來的,所以必須要有它的原始碼,才會曉得如何使用它的function。
附註: dll是由project產生出來的,所以必須要有它的原始碼,才會曉得如何使用它的function。
想要更加了解可參考這網站:
















