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;
据我所知,这意味着函数的返回类型是对此结构体的引用?
而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;
...
}
如果是这样,运行时是否可以自动将这些对象“映射”到彼此? 而且,我是否需要为这些返回类型/参数类型层次结构中的所有类型创建这些“映射”类型,一直到我获得所有基元类型为止?
我知道这是一个广泛的话题,如果您能给我一些建议,让我快速了解我需要学习什么才能实现这一点,那将非常感激!谢谢!