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;
       }
   }
}

C# 调用第三方DLL z的更多相关文章

  1. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  2. C# 调用第三方DLL完整实例

    C# 调用第三方DLL完整实例 分类: C/C++ 以下代码为本人在实际项目中编写的调用第三方DLL接口程序的完整代码. public class ExecuteDLL : Form { ...//忽 ...

  3. C# 调用第三方DLL缓冲区溢出导致的异常

    这个倒是少见的错误,纪录一下大佬. 先上异常 错误一:尝试读取或写入受保护的内存 错误二:未将对象引用设置到对象的实例 错误三:  托管调试助手“FatalExecutionEngineError”( ...

  4. dotnetnuke 调用第三方dll出错 System.Security.Permissions.SecurityPermission,型的权限已失败。

    在dnn下调用第三方dll的微信sdk ,代码如下: WebClient wc = new WebClient();  wc.Encoding = encoding ?? Encoding.UTF8; ...

  5. SOE 中调用第三方dll

    一.简介 在利用soe实现server的扩展的时候,有些时候,需要调用第三方的dll库.官网中给出了明确的说明,soe中是可以添加第三方的dll文件,但是一直没有测试.按照官方的步骤应该是一个非常的简 ...

  6. Java调用C/C++编写的第三方dll动态链接库(zz)

    这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...

  7. 引用第三方dll引发的问题解决

    引用的程序集错误  如果引用第三方dll,调试出现引用的程序集出现错误,可以下载dependency,查看这个dll的依赖dll,如果本地电脑没有依赖dll或依赖dll出现问题,则下载或取代依赖dll ...

  8. C#的Process类调用第三方插件实现PDF文件转SWF文件

    在项目开发过程中,有时会需要用到调用第三方程序实现本系统的某一些功能,例如本文中需要使用到的swftools插件,那么如何在程序中使用这个插件,并且该插件是如何将PDF文件转化为SWF文件的呢?接下来 ...

  9. c# 调用c++DLL方法及注意事项

    引用命名空间 using System.Runtime.InteropServices 调用方法: 一.静态加载 用DllImprot方式来加载c++DLL.如下格式: //对应c++方法 //voi ...

随机推荐

  1. 【算法笔记】B1023 组个最小数

    1023 组个最小数 (20 分) 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 ...

  2. 最近闲着利用QQ协议写了一个聊天器

    最近闲着,把以前一个利用QQ协议写了的聊天器找出来玩,采用的是QQ比较稳定的协议,之前听说有人用WEB协议,或是安卓版QQ协议,都不太稳定.而我这个版的已经有好几年没动了.今天找出来依旧能登陆.获取好 ...

  3. AMD、CMD/AMD与CMD的区别

    http://blog.csdn.net/jackwen110200/article/details/52105493

  4. UESTC - 1147 求最短路方案数

    这道题很是说明了记忆化搜索的重要性 瞎bfs递推半天发现没卵用(也许是姿势不对,但我认为树形或图形dfs明显好写并且很好正确地递推) 参考了别人的写法,总感觉自己的实现能力太弱了 还有题目是1e9+9 ...

  5. [转] 如何在ie11里使用a连接创建动态下载文件流

    [From] https://segmentfault.com/q/1010000009470664 查了资料,可以使用微软独家的msSaveBlob, 这个方法支持ie10及以上. var down ...

  6. Python 时间格式转换

    Python time, datetime模块常用方法 1.使用time模块,获取当前时间戳~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~import timetime.time( ...

  7. Win10磁盘利用率高达100%设置修改方法

    Win10磁盘利用率高达100%设置修改方法 Windows Defender关闭 Win10的Windows Defender已经变身成为安全中心,它的运行机制改成了即便是电脑中存在多个杀毒.防护软 ...

  8. 安装Samba服务让宿主机和虚拟机共享文件

    安装 samba 服务器之后,很方便的实现 Windows 和 Linux 进行通信. 安装步骤: 1 .在 Ubuntu 系统下面安装 samba 服务: $ sudo apt-get instal ...

  9. Oracle RAC集群搭建(一)-ASM共享存储卷

    01, ASM共享存储卷 安装集群的话,必须要有共享磁盘,目的是为作裁决磁盘使用.还需要有数据文件的共享磁盘 02,规划 主机 裁决磁盘 数据 rac1        1G*1          20 ...

  10. unity摄像机移动滑动

    之前写了一个pc版本的 // 当按住鼠标左键的时候 //if (Input.GetMouseButton(0)) //{ // // 获取鼠标的x和y的值,乘以速度和Time.deltaTime是因为 ...