1

私はまだ C に慣れていませんが、小さな MIDI オーディオ ユニット (Xcode 4.3.3) を使って、C をよりよく理解しようとしています。私は一日中これに対する答えを探していましたが、問題が何であるかを正確に理解していません. 問題のコードは次のとおりです。

//MyMIDINotifyProc.h

#ifndef MIDIInstrumentUnit_CallbackProcs_h
#define MIDIInstrumentUnit_CallbackProcs_h

void MyMIDINotifyProc (const MIDINotification *message, void *refCon);

#endif


//MyMIDINotifyProc.c

#include <CoreMIDI/CoreMIDI.h>
#include "MyMIDINotifyProc.h"

void MyMIDINotifyProc (const MIDINotification *message, void *refCon) {
//manage notification
}

ヘッダー定義では、次のようになります。

! Cannot combine with previous 'struct' declaration specifier

定義が一致していることを確認し、それらの名前を変更しようとしましたが、.c ファイルでこれを取得します。

! Redefinition of 'MyMIDINotifyProc' as different kind of symbol

これは、「前の定義」として .h 定義を指します。

CoreMIDI フレームワークの MIDIServices.h が次のように定義していることを知っています。

typedef void
(*MIDINotifyProc)(const MIDINotification *message, void *refCon);

しかし、それがエラーを引き起こすかどうか/理由がわかりません。誰かが助けを提供できれば幸いです。

4

2 に答える 2

1

ヘッダーファイルにインクルード<CoreMIDI/CoreMIDI.h>するのを忘れました。MyMIDINotifyProc.h

于 2012-12-15T04:55:25.573 に答える
0

詳細はこちら-ただし、typedefが存在すると思われるMidiServices.hファイルが欠落していると思います:

http://disanji.net/iOS_Doc/#documentation/CoreMidi/Reference/MIDIServices_Reference/Reference/reference.html

ヘッダーの最初のエラーの後、ソース ファイルのエラーは無意味になります。

/*MIDIClientCreate - Creates a MIDIClient object. */

OSStatus MIDIClientCreate (
CFStringRef     name,
MIDINotifyProc  notifyProc,
void            *notifyRefCon,
MIDIClientRef   *outClient
);

MIDINotifyProc MIDI 状態が変化したときに呼び出されます。

typedef void (*MIDINotifyProc) ( const MIDINotification *message, void *refCon );

コールバック関数に MyMIDIStateChangedHander という名前を付けた場合、次のように宣言します。

void MyMIDIStateChangedHander ( const MIDINotification *message, void *refCon );

パラメータ message 状態変化に関する情報。

refCon MIDIClientCreate 関数に提供したコンテキスト。

解説 MIDINotifyProc コールバック関数は、MIDIClientCreate 関数を呼び出したのと同じスレッドで呼び出されます。

提供状況 iOS 4.2 以降で利用可能です。MIDIServices.h で宣言

于 2012-12-15T06:08:07.870 に答える