前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C#访问非托管DLL

C#访问非托管DLL

作者头像
用户1105954
发布于 2018-01-12 09:59:36
发布于 2018-01-12 09:59:36
1.5K00
代码可运行
举报
文章被收录于专栏:mini188mini188
运行总次数:0
代码可运行

前段时间写了一个读卡器程序,使用到了一个DLL。在.NET 中调用DLL还是相当简单的。我也是转别人的代码,自己的不写。下面就是代码:

C#中要使用动态链接库中的导出函数,只能在程序中根据DllAtribute显示调用,无法在运行阶段动态加载,但是我们可以利用WIN32 API的LoadLibrary和FreeLibrary打到目的,问题是根据GetProcAddress()函数获取到的导出函数的地址无法在C#中利用,网上很多方法多是利用对函数调用栈的操作来达到在C#中操作的目的.    其实如果导出函数没有返回值,完全可以利用另一个API函数达到动态绑定DLL库的目的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LRESULT CallWindowProc( WNDPROC lpPrevWndFunc,

    HWND hWnd,

    UINT Msg,

    WPARAM wParam,

    LPARAM lParam

);

如果导出函数无形参也无返回值的话,可以直接调用CallWindowProc(FunctionName,0,0,0,0),如果我们需要向导出函数传递简单参数的话,也可以自定义一个消息,用消息封装实参。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[DllImport("kernel32")]

public extern static int LoadLibrary(string lpLibFileName);

[DllImport("kernel32")]

public extern static bool FreeLibrary(int hLibModule);

[DllImport("kernel32", CharSet=CharSet.Ansi)]

public extern static int GetProcAddress(int hModule, string lpProcName);

[DllImport("user32", EntryPoint="CallWindowProc")] 

public static extern int CallWindowProc(int lpPrevWndFunc, int hwnd, int MSG, int wParam, int lParam);



private void button1_Click(object sender, System.EventArgs e)

