我正在尝试使用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);
prob
和param
是两个包含多个元素的结构。我在C头文件中声明它们与用于构建dll的C ++头文件完全相同。
然后我在我的C代码中初始化结构并将它们的指针传递给foo函数。
我能够在主脚本中调用dll foo
函数,但是foo函数似乎不能识别通过函数参数传递的一些结构组件(变量)作为指针,因此不起作用正常。
例如,当我初始化时,假设param.C为1.0并调用foo(&prob, ¶m)
函数返回错误: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;
};