如何使用SWIG生成的C#文件定义struct变量?

时间:2013-12-06 09:15:34

标签: c# c visual-studio-2012 struct swig

我有使用SWIG编译到共享库(.dll)的c代码。对于.i文件,我只使用头文件:

myMPC.i:

 %module myMPC
 %{
 /* Includes the header in the wrapper code */
 #include "myMPC.h"
 %}

 /* Parse the header file to generate wrappers */
 %include "myMPC.h"

SWIG还会生成看起来不错的C#包装器。我现在的问题是我不知道如何定义我必须传递给dll的struct变量。我将不得不以某种方式定义包含在myMPC_params.cs类中的params结构。

我已将所有文件上传到我的服务器:http://n.ethz.ch/~rehofman/download/

我在Visual Studio 2012中使用Windows 7,64位。

编辑:

头文件中的函数如下所示:

int myMPC_solve(myMPC_params* params, myMPC_output* output, myMPC_info* info);

所有的古迹都是结构,例如myMPC_params:

typedef struct myMPC_params
{
    /* diagonal matrix of size [4 x 4] (only the diagonal is stored) */
    myMPC_FLOAT H[4];

    /* vector of size 4 */
    myMPC_FLOAT lb[4];

    /* vector of size 4 */
    myMPC_FLOAT ub[4];

    /* vector of size 3 */
    myMPC_FLOAT z1[3];

    /* vector of size 4 */
    myMPC_FLOAT bineq[4];

    /* diagonal matrix of size [3 x 3] (only the diagonal is stored) */
    myMPC_FLOAT H_last[3];

    /* vector of size 3 */
    myMPC_FLOAT lb_last[3];

    /* vector of size 3 */
    myMPC_FLOAT ub_last[3];

    /* vector of size 4 */
    myMPC_FLOAT bineq_last[4];

} myMPC_params;

所以它是一个带有双元素的结构,因为:

typedef double myMPC_FLOAT;

SWIG生成的c#文件中的函数如下:

  public static int myMPC_solve(myMPC_params arg0, myMPC_output output, myMPC_info info) {
    int ret = myMPCPINVOKE.myMPC_solve(myMPC_params.getCPtr(arg0), myMPC_output.getCPtr(output), myMPC_info.getCPtr(info));
    return ret;
  }

所以我必须给这个函数一个myMPC_params类的实例。所以我必须创建这个类的实例:

myMPC_params mpcparams;

现在我想设置这个类的变量,例如mpcparams.H为H_values:

double[] H_values = new double[] { 10, 1, 1, 0.1 };

这就是我挣扎的地方。我怎样才能将H_values分配给mpcparams.H?

0 个答案:

没有答案