2015-09-07 34 views
0

我試圖從我寫的一些Julia代碼發送midi消息,但是我遇到了midiOutOpen函數的問題。我按照這個教程here,但我從函數獲得的輸出沒有意義。midiOutOpen返回一個未知錯誤,當​​我從Julia代碼中調用它時

這是我的朱莉婭代碼:

const CALLBACK_NULL = uint32(0x00000001) 
function openoutputdevice(id::Uint32) 
    handle = uint32(0) 

    err = ccall((:midiOutOpen, :Winmm), stdcall, 
     Uint32, 
     (Ptr{Uint32}, Uint32, Ptr{Uint32}, Ptr{Uint32}, Uint32), 
     &handle,  id,  C_NULL,  C_NULL,  CALLBACK_NULL) 

    println(hex(err)) 
    handle 
end 

手柄始終爲0,而​​這返回的錯誤是「10」。我已經對Windows頭文件進行了仔細的分析,這似乎與功能中可能出現的任何錯誤都不相符(請參閱here),所以我更傾向於認爲我正在映射ccall中錯誤的Julia數據類型。我已經做了很長時間,因爲我已經做了與C相關的任何事情,所以我希望這有明顯的錯誤。我見過的唯一奇怪的事情是,CALLBACK_NULL在mmsyscom.h中被定義爲0x000000001 - 一個9位數的十六進制數,儘管函數doc爲midiOutOpen的最終參數指定了一個DWORD。

任何想法?

回答

1

該錯誤是因爲MMSYSERR_INVALFLAGCALLBACK_NULL定義爲:

#define CALLBACK_NULL 0x00000000l

即小寫-信紙 「L」 在端部,而不是數字1(一)。此值更正後,調用成功。

+0

我現在面臨着如此艱難的面目。謝謝。 –

相關問題