高大上强企业网站,北京seo的排名优化,咖啡网站模板,网站开发最新效果【 声明#xff1a;版权所有#xff0c;欢迎转载#xff0c;请勿用于商业用途。 联系信箱#xff1a;feixiaoxing 163.com】 很多时候#xff0c;我们并不希望所有的程序都放到一个exe里面。因为这样相当于把所有的风险都放在了一个文件里里面#xff0c;既不利于程序的升…【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】 很多时候我们并不希望所有的程序都放到一个exe里面。因为这样相当于把所有的风险都放在了一个文件里里面既不利于程序的升级也不利于程序的模块化切割和复用。回到c#它和单纯的c/c又不太一样因为它的dll有两种形式一种是c#生成的dll另外一种就是非c#生成的dll。 1、c#生成的dll 如果是c#编写的dll使用方法就比较简单了。在当前prj下面创建一个c#的工程编写对应的代码比如这样
// 假设DLL中的类是这样的
namespace YourDllNamespace
{public class YourClass{public static void MessageBoxFunction(string message){System.Windows.MessageBox.Show(message);}}
}这样编写好之后经过编译就可以生成对应的dll文件。回到之前的exe工程此时如果需要使用这个dll文件它需要做的只有两步。第一步就是在“引用”中选择刚才生成的dll第二步就是使用using关键字把刚才的namespace和类添加到当前的项目中。
using YourDllNamespace; // 引用DLL中的命名空间namespace YourWpfAppNamespace
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void ShowMessageBoxButton_Click(object sender, RoutedEventArgs e){// 调用DLL中的MessageBox函数YourClass.MessageBoxFunction(Hello from DLL!);}}
} 如此一来我们就可以完成c# dll的引用和处理了。 2、使用其他语言生成的dll 但是呢在c#出现之前本身已经很多很好的代码库它们很大一部分都是用c/c编写的。那么这个时候如果需要使用这些库的话就需要使用dllimport的形式了。这里为了简单说明一下我们使用了user32.dll里面的MessageBox函数做一个示范
using System;
using System.Runtime.InteropServices;
using System.Windows;namespace WpfApp
{/// summary/// MainWindow.xaml 的交互逻辑/// /summarypublic partial class MainWindow : Window{[DllImport(user32.dll, SetLastError true)]public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType);public MainWindow(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){MessageBox(IntPtr.Zero, Hello from user32.dll!, MessageBox Example, 0);}}
}通过阅读代码我们发现和之前有一点不同的是MessageBox在使用之前做了一个DllImport的声明和extern的标志。做到了这一点就可以在Button_Click回调函数里面使用MessageBox函数了。 当然在实际使用的时候可能还会稍微复杂点。比如c/c里面的数据结构基本上都不能直接引用了都要转成int、double、float、string这些基础形式。如果数据复杂一点大约比较好的处理方法就是先把数据pack成json的形式然后转给c/c。等结果ok了再转成json返回给c#这也是可以接受的一种方式。