当前位置: 首页 > article >正文

C# 中 LibraryImport 和 DllImport有什么不同

libraryimportdllimport 是两个与动态链接库(DLL)相关的术语,它们在不同的编程语言和上下文中有不同的含义和用途。

在 C# 中,DllImportAttribute 是一个特性,用于指示一个方法声明是作为对非托管 DLL 中函数的 P/Invoke 调用。这意味着你可以在 C# 代码中直接调用在 DLL 中定义的函数。例如:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr MessageBox(IntPtr hWnd, String text, String caption, uint type);

LibraryImportAttribute 是 .NET 7 中引入的一个新特性,用于源生成器,它可以在编译时生成 P/Invoke 调用的封送代码,而不是在运行时生成。这样可以提高性能,并且适用于 AOT(Ahead-of-Time)编译场景。使用 LibraryImportAttribute 的方式如下:

[LibraryImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static partial bool MessageBoxW(IntPtr hWnd, string text, string caption, uint type);

在 C++ 中,__declspec(dllexport)__declspec(dllimport) 是用来控制类、函数或变量的导出和导入的关键字。当你创建一个 DLL 并希望其他程序能够使用你的 DLL 中的函数时,你会使用 __declspec(dllexport) 来标记这些函数。相反,当你的程序需要使用另一个 DLL 中的函数时,你会使用 __declspec(dllimport) 来导入这些函数。例如:

// DLL 导出
extern "C" __declspec(dllexport) int add(int a, int b) {
    return a + b;
}

// DLL 导入
extern "C" __declspec(dllimport) int add(int a, int b);

在 C++ 中,dllexportdllimport 也可以用于类,当一个类被声明为 dllexport 时,它的所有成员函数和静态数据成员都会被导出。而当一个类被声明为 dllimport 时,它的所有成员函数和静态数据成员都会被导入。需要注意的是,对于 dllimport 类,静态数据成员的定义不能在声明类的程序中指定 。

总的来说,libraryimportdllimport 是处理 DLL 导入和导出的不同机制,它们在不同的编程环境中有不同的实现和用法。


http://www.kler.cn/a/387888.html

相关文章:

  • 【VBA实战】用Excel制作排序算法动画续
  • wafw00f源码详细解析
  • 低代码集成多方API的简单实现
  • Java之泛型--对象指定多个泛型类型(有示例)
  • 彻底理解ARXML中的PDU
  • 基于Qt/C++全局键盘和鼠标事件监控工具
  • [C++11] Lambda 表达式
  • 1.1 Android 应用的基础知识
  • w030基于web的甘肃非物质文化网站的设计与开发
  • A15基于Spring Boot的宠物爱心组织管理系统的设计与实现
  • Go的数组,slice切片,map的使用
  • 微服务架构面试内容整理-服务注册与发现-Nacos
  • 【数据库系列】postgresql链接详解
  • 制作python的Dockerfile
  • 梧桐数据库之以识别优质的移动服务套餐为例讲解SQL实现分享
  • Shell扩展
  • vite+vue3项目兼容低版本浏览器
  • 定位,堆叠,CSS精灵,过渡,光标(前端)
  • 软考高级架构 - 8.2 - 系统架构评估 - 超详细讲解+精简总结
  • Linux系统编译boot后发现编译时间与Windows系统不一致的解决方案
  • nginx配置文件介绍及示例
  • 深度学习——多层感知机MLP(一、多层感知机介绍)
  • 设计模式-行为型-常用-2:职责链模式、状态模式、迭代器模式
  • 【安装配置教程】二、VMware安装并配置ubuntu22.04
  • jmeter常用配置元件介绍总结之取样器
  • CDH大数据平台部署