【问题标题】:trying to read midi controller device name using winmm尝试使用 winmm 读取 midi 控制器设备名称
【发布时间】:2015-10-25 02:03:08
【问题描述】:

长期目标,通过使用预构建的 midi 控制器而不是构建和连接自定义控制面板,构建软件以将 midi 控制界面实现为工业控制应用程序的用户界面。短期目标,读取插入计算机的 MIDI 设备的名称。直接的问题,编译器说“非法限定符,szPname”。我相信 szPname 是 caps 结构的一个子集,但我不明白如何得到它。

我在 Windows 10 机器上使用 FreePascal 实现 winmm。

这是我当前的代码...

program asd;  
uses mmSystem;  
var  
  caps: ^MIDIINCAPS;  
begin  
  writeln(midiInGetNumDevs());  
  midiInGetDevCaps(0,caps,SizeOf(MIDIINCAPS));  
  writeln(caps.szPname);  
end.

【问题讨论】:

    标签: windows midi freepascal


    【解决方案1】:

    documentation 说:

    错误:非法限定符

    发生以下情况之一:

    • 您正在尝试访问不是记录的变量的字段。
    • 您正在索引一个不是数组的变量。
    • 您正在取消引用一个不是指针的变量。

    在这种情况下,caps 是一个指针,因此您必须先取消引用它才能访问记录字段:

    WriteLn(caps^.szPname);
    

    (其他编译器可以自动取消引用指向记录的指针。显然,FreePascal 不能。)

    您还需要为caps 分配内存。 (或者不要使用指针。)

    【讨论】:

    • 谢谢,这似乎奏效了。它编译没有错误。现在我要去学习“运行时错误 216”
    • 我可以编译它,但是当我尝试运行它时总是得到相同的响应。 “运行时错误 216 为 $00401EAD $00401EAD $00406261 $00401471 $00406621。我已经在两台不同的机器上编译和运行,并且无论在哪台机器上编译或在哪台机器上运行,每次都得到完全相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多