拿來一個dll,是c#編譯的,我在c++程式中需要使用該dll,網上查了相關資料,需要用到 c++託管相關知識,即CLR公用語言時運行環境。具體使用步驟如下:
1.拷貝dll到工程運行目錄下。
2.引用:
#using \"..\\debug\\CTest.dll\"
using namespace CTest;
如果 程式中引用了 其他.net組建的程式集,根據提示進行引用。例如缺少:程式集“System.Windows.Forms 則添加 #using <System.Windows.Forms.dll>
3.項目屬性,修改“Common Language Runtime 支援”為 "/clr".
4.託管對象使用:
ClassName ^p = gcnew ClassName();
p->Fun(); // 調用dll的函數
//delete p;
通過gcnew來執行個體化,無需使用delete來釋放記憶體,gcnew出來的記憶體由
虛擬機器託管,程式結束後,會自動銷毀。
5.如果dll提供的介面,需要註冊回調。則文法和c#註冊回調文法一樣
如:
c#裡回呼函數定義如下 :
namespace CTest
{
public class ClassName : UserControl
{
public ClassName();
public event ClassName.DataReceive myDataReceive;
public delegate void DataReceive(int iDoor, string sOPtag);
}
}
則回調設定方法:
p->myDataReceive += gcnew ClassName::DataReceive(GetAccessMsg);
GetAccessMsg 定義如下:
void GetAccessMsg(int iDoor, System::String^ sOPtag)) { // 把 System::String^ 類型轉換成 char* IntPtr sptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(sOPtag); char* pMsg = (char*)sptr.ToPointer(); cout<<iDoor<<endl; }}