首页 总结的c调用DLL方法

总结的c调用DLL方法

举报
开通vip

总结的c调用DLL方法 现粗略总结两种 C#调用 DLL 库的方法, 一种是 C++ 写的 DLL 库,另 一种则是 C# 生成的 DLL 库,详细给出了两种不同的使用例子以供菜鸟们学习提高。 第一种情况: C# 中调用 C++ 生成的 DLL (1) 用 VS 写好如下代码编译成 DLL 库 struct HHFC_SET { char * UID; int code; }; extern "C" __declspec ( dllexport ) int PReadUID( HHFC_SET* mystru...

总结的c调用DLL方法
现粗略总结两种 C#调用 DLL 库的方法, 一种是 C++ 写的 DLL 库,另 一种则是 C# 生成的 DLL 库,详细给出了两种不同的使用例子以供菜鸟们学习提高。 第一种情况: C# 中调用 C++ 生成的 DLL (1) 用 VS 写好如下代码编译成 DLL 库 struct HHFC_SET { char * UID; int code; }; extern "C" __declspec ( dllexport ) int PReadUID( HHFC_SET* mystruct ) { int a=5; CString ds="sea" ; // mystruct->UID=ds.GetBuffer(ds.GetLength()+1); mystruct -> UID="hello!" ; test tt ; tt . ws(); return a; } (2) 在 C# 中生成一个文件名为 Ivoke.cs( 随意取的 ) namespace PInvoke// 域名空间,随意取 { public class Ivoke// 类名随意取 { [ DllImport ( "standerMFC.dll" )] //nPort:1 代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf COM1,返回 -1 代表已经打开 COM PORT失败 ,0 代表 COM已经打开 , 返回其它值表示打开对应的 COM // public static extern int hp(); public static extern int C++中定义的 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 名 ( ref HHFC_SETstru );// 这样的 外部函数引用在每一个 CS文件中只能有一个,且只能是函数,不能是类 } public struct HHFC_SET { public String Uid ; public int code ; }//C++ 写的 DLL文件中定义的结构体 } (3) 在 CS 编辑器中再次添加一个 CS 文件,名字自取,但包函 main 入口函数,在这个文件中便可以引用 C++ 写的 DLL 文件中的函数了 using System; using System. Text ; namespace PInvoke { class Class1 { static void Main( string [] args ) { HHFC_SETstru =new HHFC_SET (); stru . Uid ="" ; HHFC_SETstru1 = new HHFC_SET(); stru1 . Uid = "weisong513!" ; Ivoke . PReadUID( ref stru ); Console . WriteLine ( stru . Uid +"," +stru1 . Uid ); Console . Read(); } } } 第二种情况: C#调用 C#写的 DLL 文件 (一)、准备工作 我们需要对我们接下来要做的事情做个简单的介绍,在本文我们将利用 C#语言创建一个名 为 MyDLL.DLL 的动态链接库,在这个动态链接库文件中我们将提供两个功能一个是对两个 参数交换他们的值, 另一个功能是求两个参数的最大公约数。 然后创建一个应用程序使用这 个 DLL。运行并输出结果。 (二)、创建 DLL (1)创建以下三个 C#代码文件: 1、 MySwap.cs using System; namespace MyMethods { public class SwapClass { public static bool Swap(ref long i,ref long j) { i = i+j; j = i-j; i = i-j; return true; } } } 2、 MyMaxCD.cs using System; namespace MyMethods { public class MaxCDClass { public static long MaxCD(long i, long j) { long a,b,temp; if(i>j) { a = i; b = j; } else { b = i; a = j; } temp = a % b; while(temp!=0) { a = b; b = temp; temp = a % b; } return b; } } } } (2)接下来的任务是把这两个 cs 文件变成我们需要的 DLL文件。 在安装了 Microsoft.NET Framework 的操作系统上的 Windows 所在目录下找到 Microsoft.NET 目录,找到 C#的编译器: CSC.EXE 运行: csc /target:library /out:MyDLL.DLL MySwap.cs MyMaxCD.cs 完成后可在本目录下面找到我们刚才生成的 MyDLL.DLL文件 /target:library 编译器选项通知编译器输出 DLL 文件而不是 EXE 文件。后跟文件名的 /out 编译器选项用于指定 DLL 文件名。 如果 /out 后面不跟文件名编译器使用第一个文件 (MySwap.cs) 作为 DLL 文件名。生成的文 件为 MySwap.DLL 文件 (3)创建动态链接库文件的任务完成了。 (三) 将刚生成的 DLL文件运用到 C#文件中 编写如下: using System; using MyMethods; // 这里我们引用刚才定义的名称空间,如果刚才的两个文件我们写在两个不同的名称空间 class MyClient { public static void Main(string[] args) { if (args.Length != 2) { Console.WriteLine("Usage: MyClient "); return; } long num1 = long.Parse(args[0]); long num2 = long.Parse(args[1]); SwapClass.Swap(ref num1,ref num2); // 请注意,文件开头的 using 指令使您得以在编译时使用未限定的类名来引用 DLL 方法 Console.WriteLine("The result of swap is num1 = {0} and num2 ={1}",num1, num2); long maxcd = MaxCDClass.MaxCD(num1,num2); Console.WriteLine("The MaxCD of {0} and {1} is {2}",num1, num2, maxcd); } } 若要生成可执行文件 MyClient.exe,请使用以下命令行: csc /out:MyClient.exe /reference:MyLibrary.DLL MyClient.cs /out 编译器选项通知编译器输出 EXE 文件并且指定输出文件名 (MyClient.exe) 。/reference 编译器选项指定该程序所引用的 DLL 文件。 (四)、执行 若要运行程序,请输入 EXE 文件的名称,文件名的后面跟两个数字,例如: MyClient 123 456 (五)、输出 The result of swap is num1 = 456 and num2 = 123 The MaxCD of 456 and 123 is 3 小结 学校三防设施建设情况幼儿园教研工作小结高血压知识讲座小结防范电信网络诈骗宣传幼儿园师德小结 : 动态链接具有下列优点: 节省内存和减少交换操作。很多进程可以同时使用一个 DLL,在内存中共享该 DLL 的一个 副本。相反,对于每个用静态链接库生成的应用程序, Windows 必须在内存中加载库代码 的一个副本。 节省磁盘空间。许多应用程序可在磁盘上共享 DLL 的一个副本。相反,每个用静态链接库 生成的应用程序均具有作为单独的副本链接到其可执行图像中的库代码。 升级到 DLL 更为容易。 DLL 中的函数更改时,只要函数的参数和返回值没有更改,就不需 重新编译或重新链接使用它们的应用程序。 相反,静态链接的对象代码要求在函数更改时重 新链接应用程序。 提供售后支持。例如,可修改显示器驱动程序 DLL 以支持当初交付应用程序时不可用的显 示器。 支持多语言程序。 只要程序遵循函数的调用约定, 用不同编程语言编写的程序就可以调用相 同的 DLL 函数。 程序与 DLL 函数在下列方面必须是兼容的: 函数期望其参数被推送到堆栈 上的顺序,是函数还是应用程序负责清理堆栈,以及寄存器中是否传递了任何参数。 提供了扩展 MFC 库类的机制。可以从现有 MFC 类派生类,并将它们放到 MFC 扩展 DLL 中供 MFC 应用程序使用。 使国际版本的创建轻松完成。通过将资源放到 DLL 中,创建应用程序的国际版本变得容易 得多。可将用于应用程序的每个语言版本的字符串放到单独的 DLL 资源文件中,并使不同 的语言版本加载合适的资源。 使用 DLL 的一个潜在缺点是应用程序不是独立的;它取决于是否存在单独的 DLL 模块。
本文档为【总结的c调用DLL方法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_321635
暂无简介~
格式:pdf
大小:20KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2017-05-15
浏览量:55