尝试使用winmm读取midi控制器设备名称

时间:2015-10-20 23:42:55

标签: windows midi freepascal

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

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

这是我目前的代码......

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

1 个答案:

答案 0 :(得分:1)

documentation说:

  

错误:非法限定符

     

以下情况之一正在发生:

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

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

WriteLn(caps^.szPname);

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

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