2022年每种编程编程语言调用dll文件的方法-C .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年每种编程编程语言调用dll文件的方法-C .pdf》由会员分享,可在线阅读,更多相关《2022年每种编程编程语言调用dll文件的方法-C .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、每种编程编程语言调用dll文件的方法不尽相同, 这里对 C调用 dll文件的方法进行介绍。( 一) 调用 dll中的非托管函数的一般方法首先,应该在 C#语言源程序中声明外部方法,其基本形式是:DLLImport( “DLL文件” ) 修饰符 extern 返回变量类型方法名称(参数列表)其中:DLL文件:包含定义外部方法的库文件。修饰符:访问修饰符,除了abstract以外在声明方法时可以使用的修饰符。返回变量类型:在DLL文件中你需调用方法的返回变量类型。方法名称:在 DLL文件中你需调用方法的名称。参数列表:在 DLL文件中你需调用方法的列表。注意:需要在程序声明中使用System.Ru
2、ntime.InteropServices命名空间。DllImport只能放置在方法声明上。DLL文件必须位于程序当前目录或系统定义的查询路径中(即:系统环境变量中Path 所设置的路径)。返回变量类型、方法名称、参数列表一定要与DLL文件中的定义相一致。若要使用其它函数名,可以使用EntryPoint属性设置,如:DllImport(user32.dll, EntryPoint=MessageBoxA) static extern int MsgBox(int hWnd, string msg, string caption, int type); 其它可选的 DllImportAttrib
3、ute 属性:CharSet 指示用在入口点中的字符集,如:CharSet=CharSet.Ansi ;SetLastError 指示方法是否保留 Win32 上一错误 ,如: SetLastError=true;ExactSpelling 指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配,如:ExactSpelling=false;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - PreserveSig 指示方法
4、的签名应当被保留还是被转换,如:PreserveSig=true;CallingConvention指示入口点的调用约定,如:CallingConvention=CallingConvention.Winapi;此外,关于“数据封送处理” 及 “封送数字和逻辑标量” 请参阅其它一些文章 2 。C#例子:1. 启动 VS.NET ,新建一个项目,项目名称为“Tzb”,模板为“ Windows 应用程序”。2. 在“工具箱”的“ Windows 窗体”项中双击“ Button ”项,向“ Form1 ”窗体中添加一个按钮。3. 改变按钮的属性: Name 为 “B1”,Text 为 “用 DllI
5、mport调用 DLL弹出提示框”,并将按钮B1调整到适当大小,移到适当位置。4. 在类视图中双击 “Form1”,打开“Form1 cs”代码视图,在“namespace Tzb”上面输入“ using System.Runtime.InteropServices;”,以导入该命名空间。5. 在“Form1 cs设计”视图中双击按钮B1,在“ B1_Click ”方法上面使用关键字 static 和 extern 声明方法“ MsgBox ”,将 DllImport 属性附加到该方法,这里我们要使用的是“user32dll ”中的“MessageBoxA ”函数,具体代码如下:DllImpo
6、rt(user32.dll, EntryPoint=MessageBoxA) static extern int MsgBox(int hWnd, string msg, string caption, int type); 然后在“ B1_Click ”方法体内添加如下代码,以调用方法“MsgBox ”:MsgBox(0, 这就是用 DllImport 调用 DLL 弹出的提示框哦! , 挑战杯,0 x30); 6. 按“F5”运行该程序,并点击按钮B1,便弹出如下提示框:( 二) 动态装载、调用 DLL中的非托管函数在上面已经说明了如何用DllImport调用 DLL中的非托管函数,但是这
7、个是全局的函数,假若 DLL中的非托管函数有一个静态变量S, 每次调用这个函数的时候,静态变量 S就自动加 1。结果,当需要重新计数时,就不能得出想要的结果。下面将用例子说明:1. DLL 的创建1) 启动 Visual C+ 6.0;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 2) 新建一个“ Win32 Dynamic-Link Library”工程,工程名称为“ Count”;3) 在“Dll kind”选择界面中选择
8、“ A simple dll project”;4) 打开 Count.cpp ,添加如下代码:/ 导出函数,使用“ _stdcall ” 标准调用extern C _declspec(dllexport)int _stdcall count(int init); int _stdcall count(int init) /count 函数,使用参数 init 初始化静态的整形变量 S ,并使 S 自加 1 后返回该值static int S=init; S+; return S; 5) 按“F7”进行编译,得到Count.dll(在工程目录下的Debug文件夹中)。2. 用 DllImpor
9、t调用 DLL中的 count 函数1) 打开项目“ Tzb”,向“ Form1 ”窗体中添加一个按钮。2) 改变按钮的属性: Name 为 “B2”,Text 为 “用 DllImport调用 DLL中 count函数”,并将按钮B1调整到适当大小,移到适当位置。3) 打开“ Form1cs”代码视图,使用关键字 static 和 extern 声明方法“count ”,并使其具有来自 Count.dll 的导出函数 count 的实现,代码如下:DllImport(Count.dll) static extern int count(int init); 4) 在“Form1 cs设计”视
10、图中双击按钮B2,在“ B2_Click ”方法体内添加如下代码:MessageBox.Show( 用 DllImport 调用 DLL 中的 count 函数, n 传入的实参为 0 ,得到的结果是: +count(0).ToString(), 挑战杯 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - MessageBox.Show( 用 DllImport 调用 DLL 中的 count 函数, n 传入的实参为 10
11、,得到的结果是: +count(10).ToString()+n 结果可不是想要的 11 哦! , 挑战杯 ); MessageBox.Show( 所得结果表明: n 用 DllImport 调用 DLL 中的非托管 n 函数是全局的、静态的函数! , 挑战杯 ); 5) 把 Count.dll复制到项目“ Tzb”的 binDebug 文件夹中,按“ F5”运行该程序,并点击按钮 B2,便弹出如下三个提示框:第 1 个提示框显示的是调用“ count(0) ”的结果,第 2 个提示框显示的是调用“count(10) ”的结果,由所得结果可以证明“用DllImport调用 DLL中的非托管函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年每种编程编程语言调用dll文件的方法-C 2022 每种 编程 语言 调用 dll 文件 方法
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内