C#调用外部API(托管和非托管DLL)

DLL程序的两种类型

  • 托管对象(有垃圾回收机制,内存安全)
  • 非托管对象(无垃圾回收机制,需手动回收)

托管对象与非托管对象具体区别参考:【C#】中托管与非托管对象区别、托管与非托管DLL区别_c# dllimport 托管dll-CSDN博客

生成和调用托管对象

1、创建c#类库

2、编写公共类和方法

3、生成dll(工程右键生成)

4、在项目中引用类

5、在主程序中引用命名空间

6、调用托管类方法

调用非托管对象

在不引用dll情况下,调用对象方法

Assembly assembly2 = Assembly.LoadFrom("TestDemo.dll");     //加载的dll
Type type = assembly2.GetType("TestDemo.TestHelper");       //获取类型
object client = Activator.CreateInstance(type);             //创建类实例
MethodInfo method = type.GetMethod("Sum");                  //获取类中方法
List<object> paramList = new List<object>();                //根据顺序添加方法入参
paramList.Add(4);
paramList.Add(8);
object result = method.Invoke(client, paramList.ToArray()); //调用方法
//object result = method.Invoke(null,paramList.ToArray()); //调用静态类方法

通过反射获取外部程序窗体(内嵌窗体)

Assembly assembly = null;
assembly = Assembly.LoadFile(Application.StartupPath + "\\TestDemo.dll");
Type[] types = assembly.GetTypes();
foreach (Type t in types)//遍历Types数组
{
    if (t.BaseType == typeof(Form))//遍历Types数组中如果为Form时加到窗口中
    {
        Form frm = (Form)Activator.CreateInstance(t);
        //frm.Show();
        frm.MdiParent = this;
        frm.Activate();
        frm.StartPosition = FormStartPosition.Manual;
        frm.Dock = DockStyle.Fill;
        frm.Show();
    }
}

调用WindowAPI

/// <summary>
/// Dllimport导入dll
/// EntryPoint函数入口
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "MessageBoxA")]
static extern int MsgBox(int hWnd, string msg, string caption, int type);

void main()
{
    MsgBox(0, "使用DllImport导入MsgBox", "调用WIndowsAPI", 0);
}

项目实例

包含上述实例,WindowsAPI调用,托管和非托管代码调用

实例链接:https://download.csdn.net/download/lvxingzhe3/89420258

参考:

https://www.cnblogs.com/skynight/p/17603279.html

C# Windows API介绍与调用-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/699081.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

综合型驱鸟装置:光伏电站集束冲击波驱鸟器

光伏电站作为绿色、清洁的能源生产方式&#xff0c;正在全球范围内得到快速发展。在光伏电站的建设和运营过程中&#xff0c;鸟类活动所带来的影响逐渐凸显&#xff0c;成为电站管理者需要面对的重要问题。在此背景下&#xff0c;光伏电站驱鸟器的需求也不断增长。 目前市场上的…

Windows 系统下 JDK 1.8 与 17 版本的相互切换

目录 一、当前本机已安装的 JDK 版本&#xff1a;1.8 二、下载 JDK 17 三、修改系统配置&#xff0c;将 JDK 版本切换为 17 1、新建 JAVA17_HOME 2、编辑 Path 3、验证是否切换成功 4、之后想再切换成 JDK 1.8 一、当前本机已安装的 JDK 版本&#xff1a;1.8 二、下载 J…

离散数学答疑 6

只要这样&#xff0c;就是函数。 知识点&#xff1a;满射是什么&#xff1f; 集合A中的每一个元素都映射到了B。 也就是说&#xff0c;A中的每个元素都要被提及&#xff0c;并且以二夫一妻或者一夫一妻的方式提及 其次&#xff0c;B中的每个元素都要被提及 知识点&#xff1a…

数字孪生技术推动希腊水务系统的技术进步

OpenFlows 提供的数字孪生技术将科扎尼供水渗漏的响应时间缩短了 50% 引领希腊供水管理改革 新冠疫情之后&#xff0c;希腊制定国家经济复苏计划&#xff0c;旨在推动能源改革、数字化和现代化&#xff0c;作为计划的一部分&#xff0c;希腊正试图实现可持续的给排水管理&…

Flow Launcher:Windows高效启动与搜索工具

目录 一、软件简介 二、软件安装 三、软件功能介绍 3.1 快速启动应用 3.2 文件快速搜索 3.3 多功能操作中心 3.4 支持插件扩展 一、软件简介 Flow Launcher 是基于C#编程语言开发一款专为Windows设计的高效启动与搜索工具&#xff0c;它以创新简洁的界面重新定义了用户…

五年跨境电商实战干货经验:爆品测出来的!

爆品确实是测出来的&#xff0c;不是单纯选出来的。我在亚马逊摸爬滚打了五年&#xff0c;深深感受到了“七分选品&#xff0c;三分运营”的重要性。不管你的产品图片、描述多么精美&#xff0c;如果不去精选和测试&#xff0c;很难保证能出单。我见过很多跨境新手在选品上卡了…

Windows 锁屏小组件怎么添加及删除?

