在.net中使用Windows API函数
Using Windows API functions in .NET
我之前在这里问了一个问题:关于从。net调用经典c++程序的COM与非COM DLL。
答案(来自Hans Passant)是用Visual c++写一个包装器类,这在我的项目中效果很好(我确实从另一个对c++更有商业经验的开发人员那里得到了一些帮助)。
我的问题是:是否有为WINAPI中的一些函数创建的包装类。例如,下面的代码可以在没有包装器类的情况下工作:
Imports System.Runtime.InteropServices
Imports System.Text
Public Class Form1
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
Public Shared Function MessageBox(ByVal hwnd As IntPtr, <MarshalAs(UnmanagedType.LPStr)> ByVal lpString As String, <MarshalAs(UnmanagedType.LPStr)> ByVal lpString2 As String, ByVal cch As Integer) As Integer
End Function
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
MessageBox(0, "HelloWorld", "HelloWorld", 0)
End Sub
End Class
围绕WINAPI调用的现有包装器类称为系统。Windows 名称空间。: -)
Hans对你的另一个问题的评论是:
正如他所说,在这种情况下,需要包装器的原因是因为。net不能使用c++导出的类。然而,在这种情况下,不能直接使用。net程序中导出类的c++ DLL。需要使用c++/CLI语言编写包装器。
MessageBox
函数只是一个由c++编译的DLL导出的函数,而不是一个类。VB。NET可以很容易地用于调用API函数,正如您所演示的那样。问题不在于调用API 函数。问题在于使用c++类。
正如其他人所说,在这种情况下,您只想使用托管的MessageBox.Show
。
相关文章:
- 如何使用Windows API C++更改已创建的文件夹/目录安全权限
- C++Windows API MOUSEEVENTF_XDOWN,MOUSEEVENTF_XUP不起作用
- 如何在 Windows API 中更改系统范围的多个游标
- 为什么我在 Windows API 中得到对 TextOut() 函数的未定义引用?
- 谁拥有作为指向 Windows API 函数的指针传递的值?
- 使用 Windows API c++ 的键盘输入
- 程序在对mouse_event的 Windows API 调用中冻结
- 等效的Windows API与Power shell get-physicaldisk命令
- 需要更好地了解使用 Windows API 的智能指针
- 如何检查 CNG Windows API 是否返回符合 FIPS 的算法实现
- Windows API SIZE_T在内存和控制台中不显示相同的值
- 如何在 Windows API 中检测带有虚拟代码的非字母?
- c ++ 是否有任何用于列出 Windows 驱动程序管理器控制台中显示的设备驱动程序的 Windows API?
- Windows API "CreateWindowEx" 在 Python (3.6.8) 64 位使用的 DLL 中工作吗?
- 如何将CString转换为使用WCHAR的Windows API和自定义函数?
- 如何通过Windows API获取所有(未禁用)用户SID?
- 有什么方法可以用本机C 代码替换Windows API计时器(settimer)
- 检查任务栏中的当前应用程序吗?(C ,Windows API)
- 为什么我的 Windows API 回调函数不运行?
- 如何在应用程序正在运行的系统上查看所需的Windows API函数