faacEncConfigurationPtr FAACAPI faacEncGetCurrentConfiguration(
faacEncHandle hEncoder);
Я пытаюсь найти простую оболочку для этой библиотеки C ++; Я никогда раньше не делал ничего, кроме очень простого взаимодействия p / invoke - например, один вызов функции с примитивными аргументами.
Итак, учитывая приведенную выше функцию C ++, например, что мне делать, чтобы иметь дело с типом возвращаемого значения и параметром?
FAACAPI определяется как: #define FAACAPI __stdcall
faacEncConfigurationPtr определен:
typedef struct faacEncConfiguration
{
int version;
char *name;
char *copyright;
unsigned int mpegVersion;
unsigned long bitRate;
unsigned int inputFormat;
int shortctl;
psymodellist_t *psymodellist;
int channel_map[64];
} faacEncConfiguration, *faacEncConfigurationPtr;
AFAIK это означает, что возвращаемый тип функции является ссылкой на эту структуру?
И faacEncHandle это:
typedef struct {
unsigned int numChannels;
unsigned long sampleRate;
...
SR_INFO *srInfo;
double *sampleBuff[MAX_CHANNELS];
...
double *freqBuff[MAX_CHANNELS];
double *overlapBuff[MAX_CHANNELS];
double *msSpectrum[MAX_CHANNELS];
CoderInfo coderInfo[MAX_CHANNELS];
ChannelInfo channelInfo[MAX_CHANNELS];
PsyInfo psyInfo[MAX_CHANNELS];
GlobalPsyInfo gpsyInfo;
faacEncConfiguration config;
psymodel_t *psymodel;
/* quantizer specific config */
AACQuantCfg aacquantCfg;
/* FFT Tables */
FFT_Tables fft_tables;
int bitDiff;
} faacEncStruct, *faacEncHandle;
Итак, внутри этой структуры мы видим много других типов ... хм.
По сути, я пытаюсь выяснить, как бороться с этими типами в моей управляемой оболочке?
Нужно ли создавать версии этих типов / структур в C #? Примерно так:
[StructLayout(LayoutKind.Sequential)]
struct faacEncConfiguration
{
uint useTns;
ulong bitRate;
...
}
Если это так, то может ли среда выполнения автоматически "сопоставлять" эти объекты друг с другом?
И нужно ли мне создавать эти «сопоставленные» типы для всех типов в этих возвращаемых типах / иерархиях типов параметров, вплоть до тех пор, пока я не доберусь до всех примитивов?
Я знаю, что это широкая тема, и любые советы о том, как быстро освоить то, что мне нужно, чтобы это произошло, были бы очень благодарны! Спасибо!