去掉或添加锁屏小组件的方法 如果想要将 Windows 11 的锁屏小组件给关闭其实非常简单&#xff0c;下面是具体的操作步骤&#xff1a; 首先我们需要进入 Windows 设置界面&#xff0c;然后找到左侧选项中的“个性化”选项。 然后往下滑动找到“锁定屏幕”选项&#xff0c;点击…

SAP乘云而上

上周四参加了SAP原厂组织的“SAP乘云而上私享会”&#xff0c;由德勤赞助。活动主要的内容是介绍了RISE with SAP的上云服务包并且参观了SAP Labs。 现阶段对于大中型企业客户&#xff0c;SAP力推的是S/4HANA PCE(Private Cloud Edition)私有云版本&#xff0c;这个版本我在之…

抄表平台是什么?

1.抄表平台简述 抄表平台是一种现代化管理系统软件&#xff0c;主要运用于自动化技术搜集、解决与分析各种计量仪表的信息&#xff0c;如智能水表、电度表、天然气表等。它结合了物联网、大数据应用和云计算&#xff0c;大大提高了抄表高效率&#xff0c;减少了人力成本&#…

一分钟使用Java实现socket消息传递

一、目的 本程序旨在模拟航空器与塔台之间的实时消息传递&#xff0c;展示其在实际航空通讯中的应用。通过使用 Java 的 JFrame 进行图形用户界面&#xff08;GUI&#xff09;的设计&#xff0c;以及 socket 编程实现网络通信&#xff0c;该程序能够提供一个直观的界面来显示航…

1、链接(link)

链接的作用 链接&#xff1a;将各种代码和数据片段收集组成一个单一文件的过程&#xff0c;这个文件可以加载&#xff08;复制&#xff09;到内存并执行。 分为&#xff1a;编译时、加载时&#xff08;加载器加载到内存并执行时&#xff09;、运行时 1、构造大型程序 2、避免…

Python魔法之旅-魔法方法(22)

目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检…

【数学】927. 三等分

本文涉及知识点 数学 LeetCode927. 三等分 给定一个由 0 和 1 组成的数组 arr &#xff0c;将数组分成 3 个非空的部分 &#xff0c;使得所有这些部分表示相同的二进制值。 如果可以做到&#xff0c;请返回任何 [i, j]&#xff0c;其中 i1 < j&#xff0c;这样一来&#…

消费增值模式引领业绩飙升与用户活跃

大家好&#xff0c;我是吴军&#xff0c;致力于为您揭示私域电商领域的独特魅力与机遇。 今日&#xff0c;我很高兴与大家分享一个激动人心的成功案例。我们的客户在短短一个月的时间里&#xff0c;业绩就飙升至上百万级别&#xff0c;其用户活跃度更是居高不下&#xff0c;日…

如何进行考试成绩分析

一、为什么要对考试成绩进行分析&#xff1f; 考试成绩进行分析是一项重要的工作&#xff0c;可以为学生、教师和学校提供有效的学习评价和支持&#xff0c;同时也可以为教学改进和提高教学质量提供有力的支持和指导。对考试成绩进行分析有以下几个原因&#xff1a; 1.了解学生…

Keil一键添加.c文件和头文件路径脚本--可遍历添加整个文件夹

最近想移植个LVGL玩玩&#xff0c;发现文件实在是太多了&#xff0c;加的手疼都没搞完&#xff0c;实在不想搞了就去找脚本和工具&#xff0c;基本没找到一个。。。。。。 主要是自己也懒得去研究写脚本&#xff0c;偶然搜到了一个博主写的脚本&#xff0c;原博客地址:https:/…

【鸿蒙开发教程】HarmonyOS 模块关系梳理

HarmonyOS 梳理模块关系 刚开始开发的时候总是理不清鸿蒙中的模块类型和关系&#xff0c;今天就来梳理下鸿蒙中的模块类型 Module类型 Module按照使用场景可以分为两种类型&#xff1a; ●Ability类型的Module&#xff1a; 用于实现应用的功能和特性。每一个Ability类型的M…

西南交通大学【操作系统实验2】

实验目的 本实验要求学生了解什么是信号&#xff0c;掌握软中断的基本原理&#xff1b;掌握中断信号的使用、进程的创建以及系统计时器的使用。通过对本实验的学习&#xff0c;学生能够学会进程的创建方法&#xff0c;更能加深对Linux中的信号机制的认识&#xff0c;并会使用软…

《银行存量客户运营》导读

前言&#xff1a;在中国生活&#xff0c;没有一个人能够离得开银行&#xff0c;但是又有多少人真正了解银行呢&#xff1f; 通过本书你可以学习到&#xff1a;银行不为外人了解的内部运营机制&#xff0c;甚至可以提前把握银行涨息降息政策规律 银行运营的基础逻辑 “运营”二…

泉城济南的隐秘珍宝与山东旅游必去十大景点

泉城济南的隐秘珍宝与山东旅游必去十大景点 济南&#xff0c;这座历史悠久的城市&#xff0c;不仅以其丰富的人文底蕴著称&#xff0c;还拥有诸多引人入胜的自然景观。在这片华夏神州广阔的齐鲁大地上&#xff0c;济南特别以其“三无风景区”——无影山、无影潭、无影泉——而闻…