我有使用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?