2015-10-20 34 views
0

長期目標是通過使用預建的midi控制器而不是構建並連接自定義控制面板,構建軟件以實現midi控制界面作爲工業控制應用程序的用戶界面。短期目標,請閱讀插入計算機的MIDI設備的名稱。直接的問題,編譯器說'非法限定符,szPname'。我相信szPname是cap結構的一個子集,但我不明白如何去做到這一點嘗試使用winmm讀取midi控制器設備名稱

我使用的是從Windows上的FreePascal實現winmm 10機

這裏是我當前的代碼...

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

回答

1

documentation說:

Error: Illegal qualifier

One of the following is happening:

  • You’re trying to access a field of a variable that is not a record.
  • You’re indexing a variable that is not an array.
  • You’re dereferencing a variable that is not a pointer.

在這種情況下,caps是一個指針,所以你必須取消對它的引用,然後才能訪問記錄字段:

WriteLn(caps^.szPname); 

(其它編譯器能自動取消引用指針記錄。顯然,FreePascal不能)。

您還需要爲caps分配內存。 (或不要使用指針。)

+0

謝謝,這似乎工作。它編譯沒有錯誤。現在我要學習'運行時錯誤216' –

+0

我可以編譯它,但是當我嘗試運行它時總會得到相同的響應。「運行時錯誤216在$ 00401EAD $ 00401EAD $ 00406261 $ 00401471 $ 00406621。我已經編譯並在兩臺不同的機器上運行,每次都能得到完全相同的結果,而不管它在哪臺機器上編譯或運行在哪臺機器上。 –