简体   繁体   中英

Using Windows API functions in .NET

I asked a question some time ago here: COM vs non-COM DLL about calling a classic C++ program from .NET.

The answer (from Hans Passant) was to write a wrapper class in Visual C++, which worked out well in my project (I did get some help with this from another developer who is more commerically experienced with C++).

My question is: is there wrapper classes created for some of the functions in the WINAPI. For example, the code below works without a wrapper class:

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

The existing wrapper classes around WINAPI calls are called the System.Windows namespace. ;-)

Hans' comment on your other question said:

You cannot directly use a C++ DLL that exports classes in a .NET program. A wrapper written in the C++/CLI language is required.

As he said, the reason, in that situation, why a wrapper was needed is because .NET cannot use a class that is exported by C++. In this case, however, the MessageBox function is simply a function that is exported by a DLL that was compiled from C++, not a class . VB.NET can very easily be used to invoke API functions, as you have demonstrated. The problem is not with calling API functions . The problem is with using C++ classes.

As others have said, though, in this case, you just want to use the managed MessageBox.Show .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM