DllImport("User32.dll")

问题描述

大侠们!调用这个函数的作用是?该怎么调用?.NET里面经常调用的外部系统函数还有哪些?举例说明吧

解决方案

解决方案二:
DllImport属性的常见用法。第一节讨论使用DllImport从托管应用程序调用本机代码的优点。第二节集中讨论封送处理和DllImport属性的各个方面。从托管应用程序调用非托管代码当在托管应用程序中重用现有的非托管代码时,DllImport属性非常有用。例如,托管应用程序可能需要调用非托管WIN32API。下面的代码示例说明此通用方案,此示例将调用MessageBox(位于User32.lib中):#using<mscorlib.dll>usingnamespaceSystem::Runtime::InteropServices;//forDllImportAttributenamespaceSysWin32{[DllImport("user32.dll",EntryPoint="MessageBox",CharSet=Unicode)]intMessageBox(void*hWnd,wchar_t*lpText,wchar_t*lpCaption,unsignedintuType);}intmain(){SysWin32::MessageBox(0,L"Helloworld!",L"Greetings",0);}主要注意包含DllImport的代码行。此代码行根据参数值通知编译器,使之声明位于User32.dll中的函数并将签名中出现的所有字符串(如参数或返回值)视为Unicode字符串。如果缺少EntryPoint参数,则默认值为函数名。另外,由于CharSet参数指定Unicode,因此公共语言运行库将首先查找称为MessageBoxW(有W是因为Unicode规范)的函数。如果运行库未找到此函数,它将根据调用约定查找MessageBox以及相应的修饰名。受支持的调用约定只有__cdecl和__stdcall。当调用用户定义的DLL中所包含的函数时,有必要将extern"C"添加在DLL函数声明之前,如下所示://ThefunctiondeclarationinSampleDLL.hfileextern"C"SAMPLEDLL_APIintfnSampleDLL(void);有关受支持的其他参数值的更多信息,请参见DllImport。将非结构化参数由托管封送处理为非托管除使用上述方法外,还可以使用另一种方法将托管参数(来自托管应用程序)封送处理为非托管参数(在非托管DLL中)。以下代码示例说明封送处理技术:#using<mscorlib.dll>usingnamespaceSystem;//TobringSystem::StringinusingnamespaceSystem::Runtime::InteropServices;//forDllImportAttributenamespaceSysWin32{[DllImport("user32.dll",EntryPoint="MessageBox",CharSet=Unicode)]Int32MessageBox(Int32hWnd,String*lpText,String*lpCaption,UInt32uType);}intmain(){SysWin32::MessageBox(0,S"Helloworld!",S"Greetings",0);}
解决方案三:
引用1楼ericzhangbo1982111的回复:

DllImport属性的常见用法。第一节讨论使用DllImport从托管应用程序调用本机代码的优点。第二节集中讨论封送处理和DllImport属性的各个方面。从托管应用程序调用非托管代码当在托管应用程序中重用现有的非托管代码时,DllImport属性非常有用。例如,托管应用程序可能需要调用非托管WIN32API。下面的代码示例说明此通用方案,此示例将调用MessageBox(位于User32.lib中):#using<mscorlib.dll>u…

解决方案四:
常用的还有"Kernel32.dll",也可以引入自己写的本机dll有了dllimport可以方便的调用win32API
解决方案五:
mark
解决方案六:
引用4楼shanying_0的回复:

mark

解决方案七:
引用5楼ojekleen的回复:

引用4楼shanying_0的回复:mark

remarkble
解决方案八:
剛接觸。。。學習了
解决方案九:
直接在reference里加也是一样的吧
解决方案十:
底层的有些dll文件c#是不能添加引用的只有通过dllimport调用
解决方案十一:

解决方案十二:
引用1楼ericzhangbo1982111的回复:

