长期目标,通过使用预构建的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.
答案 0 :(得分:1)
错误:非法限定符
以下情况之一正在发生:
- 您正在尝试访问非记录变量的字段。
- 您正在索引不是数组的变量。
- 您正在取消引用不是指针的变量。
在这种情况下,caps
是一个指针,因此您必须取消引用它才能访问记录字段:
WriteLn(caps^.szPname);
(其他编译器可以自动取消引用指向记录的指针。显然,FreePascal不能。)
您还需要为caps
分配内存。 (或者不要使用指针。)