我正在将视频编码器 DLL 的 C 头文件转换为 Delphi Pascal。
我遇到了一些使用以下功能的访问冲突问题,需要帮助解决这个问题:
h264venc_tt * MC_EXPORT_API h264OutVideoNew(
void * (MC_EXPORT_API * get_rc)(const char* name),
const struct h264_v_settings * set,
int32_t options,
int32_t CPU,
int32_t frame0,
int32_t nframes);
注意:MC_EXPORT_API = cdecl
get_rc 声明如下:
// resource functions dispatcher
void * MC_EXPORT_API get_rc(const char* name)
{
if (!strcmp(name, "err_printf"))
return (void*) error_printf;
else if (!strcmp(name, "prg_printf"))
return (void*) progress_printf;
else if (!strcmp(name, "wrn_printf"))
return (void*) warn_printf;
else if (!strcmp(name, "inf_printf"))
return (void*) info_printf;
return NULL;
}
此函数返回指向另一个具有变量参数列表的函数的指针。其中之一被声明为:
void error_printf(const char * fmt, ...)
{
char lst[256];
va_list marker;
va_start(marker,fmt);
vsprintf(lst,fmt,marker);
va_end(marker);
printf("%s\n", lst);
}
我已经将这个函数调用和 get_rc 翻译成这个 Delphi Pascal 代码:
PErrorMessageHandler = function (const Name: String): Pointer; cdecl varargs;
function h264OutVideoNew(
get_rc: PErrorMessageHandler;
settings: Ph264_v_settings;
options: int32;
CPU: int32;
frame0: int32;
nFrames: int32
): Pointer; cdecl; external 'mc_enc_avc.dll' index 4;
不幸的是,我不知道如何实现上面显示的 C 风格方法 error_printf。谁能帮我指出正确的方向?我也很好奇我是否正确实现了其他功能,因为当我尝试调用该h264OutVideoNew()
函数时遇到访问冲突。
PS!我没有在这篇文章中包含打包的记录Th264_v_settings
/P_h264_v_settings
因为这很长而且不是真正的问题。