DllImport属性的常见用法。第一节讨论使用DllImport从托管应用程序调用本机代码的优点。第二节集中讨论封送处理和DllImport属性的各个方面。从托管应用程序调用非托管代码当在托管应用程序中重用现有的非托管代码时,DllImport属性非常有用。例如,托管应用程序可能需要调用非托管WIN32API。下面的代码示例说明此通用方案,此示例将调用MessageBox(位于User32.lib中):#using<mscorlib.dll>usingnamespaceSystem::Runtime::InteropServices;//forDllImportAttributenamespaceSysWin32{ [DllImport("user32.dll",EntryPoint="MessageBox",CharSet=Unicode)] intMessageBox(void*hWnd,wchar_t*lpText,wchar_t*lpCaption,         unsignedintuType);}intmain(){ SysWin32::MessageBox(0,L"Helloworld!",L"Greetings",0);}主要注意包含DllImport的代码行。此代码行根据参数值通知编译器,使之声明位于User32.dll中的函数并将签名中出现的所有字符串(如参数或返回值)视为Unicode字符串。如果缺少EntryPoint参数,则默认值为函数名。另外,由于CharSet参数指定Unicode,因此公共语言运行库将首先查找称为MessageBoxW(有W是因为Unicode规范)的函数。如果运行库未找到此函数,它将根据调用约定查找MessageBox以及相应的修饰名。受支持的调用约定只有__cdecl和__stdcall。当调用用户定义的DLL中所包含的函数时,有必要将extern"C"添加在DLL函数声明之前,如下所示://ThefunctiondeclarationinSampleDLL.hfileextern"C"SAMPLEDLL_APIintfnSampleDLL(void);有关受支持的其他参数值的更多信息,请参见DllImport。将非结构化参数由托管封送处理为非托管除使用上述方法外,还可以使用另一种方法将托管参数(来自托管应用程序)封送处理为非托管参数(在非托管DLL中)。以下代码示例说明封送处理技术:#using<mscorlib.dll>usingnamespaceSystem;//TobringSystem::StringinusingnamespaceSystem::Runtime::InteropServices;//forDllImportAttributenamespaceSysWin32{ [DllImport("user32.dll",EntryPoint="MessageBox",CharSet=Unicode)] Int32MessageBox(Int32hWnd,String*lpText,String*lpCaption,          UInt32uType);}intmain(){ SysWin32::MessageBox(0,S"Helloworld!",S"Greetings",0);}

又见高手
解决方案十三:
常用的三大模块:user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息gdi32.dllgdi32.dll是WindowsGDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字kernel32.dll控制着系统的内存管理、数据的输入输出操作和中断处理微软就是靠这三个模块起家的WindowsSDK只利用这三个模块就能构建基本的Windows程序
解决方案十四:
这么多回复。。囧~!。
解决方案十五:
引用2楼fly_to_the_winds的回复:

引用1楼ericzhangbo1982111的回复:DllImport属性的常见用法。第一节讨论使用DllImport从托管应用程序调用本机代码的优点。第二节集中讨论封送处理和DllImport属性的各个方面。从托管应用程序调用非托管代码当在托管应用程序中重用现有的非托管代码时,DllImport属性非常有用。例如,托管应用程序可能需要调用非托管WIN32API。下面的代码示例说明此通用方案,此示例将调用MessageBox(位于User32.lib中):#using<mscorlib.dll>u…

解决方案:
學習,學習
解决方案:
努力学习知识,顶楼主
解决方案:
帮顶
解决方案:
引用12楼yangglemu的回复:

常用的三大模块:user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息gdi32.dllgdi32.dll是WindowsGDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字kernel32.dll控制着系统的内存管理、数据的输入输出操作和中断处理微软就是靠这三个模块起……

学习
解决方案:
不错学习
解决方案:

解决方案:
C#的平台调用,请参考:另外,遇到这样的问题,可以先google搜索后,再问具体的。例如怎么调用某个函数等。
解决方案:
一般用于调用系统的api
解决方案:
mark
解决方案:
學習了
解决方案:
举个非常简单的例子说明,产品化的时候,一般都用加密狗的手段,但是想添加引用,或者使用加密狗中的算法或检测时,需要加载其光盘内带的DLL:Rockey3Com.dll,需要用运行regsvr32注册,或者用[DllImport("Rockey3Com.dll")]的方法来自动注册,之后才可以使用的~一般都写在安装类里,或者程序启动,根据其DLL的标识来检测是否注册过。这样才可以使用的。我知道的方法是必须得放在项目启动路径下,或sys32文件夹下,不需要写路径,就写名字可以直接注册的。
解决方案:
看看。
解决方案:
不错握,,谢谢,学习了。
解决方案:
引用12楼yangglemu的回复:

