Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】

简介:

在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 GetNum( double Anum, double Bnum)
{

return Anum + Bnum;
}
复制代码

        然后我们新建一个名为SLLinkDLl的Silverlight应用程序项目,在SLLinkDLl.Web项目中我们引用IlasLinkDll.dll文件,新建一个Wservice.asmx的web服务文件。在此文件中编写以下代码且添加using System.Runtime.InteropServices;的引用:

复制代码
 
 
[WebMethod]
public string GetNumber( double A, double B)
{
return GetNum(A, B).ToString() ;

}
/// <summary>
/// 获取到DLL的值
/// </summary>
/// <param name="Anumber"> 数字A </param>
/// <param name="Bnumber"> 数字B </param>
/// <returns></returns>
[DllImport( " IlasLinkDll.dll " , CharSet = CharSet.Ansi, EntryPoint = " GetNum " , ExactSpelling = false )]
public static extern double GetNum( double Anumber, double Bnumber);
复制代码

        最后在Silverlight程序中鼠标右键点击项目名--添加服务引用--添加http://localhost:4389/Wservice.asmx地址即可。在MainPage.xaml.cs文件中写入以下关键代码即可调用WebService中的GetNumber方法,通过DLL计算两个数字之间的和,返回显示出来。

复制代码
 
 
public MainPage()
{
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);
}
复制代码

        通过上面的代码我们传入500和23两个参数。然后得到结果为523的弹出窗口。下面我们看一下加载DLL的DllImport特性的参数使用方法:

复制代码
 
 
[DllImport( " IlasLinkDll.dll " , CharSet = CharSet.Ansi, EntryPoint = " GetNum " , ExactSpelling = false )]

a、CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值 CallingConvention.Winapi。
b、CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。
c、EntryPoint 参数给出 dll 中入口点的名称。如果未指定 EntryPoint,则使用方法本身的名称。
d、ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定 ExactSpelling,则使用默认值
false
e、PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有 HRESULT 返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值
true
f、SetLastError 参数指示方法是否保留 Win32
" 上一错误 " 。如果未指定 SetLastError,则使用默认值 false
复制代码

        Tip:笔者在某一个项目中遇到无论指明什么EntryPoint入口点和CharSet字符集都无法加载一个第三方DLL文件时,就直接自己使用C++编写了一个DLL文件来加载这个C#中无法识别加载的第三方DLL,然后在C#中调用自己编写的DLL文件解决了问题。

        本实例源码由VS2010+Silverlight4.0编写,点击 SLLinkDLl.rar 下载本实例源码。点击 IlasLinkDll.rar 下载DLL文件源码。



    本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/03/09/1978288.html,如需转载请自行联系原作者


相关文章
|
3月前
|
程序员 编译器 C语言
最新Dev-C++下载安装以及C语言环境搭建教程(含C语言入门教程)
最新Dev-C++下载安装以及C语言环境搭建教程(含C语言入门教程)
210 0
|
5月前
|
C++
C/C++ DLL 简单实现
C/C++ DLL 简单实现
44 0
|
5月前
|
存储 应用服务中间件 API
高效C++项目实战:秋招简历项目解析(提供源码下载)
高效C++项目实战:秋招简历项目解析(提供源码下载)
|
5月前
|
C++ iOS开发
02 C++ - 开发环境下载与安装(CLion)
02 C++ - 开发环境下载与安装(CLion)
99 0
|
2月前
|
C++ 计算机视觉 Python
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
38 0
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
|
2月前
|
存储 测试技术 C++
C++基于多态的职工管理系统(附代码下载)
C++基于多态的职工管理系统(附代码下载)
|
3月前
|
缓存
C++11实用技术(五)泛型编程加载dll接口函数
C++11实用技术(五)泛型编程加载dll接口函数
28 0
|
4月前
|
算法 搜索推荐 C++
C++ STL容器和算法:详解和实例演示
C++ STL(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序。本文将介绍STL中的一些常用容器和算法。
113 0
|
4月前
|
存储 API 分布式数据库
C/C++ 通过HTTP实现文件上传下载
WinInet(Windows Internet)是 Microsoft Windows 操作系统中的一个 API 集,用于提供对 Internet 相关功能的支持。它包括了一系列的函数,使得 Windows 应用程序能够进行网络通信、处理 HTTP 请求、FTP 操作等。WinInet 提供了一套完整的网络通信工具,使得开发者能够轻松地构建支持网络功能的应用程序,涵盖了从简单的 HTTP 请求到复杂的文件传输等多种网络操作。
90 1
C/C++ 通过HTTP实现文件上传下载
|
4月前
|
API 分布式数据库 数据安全/隐私保护
C/C++ 实现FTP文件上传下载
FTP(文件传输协议)是一种用于在网络上传输文件的标准协议。它属于因特网标准化的协议族之一,为文件的上传、下载和文件管理提供了一种标准化的方法,在Windows系统中操作FTP上传下载可以使用WinINet库,WinINet(Windows Internet)库是 Windows 操作系统中的一个网络 API 库,用于访问 Internet 上的资源。它提供了一组函数,使开发人员能够创建网络应用程序,例如通过 HTTP 协议下载文件,发送 HTTP 请求,处理 cookie 等,本章将通过使用WinInet所提供的接口实现FTP文件上传下载功能,使得用户可以通过代码的方式上传或下载文件与FTP
79 1
C/C++ 实现FTP文件上传下载

热门文章

最新文章