摘要:Native C++使用Managed Dll
剛好有同事在問: 如果用VB.NET(C#)寫的DLL可以給Native C++使用嗎?
http://support.microsoft.com/kb/828736
按照微軟的說明去操作應該是可以達成,在這裡紀錄簡單一點的步驟
1. 建立Managed dll
a. 建立介面(Interface)
b. 實作
c. 設定COM Visible(建置選項或REGASM.EXE)
d. 若需要,建立強式名稱金鑰
2. 註冊Managed Dll (我自己用的開發環境是沒跑這步驟,應該就是上面的1-c,如果是在別台電腦上使用已開發好的DLL就一定要有這個過程)
3. 從Native C++ 使用Managed Dll
a. TLBEXP.EXE產生ManagedDll.tlb
b. Import TLB
// Import the type library.
#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
c. 使用命名空間
using namespace ManagedDLL;
d. 呼叫並且使用
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
ICalculatorPtr pICalc(__uuidof(ManagedClass));
long lResult = 0;
// Call the Add method.
pICalc->Add(5, 10, &lResult);
wprintf(L"The result is %d", lResult);
// Uninitialize COM.
CoUninitialize();
return 0;
e. 編譯完成即可
以上程式碼是從微軟那邊複製過來,請改成適合自己環境的名稱或功能
大致上成功了就會得到DLL運算的結果,剩下看自己怎麼用嚕
如果要把DLL散布出去使用的話有一些注意事項
1. DLL的檔案路徑最好是放在跟呼叫他的程式在一起
2. 要記得註冊DLL (REGASM.EXE DLLNAME.DLL),註冊時需要有管理員權限
我以前一直以為Native C++沒辦法用.NET的DLL
原來還是可以,只是要多花點步驟去處理,如果可以的話我還是比較喜歡.NET對.NET就好~"~!