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完整实例的更多相关文章

  1. C# 调用第三方DLL z

    http://blog.163.com/da7_1@126/blog/static/104072678201311721326318/ 以下代码为本人在实际项目中编写的调用第三方DLL接口程序的完整代 ...

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

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

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

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

  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. 易语言调用外部DLL详细实例教程

    一.准备工作 一.工具:易语言 二.准备一个DLL 1)打开易语言-新建一个Windows动态链接库 2)然后右键新建一个子程序或者用快捷键:Ctrl+N .然后写上代码.我这里写一个 2个字符串拼接 ...

  7. Android之ksoap2-android详解与调用天气预报Webservice完整实例

    Google为Android平台开发Web Service客户端提供了ksoap2-android项目,在这个网址下载开发包http://code.google.com/p/ksoap2-androi ...

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

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

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

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

随机推荐

  1. CodeForces Round #278 (Div.2) (待续)

    A 这么简单的题直接贴代码好了. #include <cstdio> #include <cmath> using namespace std; bool islucky(in ...

  2. sql server2005内存过高释放方法

    最近做了一个网站qq.115sou.com,在服务器中SQL Server占用内存非常高,加内存后,SQL Server又吃掉新加的内存,好像内存永远不够用一样,怎么办? 其实这并不一定是由于SQL ...

  3. CORS 跨域 实现思路及相关解决方案

    本篇包括以下内容: CORS 定义 CORS 对比 JSONP CORS,BROWSER支持情况 主要用途 Ajax请求跨域资源的异常 CORS 实现思路 安全说明 CORS 几种解决方案 自定义CO ...

  4. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  5. system函数的总结

    最近在看APUE第10章中关于system函数的POSIX.1的实现.关于POSIX.1要求system函数忽略SIGINT和SIGQUIT,并且阻塞信号SIGCHLD的论述,理解得不是很透彻,本文就 ...

  6. CSS常用十大技巧

    技巧1  去掉网页超链接的下划线 去掉网页超链接的下划线,在<head>与</head>之间相应的位置输入以下代码. <style type="text/css ...

  7. PHP 魔术方法总结

    1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的 __get( $property ) 当调用一个未定义的属性时访问此方法 __set( $property, $va ...

  8. Libsvm的MATLAB调用和交叉验证

    今天听了一个师兄的讲课,才发现我一直在科研上特别差劲,主要表现在以下几个方面,(现在提出也为了督促自己在以后的学习工作道路上能够避免这些问题) 1.做事情总是有头无尾,致使知识点不能一次搞透,每次在用 ...

  9. 通过实验分析system_call中断处理过程

    作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本实验目的:通过以一个简单的m ...

  10. C语言相关图书推荐

    C Primer Plus(第5版 中文版) 作      者 [美] 普拉塔(Prata S.) 著:云巅工作室 编 出 版 社 人民邮电出版社 出版时间 2005-02-01 版      次 1 ...