C# 调用第三方DLL完整实例
分类: C/C++
以下代码为本人在实际项目中编写的调用第三方DLL接口程序的完整代码。
public class ExecuteDLL : Form
{
...//忽略与调用DLL无关的代码
private IntPtr hModule = IntPtr.Zero;
/// <summary>
/// 调用HIS系统提供的DLL接口程序查看检查申请单
///DLL的名称:H62AppQueryToPacs.dll
///函数名说明:
///function THandle HLoginProc(THandlea AppHandle, THandle aCallWinHandle,THandle aPluginHandle
/// PChar aBqno,PChar aEmpno,PChar aPatno);
///传入变量参数说明:
///// aAppHandle: THandle; //应用程序句柄
///// aCallWinHandle: THandle; //调用窗口句柄
///// aPluginHandle: THandle; // 插件的句柄
///// aEmpno,PChar;//医生工号
///// aBqno: PChar;//病区代码
///// aPatno: PChar;//病人记账号
/// </summary>
/// <param name="lpFileName"></param>
/// <returns></returns>
//申明外部API
[DllImport("kernel32.dll")]
static extern IntPtr LoadLibrary(string lpFileName);
[DllImport("kernel32.dll")]
static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
[DllImport("kernel32", EntryPoint = "FreeLibrary", SetLastError = true)]
static extern bool FreeLibrary(IntPtr hModule);
//申明委托
private delegate IntPtr HLoginProc(IntPtr aAppHandle, IntPtr aCallWinHandle, IntPtr aPluginHandle,
string aBqno, string aEmpno, string aPatno);
//获取函数地址
private Delegate GetFunctionAddress(IntPtr dllModule, string functionName, Type t)
{
IntPtr address = GetProcAddress(dllModule, functionName);
if (address == IntPtr.Zero)
return null;
else
return Marshal.GetDelegateForFunctionPointer(address, t);
}
//按钮单击事件
private void button_CheckList_Click(object sender, EventArgs e)
{
try
{
SIS_Model.MWorkList smWorkList;
PACS_Model.MWorkList pmWorkList;
string strNo = "";
switch (GetConfig.DALAndModel)
{
case "SIS":
smWorkList = (SIS_Model.MWorkList)this.iWorkList;
strNo = (smWorkList.INPATIENTNO == null ? "" : smWorkList.INPATIENTNO.ToString());// 病人记账号 "875624";
break;
case "PACS":
pmWorkList = (PACS_Model.MWorkList)this.iWorkList;
strNo = (pmWorkList.INPATIENTNO == null ? "" : pmWorkList.INPATIENTNO.ToString());// 病人记账号 "875624";
break;
}
if (strNo.Trim() == "")
{
MessageBox.Show("无法获取患者ID,请确认操作步骤是否正确");
return;
}
//加载DLL
try
{
string strDLLPath = Environment.CurrentDirectory + "\\HuiTong\\JianChaShenQingDan\\H62AppQueryToPacs.dll";
hModule = LoadLibrary(strDLLPath);
if (hModule.Equals(IntPtr.Zero))
{
MessageBox.Show("导入DLL失败");
return;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
FreeLibrary(hModule);
hModule = IntPtr.Zero;
return;
}
//将要调用的方法转换为委托:hModule为DLL的句柄,"HLoginProc"为DLL中方法的名称
HLoginProc farProc = (HLoginProc)this.GetFunctionAddress(hModule, "HLoginProc", typeof(HLoginProc));
if (farProc == null)
{
FreeLibrary(hModule);
hModule = IntPtr.Zero;
return;
}
//利用委托执行DLL文件中的接口方法
farProc(hModule, IntPtr.Zero, IntPtr.Zero, null, null, strNo);
FreeLibrary(hModule);
hModule = IntPtr.Zero;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
FreeLibrary(hModule);
hModule = IntPtr.Zero;
return;
}
}
}
版权申明:
此文为作者原创,转载请提供原始文章链接,谢谢!
C# 调用第三方DLL完整实例的更多相关文章
- C# 调用第三方DLL z
http://blog.163.com/da7_1@126/blog/static/104072678201311721326318/ 以下代码为本人在实际项目中编写的调用第三方DLL接口程序的完整代 ...
- C# 调用第三方DLL缓冲区溢出导致的异常
这个倒是少见的错误,纪录一下大佬. 先上异常 错误一:尝试读取或写入受保护的内存 错误二:未将对象引用设置到对象的实例 错误三: 托管调试助手“FatalExecutionEngineError”( ...
- Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()
Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...
- dotnetnuke 调用第三方dll出错 System.Security.Permissions.SecurityPermission,型的权限已失败。
在dnn下调用第三方dll的微信sdk ,代码如下: WebClient wc = new WebClient(); wc.Encoding = encoding ?? Encoding.UTF8; ...
- SOE 中调用第三方dll
一.简介 在利用soe实现server的扩展的时候,有些时候,需要调用第三方的dll库.官网中给出了明确的说明,soe中是可以添加第三方的dll文件,但是一直没有测试.按照官方的步骤应该是一个非常的简 ...
- 易语言调用外部DLL详细实例教程
一.准备工作 一.工具:易语言 二.准备一个DLL 1)打开易语言-新建一个Windows动态链接库 2)然后右键新建一个子程序或者用快捷键:Ctrl+N .然后写上代码.我这里写一个 2个字符串拼接 ...
- Android之ksoap2-android详解与调用天气预报Webservice完整实例
Google为Android平台开发Web Service客户端提供了ksoap2-android项目,在这个网址下载开发包http://code.google.com/p/ksoap2-androi ...
- Java调用C/C++编写的第三方dll动态链接库(zz)
这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...
- 引用第三方dll引发的问题解决
引用的程序集错误 如果引用第三方dll,调试出现引用的程序集出现错误,可以下载dependency,查看这个dll的依赖dll,如果本地电脑没有依赖dll或依赖dll出现问题,则下载或取代依赖dll ...
随机推荐
- UVa 580 (递推) Critical Mass
题意: 有两种盒子分别装有铀(U)和铅(L),现在把n个盒子排成一列(两种盒子均足够多),而且要求至少有3个铀放在一起,问有多少种排放方法. 分析: n个盒子排成一列,共有2n中方案,设其中符合要求的 ...
- ASP.NET中POST提交数据并跳转页面
需求:先Post提交数据,然后跳转到目标页面 找了好久才发现这个神奇的类HttpHelper.原理很简单,利用html的from表单拼接,然后执行 使用方法: NameValueCollection ...
- Xcode中如何启用或禁用某些文件的ARC
经常会有工程中涉及到第三方的代码, 但这些代码有的是ARC的, 有的不是. 这样的话, 在与你的工程中集成的时候就会出现问题. 如果你的工程是开启ARC的, 那就需要对某些文件禁用ARC, (-fno ...
- Oracle 跟踪事件 set event
一.Oracle跟踪文件 Oracle跟踪文件分为三种类型,一种是后台报警日志文件,记录数据库在启动.关闭和运行期间后台进程的活动情况,如表空间创建.回滚段创建.某些alter命令.日志切换.错误消息 ...
- hdu 2845(dp基础题)
题意:容易理解. 分析:以后碰到这种类型的题,就要考虑把矩阵先按行来处理,再按列处理.先算出每行能够能够得到的最大值,然后按列处理即可. 代码实现: #include<stdio.h> # ...
- mybatis返回HashMap结果类型与映射
<!-- 返回HashMap结果 类型--> <!-- 如果想返回JavaBean,只需将resultType设置为JavaBean的别名或全限定名 --> <!-- T ...
- UI篇--Android中TableLayout中的布局
表格布局是按照行列来组织子视图的布局.表格布局包含一系列的Tablerow对象,用于定义行(也可以使用其它子对象).表格布局不为它的行.列和单元格显示表格线.每个行可以包含个以上(包括)的单元 ...
- C++中引用的本质是什么?
一般的教材上讲到引用时,都是说“引用是对象的一个别名”.我认为这种定义是不清晰的,不利于初学者理解引用.至少我自己曾经被这个定义困扰了一段时间.到底什么是“别名”? 实际上,引用的实质是位于xxxxx ...
- (转载) 数组a[]={3,5,2,4,1,8},要求从a中找出所有“和”等于10的子集
背包问题. 不过就这道题目本身而言,由于集合a中只要6个元素,而不是成千上万,所以可以使用更直观的办法: 只要你能通过程序给出数组a中元素所组成的集合的所有的子集合(幂集),那么只需在 ...
- Number Sequence(KMP,判断子串 模板)
题意: 给两数组,求一个是否是另一个的子数组,若是返回匹配的首位置 分析: KMP 入门 //扫描字符串A,并更新可以匹配到B的什么位置. #include <map> #include ...