0

我不知道如何将以下 API 转换为 VB.NET

Private Const MAXPNAMELEN As Long = 32&

Private Type JOYCAPS
wMid As Integer
wPid As Integer
szPname As String * MAXPNAMELEN
wXmin As Long
wXmax As Long
wYmin As Long
wYmax As Long
wZmin As Long
wZmax As Long
wNumButtons As Long
wPeriodMin As Long
wPeriodMax As Long
End Type

Private Declare Function joyGetDevCaps Lib "winmm.dll" Alias "joyGetDevCapsA" (ByVal id As Long, lpCaps As JOYCAPS, ByVal uSize As Long) As Long

我尝试了一些转换器,但它们的输出不起作用。如果有人真的很好,他可以尝试为我转换它并告诉我如何调用它吗?特别是,我不知道在将 JOYCAPS 传递给函数时如何实例化它。

我在 pinvoke.net 上没有找到这个功能。

谢谢你。

4

1 回答 1

2

我无法对其进行测试,但这应该是直接的转换:

Private Const MAXPNAMELEN As Integer = 32

<StructLayout(LayoutKind.Sequential)>
Private Structure JOYCAPS
    Public wMid As Short
    Public wPid As Short
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAXPNAMELEN)>
        Public szPname As String
    Public wXmin As Integer
    Public wXmax As Integer
    Public wYmin As Integer
    Public wYmax As Integer
    Public wZmin As Integer
    Public wZmax As Integer
    Public wNumButtons As Integer
    Public wPeriodMin As Integer
    Public wPeriodMax As Integer
End Structure

<DllImport("winmm.dll")>
Private Shared Function joyGetDevCaps(id As IntPtr, ByRef lpCaps As JOYCAPS, uSize As UInteger) As Integer

End Function

它假设System.Runtime.InteropServices是进口的。

于 2012-12-16T17:55:10.567 回答