私のプログラムでは、共有ライブラリのメソッドを使用しています。
私のプログラムは何十万もの異なるデバイス (Android) 用にコンパイルされており、各ターゲット システムに特定のバイナリを提供することはできません。
ターゲット デバイス上の共有ライブラリのメソッドには、残念ながら 2 つの異なる署名があります。
システム A
int (*open_output_stream)(
struct audio_hw_device *dev, // equal on all systems
audio_io_handle_t handle, // unimportant
audio_devices_t devices, // unimportant
audio_output_flags_t flags, // unimportant
struct audio_config *config, // unimportant
struct audio_stream_out **stream_out // equal on all systems
);
システムB
int (*open_output_stream)(
struct audio_hw_device *dev, // equal on all systems
uint32_t devices, // unimportant
int *format, // unimportant
uint32_t *channels, // unimportant
uint32_t *sample_rate, // unimportant
struct audio_stream_out **out // equal on all systems
);
私のコードでは、必要な結果を得るために、最初のパラメーター ( struct audio_hw_device ) と最後のパラメーター ( struct audio_stream_out ) でそのメソッドを呼び出す必要があります。
間の他の4つのパラメーターは私にとって重要ではないので、0またはNULLに置き換えます。
次のようなメソッドを呼び出すことができるかどうかを誰が教えてくれますか
audio_hw_device_t *outHwDev
int res = open_output_stream)(
outHwDev, // equal on all systems
NULL or 0 ?, // unimportant
NULL or 0 ?, // unimportant
NULL or 0 ?, // unimportant
NULL or 0 ?, // unimportant
&outStream // equal on all systems
);
または、「try{callFunction}(catch UnknownMethodException){}」のようなものは C: で可能ですか? :)
このための公式のヘッダー ファイルはありません。自分で定義する必要がありますが、ここでは重要です。