在Silverlight程序(非Out of browser模式)中是无法直接调用DLL的,但是很多的计算或者其他应用程序的调用中我们需要用到DLL的加载。比如调用DLL来识别身份证读卡器传输过来的信号,比如要和某Delph编写的程序数据通讯等等。本文将简单的自写一个DLL文件,然后通过调用此DLL自定义的一个GetNum函数计算传入得两个参数之和。
首先我们使用VS2010编写一个名为IlasLinkDll.dll的C++语言DLL文件(编写这个DLL的源码也会在本章结尾附带),其内部的关键代码如下:
#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport)
#else
#define MYLIBDLL extern "C" _declspec(dllexport)
#endif
MYLIBDLL double GetNum( double Anum, double Bnum);
double Bnum)
{
return Anum + Bnum;
}
然后我们新建一个名为sllinkDLl的Silverlight应用程序项目,在sllinkDLl.Web项目中我们引用IlasLinkDll.dll文件,新建一个Wservice.asmx的web服务文件。在此文件中编写以下代码且添加using System.Runtime.InteropServices;的引用:
public string GetNumber( double A,255)">double B)
{
return GetNum(A,B).ToString() ;
}
/// <summary>
获取到DLL的值
</summary> <param name="Anumber"> 数字A </param> <param name="Bnumber"> 数字B <returns></returns>
[DllImport( " IlasLinkDll.dll " ,CharSet = CharSet.Ansi,EntryPoint = GetNum = false )]
static extern double Anumber,255)">double Bnumber);
最后在Silverlight程序中鼠标右键点击项目名--添加服务引用--添加http://localhost:4389/Wservice.asmx地址即可。在MainPage.xaml.cs文件中写入以下关键代码即可调用WebService中的GetNumber方法,通过DLL计算两个数字之间的和,返回显示出来。
{
InitializeComponent();
// 创建webService代理类的对象实例
WServiceSoapClient sclient = new WServiceSoapClient();
调用GetNumber方法,并传递两个参数
sclient.GetNumberAsync( 500 , 23 );
sclient.GetNumberCompleted += new EventHandler < GetNumberCompletedEventArgs > (sclient_GetNumberCompleted);
}
void sclient_GetNumberCompleted( object sender,GetNumberCompletedEventArgs e)
{
结果将为523
MessageBox.Show(e.Result);
}