c#基础知识4:dll相关

2023-11-06

dll,动态链接库。

这里区分两个概念,

一个是传统的动态链接库,也是我们所熟知的,如system32下的kerneral.dll,user32.dll,这种dll由c或者c++写的dll编译出来已经是机器码的二进制文件,里面提供一些封装好的函数接口等。这种dll基本上各种语言都能调用。

而c#里又引入了一种dll,这种dll就是一个类库,可以在vs中创建

这种dll虽然编译出来也是二进制的,不过是c#的中间码格式,不同于传统的dll。只能供c#使用,仅仅是一个类库。


c#里调用第二种dll不用说了,非常简单,拷过来代码里就能引入。

这里主要讲c#如何调用第一种传统的dll,譬如windows的api。


声明一个extern函数来托管外部dll中的一个函数。如想要调用win32的msgbox

/*
 * Author: Shu
 * E_mail: shushenghong@gmail.com
 * Time: 10/24/2012 10:19:48 AM
 */
using System;
using System.Runtime.InteropServices;

/// <summary>
/// win32的alert
/// </summary>
public class Alert
{
    [DllImport("user32.dll", EntryPoint = "MessageBox", CharSet = CharSet.Unicode)]
    private static extern int DllMsgBox(int hwnd, string content, string title, uint type);

    /// <summary>
    /// win32的消息框
    /// </summary>
    public static void MsgBox(string content, string title)
    {
        DllMsgBox(0, content, title, 64);
    }
}

具体dllImport有哪些属性,可以参看msdn。

http://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.dllimportattribute.aspx

声明的函数必须与dll中的函数形参一致,具体的类型对应,可以参考

http://msdn.microsoft.com/zh-cn/library/aa720411(en-us,VS.71).aspx



参考资料:

1、http://developer.51cto.com/art/200908/146253.htm

2、http://www.cnblogs.com/cltsq/articles/1946395.html

3、http://www.cnblogs.com/dayouluo/archive/2005/09/03/229583.html

4、http://webservices.ctocio.com.cn/226/11544726.shtml

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c#基础知识4:dll相关 的相关文章

