Native C++使用Managed Dll

  • 2436
  • 0

摘要: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就好~"~!