【问题标题】:VB.NET - Convert joyGetDevCaps function from VB6 to VB.NETVB.NET - 将 joyGetDevCaps 函数从 VB6 转换为 VB.NET
【发布时间】:2012-12-16 17:49:05
【问题描述】:

我不知道如何将以下 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 上没有找到这个功能。

谢谢。

【问题讨论】:

    标签: vb.net api pinvoke joystick


    【解决方案1】:

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

    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 已导入。

    【讨论】:

    • 哇,谢谢!您能否告诉我在将 JOYCAPS 传递给函数时如何实例化它?我想这就是“确保将 szPname 初始化为容量为 MAXPNAMELEN 的新 StringBuffer”的意思。我不知道该怎么做。
    • 你能告诉我StringBuffer是什么吗?你是说 StringBuilder 吗?
    • @tmighty:我确实是指 StringBuilder,它也不对 :) 我编辑了它,它现在应该可以正常工作了。只需Dim caps As New JOYCAPS() 即可创建结构的实例。
    • @minitech 第一个函数参数应该是pointer-sized
    • @minitech 谢谢!但是你能给我举个例子来说明这实际上是如何被调用的吗?是否将 JC 调暗为新的 JOYCAPS:将 i 调暗为整数 = JoyGetDevCaps(0, JC, Marshal.SizeOf(JC)) ?
    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多