随机推荐

  • UNITY普通3D项目转换成URP项目

    注意 要确认 UniversalRP 对应的版本支持 目前此插件在2019和2020 2版本上已经得到认证 转换的前提 1 查看素材或询问素材支持的Unity版本 2 查看或询问素材是否支持 UniversalRP 插件 3 查看或询问素材
  • 睿智的目标检测48——Tensorflow2 搭建自己的Centernet目标检测平台

    睿智的目标检测48 Tensorflow2 搭建自己的Centernet目标检测平台 学习前言 什么是Centernet目标检测算法 源码下载 Centernet实现思路 一 预测部分 1 主干网络介绍 2 利用初步特征获得高分辨率特征图
  • IDEA启动Tomcat时报java.lang.IllegalStateException: Error starting child

    今天刚刚开始学习使用idea时 在网上查了资料后 写了一个简单的Servlet做测试 结果出现 2019 01 13 01 30 39 745 Artifact testidea war exploded Artifact is being
  • web服务器型号价格,web服务器的价格

    web服务器的价格 内容精选 换一换 华为云将可用的计算资源 按照一定折扣进行售卖 其价格随市场供需关系实时变化 这种打折销售 价格实时变化的计费模式称为 竞价计费 在该计费模式下 您可以以折扣价购买并使用弹性云服务器 性能与常规云服务器无
  • 什么是高防CDN?

    高防CDN是为了更好的服务网络而出现的 是通过高防DNS来实现的 高防CDN是通过智能化的系统判断来路 再反馈给用户 可以减轻用户使用过程的复杂程度 通过智能DNS解析 能让网站访问者连接到响应的服务器上 以避免某个服务器因访问者过多而瘫痪
  • 多任务学习综述:推荐系统多任务学习(multitask)的实战总结和常见问题(一)

    多任务学习算法系列的主要内容是回顾和总结自己2019 2021间在深度学习多任务学习算法 multitask 的工业实践和遇到的常见问题 欢迎更多同学讨论和指正 同时也宣传一波我们组在推荐方向的工作成果 大规模推荐算法库PaddleRec
  • C语言操作字符练习题---跟着鹏哥学C语言第二天打卡

    选A 这里的字符串 hello bit hello bit 0 此处是有空格 在字符串里每个符号包空格都是由阿斯科码值组成 所以每个字符都会各自存储一个字节的空间 包括后面隐藏的 0 字符串内都会有 strlen计算包括空格 所以sizeo
  • Webgl开发输入框兼容问题及开发注意的问题

    Webgl开发输入框 InputField组件 输入中文 说明 解决方案一通过重写原生的InputField组件来兼容 解决方案二通过打包后自己定义JS 总结 说明 最近一直再搞WEBGL平台的项目 花了好几天解决InputField组件输
  • WPF PasswordBox 绑定

    对于PasswordBox 可能很多人都会按着TextBox的路子 在ViewModel里面写一个属性 然后绑定到Password属性上 当你写完这一切的时候 你会突然收到Visual Studio的提示 Password并不是依赖属性 不
  • java面对对象(中.2)(多态性,终极父类,instanceof,包装类等)

    今天来讲java中的多态性 多态性我个人认为它是最重要 同时也是最难理解的 不过不用担心 下面就带你了解java中的多态性 多态性 是面向对象中最重要的概念 在Java中的体现 对象的多态性 父类的引用指向子类的对象 可以直接应用在抽象类和
  • 爬虫学习笔记

    基于CefSharp开发浏览器 一 项目搭建 CefSharp中文帮助文档 public partial class Form1 Form 如何解释 public 表示类的访问级别 公开 partial 表示部分类 就是说这些代码只是类的一
  • Prometheus连接多个指标

    Prometheus连接多个指标与聚合 初识PromSQL 一 Prometheus二进制操作符 一对一匹配One to one 一对多和多对一匹配 初识PromSQL PromSQL看起来简短整洁 通俗易懂 乍一看很简单 但是当真正使用它
  • Python读取xls文件报错:raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not supported‘)

    Python读取xls文件报错 raise XLRDError FILE FORMAT DESCRIPTIONS file format not supported 只需要下载pyexcel xls pip install pyexcel
  • 网络粘包,拆包处理

    数据由一台设备通过网络发送给另一台设备普遍存在着网络上的 拆包与粘包问题 如图 有四个数据包 相同颜色表示一条完整的数据 对于 红色数据 它被拆分成了数据包一和数据包二 并与黑色和粉色数据同在一个数据包二中 这两个数据包就发生了粘包和拆包的
  • 数据分析与挖掘概述

    数据分析与挖掘概述 1 什么是数据分析和挖掘 数据分析和挖掘都是基于搜集来的数据 应用数学 统计 计算机等技术抽取出数据中的有用信息 进而为决策提供依据和指导方向 应用漏斗分析法挖掘出用户体验过程中的不足之处 从而进一步改善产品的用户流程
  • MySQL基本用法

    一 数据库的基本操作 1 启动数据库 net start mysql 2 进入数据库 mysql h localhost u root p 3 关闭数据库服务 net stop mysql 4 查看数据库 show databases 5
  • 【微信小程序】为模块设置背景颜色

    微信小程序中不支持直接使用本地图片的形式添加背景图片 1 转换为base64格式类型 2 使用云服务器中的图片 https unicloud dcloud net cn pages login login uniIdRedirectUrl
  • python基于神经机器翻译技术的翻译网站实现

    摘要 机器翻译一直是人工智能领域里的一个重要研究对象 本文应用神经机器翻译技术 实现了从数据预处理到模型训练与模型部署的全流程 并实现了一个可以跨平台访问的翻译网站供需要的人使用 在训练神经机器翻译模型时 首先对原始语料数据集进行清洗 去除
  • 攻防世界PHP2详细解答

    攻防世界PHP2 一 1 进入环境 看到一句话 Can you anthenticate to this website 意思为 你能认证到这个网站吗 2 burpsuite 用burpsuite抓包后也没有什么重要的信息o 一 一 o 我
  • c#基础知识4:dll相关

    dll 动态链接库 这里区分两个概念 一个是传统的动态链接库 也是我们所熟知的 如system32下的kerneral dll user32 dll 这种dll由c或者c 写的dll编译出来已经是机器码的二进制文件 里面提供一些封装好的函数