Using Windows API functions in .NET

情到浓时终转凉″ 提交于 2019-12-11 10:23:34

问题


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

回答1:


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.




回答2:


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



来源:https://stackoverflow.com/questions/15143425/using-windows-api-functions-in-net

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!