资源描述:
《C调用DLL的详细步骤.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、中国传媒大学计算机学院银国徽在C#中调用dll的方法第一步:在命名空间之外要添加声明对一个重要类库的使用。usingSystem.Runtime.InteropServices;第二步:使用DllImport关键字声明调用DLL文件中的函数。此处的声明调用该DLL函数的类开头部分。例:publicclassXXXX{[DllImport(“MyDLL.dll")]publicstaticexternintmySum(inta,intb);}注释:代码中DllImport关键字作用是告诉编译器入口点在哪里,并将打包函数捆绑在这个类中在调用的时候在类中的时候直接mySum(a,b
2、);就可以了在其他类中调用:XXXX.mySum(a,b);[DllImport(“MyDLL.dll”)]在申明的时候还可以添加几个属性[DllImport(“MyDLL.dll",EntryPoint="mySum",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]EntryPoint:指定要调用的DLL入口点。默认入口点名称是托管方法的名称。harSet:控制名称重整和封送String参数的方式(默认UNICODE)CallingConvention指示入口点的函数调用约定(默认WINA
3、PI)SetLastError指示被调用方在从属性化方法返回之前是否调用SetLastErrorWin32API函数(C#中默认false)API函数的参数传递注释:参数传递分为值传递和引用传递。可以把引用传递理解为C++中的指针传递。(1)整形类型1、int类型[DllImport(“MyDLL.dll")]//返回个int类型publicstaticexternintmySum(inta1,intb1);//DLL中申明extern“C”__declspec(dllexport)intWINAPImySum(inta2,intb2){//a2b2不能改变a1b1//a2=
4、..//b2=...returna+b;}//参数传递int类型publicstaticexternintmySum(refinta1,refintb1);//DLL中申明extern“C”__declspec(dllexport)intWINAPImySum(int*a2,int*b2){//可以改变a1,b1*a2=...*b2=...returna+b;}(2)字符类型注释:字符类型分为参数的传入和传出。DLL需传入char*类型[DllImport(“MyDLL.dll")]//传入值publicstaticexternintmySum(stringastr1,str
5、ingbstr1);//DLL中申明extern“C”__declspec(dllexport)intWINAPImySum(char*astr2,char*bstr2){//改变astr2bstr2,astr1bstr1不会被改变中国传媒大学计算机学院银国徽returna+b;}DLL需传出char*类型[DllImport(“MyDLL.dll")]//传出值publicstaticexternintmySum(StringBuilderabuf,StringBuilderbbuf);//DLL中申明extern“C”__declspec(dllexport)intWIN
6、APImySum(char*astr,char*bstr){//传出char*改变astrbstr-->abuf,bbuf可以被改变returna+b;}(3)传递结构参数DLL传递结构(见代码)BOOLPtInRect(constRECT*lprc,POINTpt);usingSystem.Runtime.InteropServices;[StructLayout(LayoutKind.Sequential)]publicstructPoint{publicintx;publicinty;}[StructLayout(LayoutKind.Explicit)]publics
7、tructRect{[FieldOffset(0)]publicintleft;[FieldOffset(4)]publicinttop;[FieldOffset(8)]publicintright;[FieldOffset(12)]publicintbottom;}ClassXXXX{[DllImport("User32.dll")]publicstaticexternboolPtInRect(refRectr,Pointp);}在此原型中,我们用“ref”指明将传递结构指针而不是结构值。这是处理通过