将C struct元素传递给C ++ dll库函数

时间:2017-02-06 11:54:05

标签: c++ c dll struct

我正在尝试使用C ++ dll库中的函数从C接口(lite-C)调用它,但是我有问题将结构元素传递给被调用的dll函数。

dll库包含多个功能。它是一个带有C-API的C ++库(使用EXTERN C和def文件编译)。

例如,我在C头中声明并初始化了所需的dll函数原型:

const char* __cdecl foo(const svm_problem *prob, const svm_parameter *param);

probparam是两个包含多个元素的结构。我在C头文件中声明它们与用于构建dll的C ++头文件完全相同。

然后我在我的C代码中初始化结构并将它们的指针传递给foo函数。

我能够在主脚本中调用dll foo函数,但是foo函数似乎不能识别通过函数参数传递的一些结构组件(变量)作为指针,因此不起作用正常。

例如,当我初始化时,假设param.C为1.0并调用foo(&prob, &param)函数返回错误:C<=0

然而,当我通过在消息中打印其内容来检查param.C时,它给出了1.0,这是正确的。

不知何故,它的值未正确传递给dll函数(其类型为double)。

但是,同一结构的其他元素正确传递给foo。

奇怪的是,对于同一结构的另一个成员,类型为double我遇到了同样的问题,直到我在C头中将此元素声明为float而不是double,但是在dll中声明了double并且在foo函数中需要

我还试图将我的结构初始化为全局,但这并没有改变任何东西。

有没有人知道如何使这项工作?

以下是结构:

    struct svm_problem
{
 int l;
 double *y;
 struct svm_node **x;
};

struct svm_parameter
{
 int svm_type;
 int kernel_type;
 int degree;
 double gamma;
 double coef0;
 double cache_size;
 double eps;
 double C;
 int nr_weight;
 int *weight_label;
 double* weight;
 double nu;
 double p;
 int shrinking;
 int probability;
};

0 个答案:

没有答案