常用的三大模块:user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息gdi32.dllgdi32.dll是WindowsGDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字kernel32.dll控制着系统的内存管理、数据的输入输出操作和中断处理微软就是靠这三个模块起……

又见高手不错哈哈
解决方案:
这完全就是C#这个OO调用NativeMethods的不二法门啊。当你想更自由地控制窗体的时候,就这么用。毕竟,上层封装给你的东西,是用起来方便,其实,你是受限的了。
解决方案:
来学习一下,顺便帮顶!
解决方案:
学习了
解决方案:
学习了··好多高YIN啊
解决方案:
引用12楼yangglemu的回复:

常用的三大模块:user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息gdi32.dllgdi32.dll是WindowsGDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字kernel32.dll控制着系统的内存管理、数据的输入输出操作和中断处理微软就是靠这三个模块……

长见识
解决方案:
引用21楼computerfox的回复:

C#的平台调用,请参考:创建Win32DLL,并在C#里面调用另外,遇到这样的问题,可以先google搜索后,再问具体的。例如怎么调用某个函数等。

平台调用吧.
解决方案:
引用1楼ericzhangbo1982111的回复:

DllImport属性的常见用法。第一节讨论使用DllImport从托管应用程序调用本机代码的优点。第二节集中讨论封送处理和DllImport属性的各个方面。从托管应用程序调用非托管代码当在托管应用程序中重用现有的非托管代码时,DllImport属性非常有用。例如,托管应用程序可能需要调用非托管WIN32API。下面的代码示例说明此通用方案,此示例将调用Mes……

!!!
解决方案:
呵呵,接口问题,
解决方案:
.netframework的核心就是DllImport.
解决方案:
说个实例看看啊,我也搞不懂啊
解决方案:
ding
解决方案:
常用的基本就是这三个user32.dllgdi32.dllkernel32.dll
解决方案:
学习下
解决方案:
学习中……
解决方案:
引用12楼yangglemu的回复:

常用的三大模块:user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息gdi32.dllgdi32.dll是WindowsGDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字kernel32.dll控制着系统的内存管理、数据的输入输出操作和中断处理微软就是靠这三个模块起……

学习,谢谢大神~
解决方案:
学习了,高手
解决方案:
不错,真的学习了
解决方案:
xuexizhong
解决方案:
引用18楼freshairyz25的回复:

引用12楼yangglemu的回复:常用的三大模块:user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息gdi32.dllgdi32.dll是WindowsGDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字kernel32.dll控制着系统的内存管理、数据的输……

好啊
解决方案:
刚好遇到这个问题,也是不知道DllImport是干嘛的,学习了,谢谢诶。
解决方案:
在这里看了很久。。。。。

时间: 2024-12-03 17:50:08

DllImport(&amp;quot;User32.dll&amp;quot;)的相关文章

wince Device.SCA_GetPowerStatus()方法抛出异常,Can&amp;amp;#x27;t find Pinvoke DLL &amp;amp;quot;Device.dll&amp;amp;quot;

问题描述 在wince模拟器上调试报错Device.dll已经放在根目录下请大神帮忙解决--谢谢!!!! 解决方案 解决方案二:没人帮我解决吗[DllImport("device.dll")]求解啊解决方案三:device.dll这个文件找不到.也可能是你的dll是arm的,你的模拟器是x86的.解决方案四:引用2楼devmiao的回复: device.dll这个文件找不到.也可能是你的dll是arm的,你的模拟器是x86的. 恩恩是的那应该怎么解决?谢谢!!!解决方案五:把Devic

