当前位置: 首页 > 编程语言 > C#

为什么要使用DllImport属性作为附加参考?分享

时间:2023-04-10 12:31:22 C#

为什么使用DllImport属性作为添加引用?我见过几个这样的例子:[DllImport("user32.dll")]staticexternboolTranslateMessage([In]refMessagelpMsg);[DllImport("user32.dll")]staticexternIntPtrDispatchMessage([In]refMessagelpmsg);但是,我不明白的是为什么有人会这样做,因为他们只是像引用其他库一样引用DLL?MSDN声明:“DllImport属性在托管应用程序中重用现有非托管代码时很有用。例如,托管应用程序可能需要调用非托管WIN32API。”但是,这是否意味着引用非托管dll是不可行的,否则就不可能?“但是,这是否意味着引用了一个非托管dll或无法引用它?”对,就是这样。您所认为的“引用DLL”实际上是“引用.NET程序集”——恰当地,打包程序类型的最常见方法是在DLL中引用。DLLImport完全是关于导入“遗留DLL”——即使用原始WindowsDLL导出机制导出所有方法的DLL。将DLLImport想象成实际上被称为“UnmanagedImport”,事情可能会更清楚。某些库(例如user32.dll)是非托管代码。基本上这意味着它们没有允许.Net通过引用与它们对话所必需的元数据(还有更多内容需要深入了解,但希望这会给你足够的开始。)简而言之:定义:托管代码:代码仅在公共语言运行时(CLR)虚拟机(通常是.NETFramework(或Mono))的管理下运行。非托管代码:任何直接在操作系统上运行的编译二进制文件;使用VisualStudio.NET2002之前的任何版本编译的DLL。更多详细信息:托管、非托管、本机:这是什么类型的代码?.NET平台代码被编译成托管代码并使用程序集存储,这些程序集是.DLL文件,但并非所有.DLL文件都是包含托管代码的程序集。您只能使用“添加引用”样式的托管代码。其他语言和开发技术使用非托管代码生成.DLL文件,你实际上甚至可以与它们进行互操作(调用方法),但你需要DLLImport属性如果所有共享内容对你有用并且你需要了解更多C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: