- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C调用VC DLL
C#调用DLL函数方法(上) 2009-11-28? 来自:CSDN Blog? 字体大小:【大?中?小】摘要:本文介绍了C#调用DLL的方法,供大家参考。 -??? 首先,理解托管代码与非托管代码的区别:??? 1.托管代码所申请的资源统一由.Net Framework管理,你不用操心,非托管代码所申请的内存等资源则需要你手动去释放????? 2.非托管程序运行会很快,是二进制的,托管程序好写,但是速度就差的很多,资源会用的很多??? 3.“程序一般都是在对操作系统进行直接或者间接的操作????? 托管程序是需要通过访问公共语言运行时(cls)才能访问操作系统的程序,而“非托管程序”不用通过访问公共语言运行时(cls)可以直接访问操作系统的程序????? 4.,C#等写的程序是托管程序,VC++可以写托管程序,如果用到了内存管理,则只能编译为非托管程序??? VC++写托管的是要用.net的库,因为我们没有用.net,所以只用了非托管方式。??? (一)?C#调用DLL中的非托管函数一般方法??? 首先,应该在C#语言源程序中声明外部方法,其基本形式是:??? [DLLImport(“DLL文件”)]??? 修饰符 extern 返回变量类型 方法名称 (参数列表)??? 其中:??? DLL文件:包含定义外部方法的库文件。??? 修饰符: 访问修饰符,除了abstract以外在声明方法时可以使用的修饰符。??? 返回变量类型:在DLL文件中你需调用方法的返回变量类型。??? 方法名称:在DLL文件中你需调用方法的名称。??? 参数列表:在DLL文件中你需调用方法的列表。??? 注意:需要在程序声明中使用System.Runtime.InteropServices命名空间。??? DllImport只能放置在方法声明上。??? DLL文件必须位于程序当前目录或系统定义的查询路径中(即:系统环境变量中Path所设置的路径)。??? 返回变量类型、方法名称、参数列表一定要与DLL文件中的定义相一致。??? 其它可选的 DllImportAttribute 属性:??? CharSet 指示用在入口点中的字符集,如:CharSet=CharSet.Ansi;??? SetLastError 指示方法是否保留 Win32上一错误,如:SetLastError=true;??? ExactSpelling 指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配,如:ExactSpelling=false;??? PreserveSig指示方法的签名应当被保留还是被转换, 如:PreserveSig=true;??? CallingConvention指示入口点的调用约定, 如:CallingConvention=CallingConvention.Winapi;??? 此外,关于“数据封送处理”及“封送数字和逻辑标量”请参阅其它一些文章。??? 举例:??? New file,选择visual C# Class。在文件中,创建一个public的类。把待测试的函数在这个类中作声明。public?class?ClassName??? ??{?????? ?????[DllImport(xxx.dll,?EntryPoint?=?xx)] ?????????public?static?extern?int?StartVideo(int?nDevNum,?int?SwitchingChans,?IntPtr?Main,?IntPtr?hwndPreview); ??} ????? Xxx为待测试的dll名称,xx为dll中提供的方法函数。若要使用其它函数名,可以使用EntryPoint属性设置。??? 如何用DllImport调用DLL中的非托管函数,但是这个是全局的函数,假若DLL中的非托管函数有一个静态变量S,每次调用这个函数的时候,静态变量S就自动加1。结果,当需要重新计数时,就不能得出想要的结果。所以,要注意啊,用DllImport调用DLL中的非托管函数是全局的、静态的函数。??? 以上介绍的就是C#调用DLL函数方法(上),剩下的内容将在C#调用DLL函数方法(下)中继续给大家讲解。作者:Amy0428 C#调用DLL函数方法(下) 2009-11-28? 来自:CSDN Blog? 字体大小:【大?中?小】摘要:C#调用DLL函数 -??? 本文的内容接着C#调用DLL函数方法(上)。??? 因为C#中使用DllImport是不能像动态load/unload assembly那样,所以只能借助API函数了。在kernel32.dll中,与动态库调用有关的函数包括[3]:??? ①LoadLibrary(或MFC 的Af
文档评论(0)