异常-C#调用动态库,无法加载 DLL&amp;amp;quot;xx.dll&amp;amp;quot;: 找不到指定的模块。

问题描述 C#调用动态库,无法加载 DLL"xx.dll": 找不到指定的模块. 报错内容:System.DllNotFoundException: 无法加载 DLL"XX.dll": 找不到指定的模块. (异常来自 HRESULT:0x8007007E). 网上的各种方法我都试过了,都是这样 我把目标平台改成x64,报错就变成:System.BadImageFormatException: 试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000

c++-急急急---LoadLibrary(&amp;amp;quot;pstorec.dll&amp;amp;quot;);

问题描述 急急急---LoadLibrary("pstorec.dll"): 编译语句 HMODULE hpsDLL = LoadLibrary(""pstorec.dll"");可以通过但跟踪发现hpsDLL值为:unused = CXX0030: 错误: 无法计算表达式的值这是什么原因啊?? 解决方案 只要关注hpsDLL 本身就好,unused 表示内核对象引用计数,没有参考意义 解决方案二: 库打开了吗,库路径加上了吗

C# Assembly.Load(&amp;amp;quot;mscorlib.dll&amp;amp;quot;)后面可以加.dll,而其他一些却不能加

问题描述 vary=Assembly.Load("mscorlib").CreateInstance("System.Random");vary=Assembly.Load("mscorlib.dll").CreateInstance("System.Random");上面两句都对下面是我自己写的dllvarx=Assembly.Load("NewsRelease.Model").CreateInstanc

接口-C# dllimport C# 自己的DLL,这样可以码,如果可以,该DLL怎样写呢

问题描述 C# dllimport C# 自己的DLL,这样可以码,如果可以,该DLL怎样写呢 我有个老项目,是用C++写的DLL,主程序为C#,没源码,已经知道C++DLL的接口入口和参赛,想在主程序调用该C++DLL时再套一层C#接口,必须使用dllimport C#DLL,请问该C#DLL如何编写 解决方案 就是dllimport,你不是都知道了吗,把参数类型匹配对就行了 解决方案二: 类似 [DllImport("user32.dll", EntryPoint="Me

关于user32.dll 消息机制 ,,100分在线等 急急急!!!!!!!!!!

问题描述 [DllImport("User32.dll",EntryPoint="SendMessage")] internalstaticexternIntPtrSendMessage( IntPtrhWnd, uintMsg, IntPtrwParam, reftagStrcutlParam);//定义结构structtagStrcut{publicintuser;publicintlength;publicIntPtrdata;}在发送的时候IntPtrres

Win7系统提示“无法定位动态链接库user32.dll”的解决方法

user32.dll是Windows用户界面相关应用程序接口,用于Windows处理,基本用户界面等特性,比如创建窗口和发送消息等,有用户反馈在win7系统上运行某软件的过程中,出现提示无法定位程序输入点dwmhintdxupdate于动态链接库user32.dll上,导致这个软件无法使用,下载重装也没用,不知该如何解决了?针对此问题,下面小编整理了解决方法,给大家介绍Win7纯净版64位系统运行软件提示无法定位动态链接库user32.dll的解决方法. 操作方法: 1.首先重新启动或注销win

Win7系统启动软件提示无法定位动态链接库user32.dll问题解决方法

  解决步骤: 1.首先重启或注销计算机,然后进入到系统盘下的Windowssystem32文件夹中; 2.然后在里面找到并复制dwmapi.dll 文件; 3.接着进入进入这款软件的安装文件文件夹,将dwmapi.dll文件粘贴过来覆盖原文件,这样就可以解决这个问题了. 小贴士:user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息.

Win7运行某软件时提示无法定位动态链接库user32.dll怎么办

  小贴士:user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息. 解决步骤: 1.首先重启或注销计算机,然后进入到系统盘下的Windowssystem32文件夹中; 2.然后在里面找到并复制dwmapi.dll 文件; 3.接着进入进入这款软件的安装文件文件夹,将dwmapi.dll文件粘贴过来覆盖原文件,这样就可以解决这个问题了.