資源描述:
《C#里調(diào)用DLL的方法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、為了能用上原來的C++代碼,只好研究下從C#中調(diào)用DLL首先必須要有一個(gè)聲明,使用的是DllImport關(guān)鍵字:包含DllImport所在的名字空間usingSystem.Runtime.InteropServices;publicclassXXXX{[DllImport(“MyDLL.dll")]publicstaticexternintmySum(inta,intb);}[DllImport(“MyDLL.dll")]publicstaticexternintmySum(inta,intb);代碼中DllImport關(guān)鍵字作用是告訴編譯器入口點(diǎn)在哪里,并將打包函數(shù)捆綁在這個(gè)類
2、中在調(diào)用的時(shí)候在類中的時(shí)候直接??mySum(a,b);就可以了在其他類中調(diào)用:XXXX.mySum(a,b);[DllImport(“MyDLL.dll”)]在申明的時(shí)候還可以添加幾個(gè)屬性[DllImport(“MyDLL.dll",EntryPoint="mySum",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]EntryPoint:指定要調(diào)用的DLL入口點(diǎn)。默認(rèn)入口點(diǎn)名稱是托管方法的名稱。CharSet:控制名稱重整和封送String參數(shù)的方式(默認(rèn)是UNICODE)CallingCon
3、vention指示入口點(diǎn)的函數(shù)調(diào)用約定(默認(rèn)WINAPI)(上次報(bào)告講過的)SetLastError指示被調(diào)用方在從屬性化方法返回之前是否調(diào)用SetLastErrorWin32API函數(shù)(C#中默認(rèn)false)int類型[DllImport(“MyDLL.dll")]//返回個(gè)int類型publicstaticexternintmySum(inta1,intb1);//DLL中申明extern“C”__declspec(dllexport)?intWINAPImySum(inta2,intb2){//a2b2不能改變a1b1//a2=..//b2=...returna+b;}//
4、參數(shù)傳遞int類型publicstaticexternintmySum(refinta1,refintb1);//DLL中申明extern“C”__declspec(dllexport)?intWINAPImySum(int*a2,int*b2){//可以改變a1,b1*a2=...*b2=...returna+b;}DLL需傳入char*類型[DllImport(“MyDLL.dll")]//傳入值publicstaticexternintmySum(string?astr1,stringbstr1);//DLL中申明extern“C”__declspec(dllexport)
5、?intWINAPImySum(char*astr2,char*bstr2){//改變astr2bstr2?,astr1bstr1不會(huì)被改變r(jià)eturna+b;}DLL需傳出char*類型[DllImport(“MyDLL.dll")]//傳出值publicstaticexternintmySum(StringBuilderabuf,StringBuilderbbuf);//DLL中申明extern“C”__declspec(dllexport)?intWINAPImySum(char*astr,char*bstr){//傳出char* 改變astr bstr-->abuf,bb
6、uf可以被改變r(jià)eturna+b;}DLL回調(diào)函數(shù)BOOLEnumWindows(WNDENUMPROClpEnumFunc,LPARAMlParam)usingSystem;usingSystem.Runtime.InteropServices;publicdelegateboolCallBack(inthwnd,intlParam);//定義委托函數(shù)類型publicclassEnumReportApp{[DllImport("user32")]publicstaticexternintEnumWindows(CallBackx,inty);publicstaticvoidMa
7、in(){CallBackmyCallBack=newCallBack(EnumReportApp.Report);EnumWindows(myCallBack,0);}publicstaticboolReport(inthwnd,intlParam){Console.Write("Windowhandleis");Console.WriteLine(hwnd);returntrue;}}DLL?傳遞結(jié)構(gòu)??(見代碼)BOOLPtInRect(constRECT*lprc,POI