在.net中使用Windows API函数

Using Windows API functions in .NET

本文关键字:Windows API 函数 net      更新时间:2023-10-16

我之前在这里问了一个问题:关于从。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++ DLL。需要使用c++/CLI语言编写包装器。

正如他所说,在这种情况下,需要包装器的原因是因为。net不能使用c++导出的。然而,在这种情况下,MessageBox函数只是一个由c++编译的DLL导出的函数,而不是一个。VB。NET可以很容易地用于调用API函数,正如您所演示的那样。问题不在于调用API 函数。问题在于使用c++类。

正如其他人所说,在这种情况下,您只想使用托管的MessageBox.Show