如何包装C库参数?(创建x264 .Net包装器)

时间:2010-07-11 12:56:35

标签: c# .net wrapper x264 libx264

所以在dll中我们有x264_param_t个结构\对象和一个设置x264_param_apply_profile的函数。在C中我们使用such code进行设置

x264_param_t param;
x264_param_default_preset(&param, "veryfast", "zerolatency");
param.i_threads = 1;
param.i_width = width;
param.i_height = height;
param.i_fps_num = fps;
param.i_fps_den = 1;
// Intra refres:
param.i_keyint_max = fps;
param.b_intra_refresh = 1;
//Rate control:
param.rc.i_rc_method = X264_RC_CRF;
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 35;
//For streaming:
param.b_repeat_headers = 1;
param.b_annexb = 1;
x264_param_apply_profile(&param, "baseline");

我想为这样的东西创建包装器。所以我有libx264.dll和visual studio 2010专业版。

如何为它创建.Net C#包装器?

我是P \ Invoke的初学者,所以我没有得到很多......

我想要实现的是使用x264的逐帧级别...现在我只需要编码部件......所有用于在C中执行此操作的示例代码都在How does one encode a series of images into H264 using the x264 C API?中。所以我只需要为那里提到的东西编写一个包装器......所以我要问 - 如何在参数和函数上创建一个包装器来设置thap参数。我很想知道如何从c#中调用该包装器。因此,如果您能提供任何支持代码,我很高兴看到它。

2 个答案:

答案 0 :(得分:2)

我可以建议你试试excellent MeGUI,而不是自己尝试这个(以及其他代码)。它是用C#开发的,支持所有X264,可以在C#或其他.NET项目中使用。不需要包装,他们已经为你做了一切。

虽然使用C#调用C库函数并不是非常困难,但如果您希望自己完成所有操作,我建议您查看http://pinvoke.net,它会为您提供很多例子如何自己做。

答案 1 :(得分:0)

令人惊讶的是,在这些年里,似乎没有人为libx264构建和共享最简单的.NET包装器。所以我最近构建了一个我称之为“x264net”并将其放在github上,在这里:https://github.com/bp2008/x264net

此时包装器非常简单,使其成为如何从.NET语言访问C库的一个很好的示例。我没有使用P / Invoke,因为我觉得很难处理。相反,我使用了一种名为“C ++ / CLI”的语言来创建互操作性层。 C ++ / CLI是一种基于C ++的语言,可以访问本机C / C ++库,而.NET代码可以访问它。因此,它很像P / Invoke那样填补了托管代码和本机代码之间的空白。