{

int hmod=LoadLibrary("*****.dll");

int pFname=GetProcAddress(hmod, "*****");

CallWindowProc(pFname,0,0,0);

FreeLibrary(hmod);

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2007-08-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ansible 模块
bash无论在命令行上执行,还是bash脚本中,都需要调用cd、ls、copy、yum等命令;模块就是Ansible的“命令”,模块是ansible命令行和脚本中都需要调用的。常用的Ansible模块有yum、copy、template等。
Alone-林
2023/03/17
1.4K0
Ansible 常用模块详解
经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中必须掌握的重点,本章将介绍和使用 Ansible 中经常使用的一些模块,大体模块分为: 文件操作类,命令执行类,系统管理类,等使我们能对 Ansible 有一个全面的了解.
微软技术分享
2022/12/28
1.4K0
Ansible 自动化运维笔记(总结)
Ansible 是新出现的自动化运维工具,基于Python开发,集合了众多运维工具的优点.
微软技术分享
2022/12/28
2.2K0
云原生之 Ansible 篇(二)
ansible playbook 默认第一个 task 是 Gathering Facts 收集各主机的 facts 信息,以方便我们在 paybook 中直接引用 facts 里的信息。
看、未来
2022/05/06
1.5K0
云原生之 Ansible 篇(二)
Ansible自动化运维学习笔记1
基础概念 什么是ansible? 答:它是一个Linux系统上的”自动化运维工具”,类似一个”配置管理工具”;
全栈工程师修炼指南
2022/09/28
1.9K0
Ansible自动化运维学习笔记1
Ansible Ad-Hoc与常用模块
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
踏歌行
2020/10/15
1.7K0
Ansible Ad-Hoc与常用模块
[Ansible专栏]Ansible常用模块介绍和使用 (文末抽奖)
前面我们介绍了,ansible能作为自动化配置管理,其实是由ansible的多种多样的模块来实现的。截止目前,ansible的模块已经高达3000+之多。但是个人在日常工作中,比较常见的大约20多个。下面我就大概介绍一些常见常用的模块。
没有故事的陈师傅
2022/12/06
5370
Ansible自动化运维学习笔记1
基础概念 什么是ansible? 答:它是一个”配置管理工具”,它是一个Linux系统上的”自动化运维工具”;
全栈工程师修炼指南
2020/10/26
4.1K0
Ansible自动化运维学习笔记1
ansible常用模块简单介绍
本篇介绍下常用的模块。根据官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、源码控制模块、系统模块、单元模块、web设施模块、windows模块 ,具体可以参看官方页面。这里从官方分类的模块里选择最常用的一些模块进行介绍(commands模块上一篇已经介绍,这里不再提)。
小小科
2018/07/31
6100
Ansible常用模块详解
ansible内置了丰富的模块供用户使用,但是经常使用到的模块却不多。本文主要记录了ansible的一些常用模块以及详细参数 、注意事项等 ,供大家学习。
王先森sec
2023/04/24
1.5K0
ansible常用模块详解-包含重点:scripts 脚本模块-自动化运维
# ansible 模块语法 ansible-doc -l # 查看 ansible 模块 # wc -l 统计数量 ansible eisc -m command -a "df -h" # ansible 执行eisc组
eisc
2021/04/08
2.4K0
ansible生产常用十一大模块总结
注:-a参数后的命令用单引号,单引号,单引号;双引号有可能会出问题,特别是在user模块;
菲宇
2019/06/12
5860
ansible生产常用十一大模块总结
Ansible自动化运维的安装及常用模块详解
Ansible作为今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。Ansible通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个。更为重要的是,它操作简单,但提供的功能又非常丰富,在运维领域,几乎可以做任何事。 . Ansible自2012年发布以来,很快在全球流行,其特点如下:
小手冰凉
2019/10/17
1.7K0
ansible安装
以上是一位运维工程师要做的一些工作,当我们的主机数量非常少时,我们可以手动登陆机器,手动敲命令来完成工作,但是当我们的主机数量有几百台、上千台之后我们再去每一台去处理就显得不现实了,所以这时我们需要学习ansible或者saltstack等来完成我们日常的工作
dogfei
2020/07/31
6860
Ansible简介、安装、命令及常用模块
  ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。   ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远 程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
菲宇
2021/12/06
1K0
Ansible简介、安装、命令及常用模块
自动化运维—Ansible(上)
  ansible甚至都不用启动服务,仅仅只是一个工具,可以很轻松的实现分布式扩展
yaohong
2019/09/11
2.6K0
自动化运维—Ansible(上)
Ansible 以及 Ansible-playbook介绍
Anasible 是基于Python2-Paramiko 模块开发的自动化维护工具,实现了批量系统配置、部署、运行等功能。Ansible是基于模块工作的,本身不具备批量部署的功能,如果想要实现批量自动化部署,是Ansible自身的各种模块的集合。
jwangkun
2021/12/23
6.1K0
Ansible 以及 Ansible-playbook介绍
Ansible自动化运维配置与应用(结合实例)
注: command模块和shell模块的区别是:shell模块支持“管道符”及脚本。
阿dai学长
2019/04/03
2.7K0
Ansible自动化运维学习笔记2
前言:在ansible中使用变量,能让我们的工作变得更加灵活,在ansible中变量的使用方式有很多种
全栈工程师修炼指南
2020/10/26
3K0
Ansible自动化运维学习笔记2
玩转企业常见应用与服务系列(十四):自动化运维工具 Ansible 基础入门
目前,随着IT行业的高速发展,市场上出现了一大批自动化管理工具,这些工具可以使得我们通过一台设备管理控制成千上万台不同的设备,使得我们更方便、更快捷的进行运维管理。
民工哥
2023/11/29
8360
玩转企业常见应用与服务系列(十四):自动化运维工具 Ansible 基础入门
相关推荐
Ansible 模块
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文