0

私のプログラムでは、共有ライブラリのメソッドを使用しています。

私のプログラムは何十万もの異なるデバイス (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: で可能ですか? :)

このための公式のヘッダー ファイルはありません。自分で定義する必要がありますが、ここでは重要です。

4

1 に答える 1