第一种:静态调用

使用using System.Runtime.InteropServices命名空间下的DllImport标签指定非托管的Dll及其细节

方法必须是静态的即必须加上static关键字,还有extern关键字

  [DllImport("kernel32.dll", EntryPoint = "GetSystemDefaultLCID")]static extern ushort GetSystemDefaultLCID();//OS 当前选择的默认语言(区域-管理)[DllImport("kernel32.dll", EntryPoint = "GetSystemDefaultLangID")]static extern ushort GetSystemDefaultLangID();//OS 当前选择的默认语言(区域-管理)

调用时与普通的静态方法一致;

第二种:动态加载

动态加载时需要使用的一些非托管代码

        //装载动态库[DllImport("kernel32.dll")]static extern IntPtr LoadLibrary(string lpFileName);//获取要引入的函数[DllImport("kernel32.dll")]static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);//释放动态链接库[DllImport("kernel32.dll", EntryPoint = "FreeLibrary", SetLastError = true)]static extern bool FreeLibrary(IntPtr hModule);

首先定义相应的代理对应的非托管代码(dll)中的相关方法(我们需要的方法)

    public delegate int dicCreateHDICT(int dwWordLangID, string lpcszIdxFileName, string lpcszDatFileName);public delegate bool dicFreeHDICT(int hdict);

再动态加载非托管代码

  public class DLLHandler{[DllImport("kernel32.dll")]static extern IntPtr LoadLibrary(string lpFileName);//获取要引入的函数[DllImport("kernel32.dll")]static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);//释放动态链接库[DllImport("kernel32.dll", EntryPoint = "FreeLibrary", SetLastError = true)]static extern bool FreeLibrary(IntPtr hModule);//DrDicEnt.dllpublic static dicCreateHDICT dictCreateDICT = null;public static dicFreeHDICT dictFreeDict = null;public static void Init(){IntPtr hLib=LoadLibrary(@"D:\Dll\DrDicEnt.dll");IntPtr api = GetProcAddress(hLib,"dicCreateHDICT");dictCreateDICT = (dicCreateHDICT)Marshal.GetDelegateForFunctionPointer(api,typeof(dicCreateHDICT));IntPtr api2 = GetProcAddress(hLib,"dicFreeHDICT");dicFreeHDICT= (dicFreeHDICT)Marshal.GetDelegateForFunctionPointer(api2,typeof(dicFreeHDICT));

}

调用时先DLLHandler.Init();
再使用DLLHandler.dicCreateHDICT()等方法

转载于:https://www.cnblogs.com/wxj111/archive/2013/05/14/3077943.html

C#调用非托管代码(C++方法)的2种方式相关推荐

  1. Java调用.NET webservice方法的几种方式

    最近做项目,涉及到web-service调用,现学了一个星期,现简单的做一个小结.下面实现的是对传喜物流系统(http://vip.cxcod.com/PodApi/GetPodStr.asmx?ws ...

  2. Vue组件之间传值/调用方法的几种方式

    组件之间传值/调用方法的几种方式 (一)父组件向子组件传值==props 1.在父组件中使用子组件的地方绑定数据 <children :message="message"&g ...

  3. Py之qrcode:调用python的qrcode库两种方式生成二维码、带logo的二维码

    Py之qrcode:调用python的qrcode库两种方式生成二维码.带logo的二维码 目录 python编程实现生成二维码 1.第一种方式-纯文本 2.第二种方式-带logo

  4. python rest api_Python调用REST API接口的几种方式汇总

    相信做过自动化运维的同学都用过REST API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍python中调用REST AP ...

  5. Java中调用方法的几种方式

    一般的,在Java语言中,调用方法有三种方式. 第一种:通过对象名.方法名进行调用,这是最普通的也是最常见的一种调用方式. 第二种:通过new关键字调用构造方法,这种是在实例化对象时使用的方式. 第三 ...

  6. 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...

    2019独角兽企业重金招聘Python工程师标准>>> 一.基本用法 在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要 ...

  7. java native函数库_Java 层调用 Native 层函数的两种方式

    概述 Java 层如何调用Native层函数,大家都应该知道使用JNI(Java 本地接口). 通过在java层声明native方法,然后遵守JNI规范命名Native函数,即可建立Java层nati ...

  8. JS 定义方法的三种方式

    JS函数的定义与调用方法 JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式: 先定义一个对象,然后在对象的属性中定义方法,通过myob ...

  9. Java项目启动时执行指定方法的几种方式

    版权声明:本文为博主原创文章,未经博主允许不得转载.博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/8175 ...

  10. jquery读取json文件跨域_跨域方法的若干种方式

    一.跨域的解释 那什么是跨域呢,简单地理解就是因为JavaScript同源策略的限制, a.com 域名下的js无法操作 b.com 或是 c.a.com 域名下的对象.当协议.子域名.主域名.端口号 ...

最新文章

  1. mysql nextval同步锁_mysql中实现类似oracle中的nextval函数
  2. 获取某个时间开始 之后的 N次[周几,周几]
  3. 【转】 Android 屏幕切换总结
  4. 项目:NMEA2000的数据格式解析
  5. bootstrap table 分页只显示分页不显示总页数等数据
  6. 怎么把matlab 训练的model 保存下来 然后在opencv 中调用
  7. div显示图片_图片按照百分比显示部分,不变形
  8. wordpress 表格文字对齐_不要再用空格来对齐Word文字了,这样做,3秒对齐所有Word文字...
  9. 【对讲机的那点事】安装中继台天馈系统如何制作同轴电缆BNC接头?
  10. always on sql 收缩日志_啥?我写的一条SQL让公司网站瘫痪了...
  11. 论文阅读 视频生成(vid2vid) || Few-shot Video-to-Video Synthesis
  12. 伪随机数的产生和流密码
  13. 电脑浏览器主页面被恶意劫持无法修改的解决方法
  14. 联邦学习纵向逻辑回归公式推导
  15. Flutter 左右菜单联动
  16. 常见中文字体英文名称以及windows默认字体类型
  17. Vulnhub-Earth
  18. 如何理解GPU中的SIMT(单指令流多线程模型)
  19. 实现同网段不同vlan通信有几种方式?纯二层网络下又是如何实现的?
  20. dz论坛php5,S!淘专辑 3.0.1 For php5.2 php5.3版 dz插件分享,淘专辑是用户将喜欢的论坛帖子...

热门文章

  1. 设计模式---抽象工厂模式(C++实现)
  2. 【Python实例第33讲】单变量特征选择
  3. 统计学习(一):数据的组织和表示
  4. 【浙江大学PAT真题练习乙级】1007 素数对猜想 (20分) 真题解析
  5. 【转载】Sqlserver使用Convert函数进行数据类型转换
  6. oracle存储过程(带参数的存储过程)
  7. python学习day35 并发编程 操作系统 进程概念
  8. ajax同步时,loading加载不显示(谷歌浏览器)
  9. 自家公司关于git commit 的规范
  10. 【HTML5】页面传递参数给下一个页面