http://blog.163.com/da7_1@126/blog/static/104072678201311721326318/
以下代码为本人在实际项目中编写的调用第三方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;
}
}
}
- Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()
Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...
- C# 调用第三方DLL完整实例
C# 调用第三方DLL完整实例 分类: C/C++ 以下代码为本人在实际项目中编写的调用第三方DLL接口程序的完整代码. public class ExecuteDLL : Form { ...//忽 ...
- C# 调用第三方DLL缓冲区溢出导致的异常
这个倒是少见的错误,纪录一下大佬. 先上异常 错误一:尝试读取或写入受保护的内存 错误二:未将对象引用设置到对象的实例 错误三: 托管调试助手“FatalExecutionEngineError”( ...
- 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文件,但是一直没有测试.按照官方的步骤应该是一个非常的简 ...
- Java调用C/C++编写的第三方dll动态链接库(zz)
这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...
- 引用第三方dll引发的问题解决
引用的程序集错误 如果引用第三方dll,调试出现引用的程序集出现错误,可以下载dependency,查看这个dll的依赖dll,如果本地电脑没有依赖dll或依赖dll出现问题,则下载或取代依赖dll ...
- C#的Process类调用第三方插件实现PDF文件转SWF文件
在项目开发过程中,有时会需要用到调用第三方程序实现本系统的某一些功能,例如本文中需要使用到的swftools插件,那么如何在程序中使用这个插件,并且该插件是如何将PDF文件转化为SWF文件的呢?接下来 ...
- c# 调用c++DLL方法及注意事项
引用命名空间 using System.Runtime.InteropServices 调用方法: 一.静态加载 用DllImprot方式来加载c++DLL.如下格式: //对应c++方法 //voi ...
随机推荐
- 动态规划 70.climbing Stairs
1. 记忆化搜索 - 自上向下的解决问题:使用vector来保存每次计算的结果,如果下次再碰到同样的需要计算的式子就不需要重复计算了. 2. 动态规划 - 自下向上的解决问题 解法一:自顶向下 解法二 ...
- python-global全局变量
在函数内部定义变量时,他们与函数外部具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的,这称为变量的作用域,示例如下: def func_local(x): print 'x is', ...
- bzoj2190 仪仗队
题目传送门 思路: 哪些点能被人看到,其实就是哪些点不会被其他点挡住,只要顶点的坐标互质就可以了,互质用欧拉函数算.特殊考虑一下n=1和0的情况. 欧拉函数,Φ(x)=x(1-1/p1)(1-1/p2 ...
- Codeforces - 600E 树上启发式合并
题意:求每一个子树存在最多颜色的颜色代号和(可重复) 本题是离线统计操作,因此可以直接合并重儿子已达到\(O(nlogn)\)的复杂度 PS.不知道什么是启发式合并的可以这样感受一下:进行树链剖分,分 ...
- an concreate example
Step 1: Creating Parts 1. Split the geometry 2. Create the INLET part. 3. Create the OUTLET part. 4. ...
- Java 安全套接字编程以及 keytool 使用最佳实践
Java 安全套接字编程以及 keytool 使用最佳实践 http://www.ibm.com/developerworks/cn/java/j-lo-socketkeytool/
- Oracle分组函数之CUBE魅力
Oracle的CUBE与ROLLUP功能很相似,也是在数据统计分析领域的一把好手. 关于ROLLUP的查询统计功能请参考文章<Oracle分组函数之ROLLUP魅力>(http://www ...
- drf之序列化器的使用
一.序列化器-Serializer 作用: 1. 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 2. 完成数据校验功能 3. 反序列化,把客户端发送过来的数据,经 ...
- ubuntu root用图形界面登录
http://blog.csdn.net/weimine/article/details/69055536 http://blog.csdn.net/gongxifacai_believe/artic ...
- 4.显式锁 Lock
4.1 概念 内置锁 vs 显示锁 synchronize是java语言层面实现的锁,称为内置锁.使用方便代码简洁,而且在jdk新版本优化后,性能也得到了很大的提高.synchronize是一个可重入 ...