我通常使用C#,但很高兴通过C ++调用C方法。所以我写了一个像这样的C ++包装器:
C ++头文件如下所示:
#pragma once
using namespace System;
namespace CSharpToCPP {
public ref class SomeWrapper
{
public:
double ReturnValue();
};
}
C ++代码如下所示:
double CSharpToCPP::SomeWrapper::ReturnValue()
{
return 1;
}
这给了我可以用C#引用的dll。 C#中的工作代码如下所示:
class Program
{
static void Main(string[] args)
{
SomeWrapper Wrapper = new SomeWrapper();
Console.WriteLine(Wrapper.ReturnValue());
}
}
现在我想在C ++方法ReturnValue中创建一些数据并使用此签名调用C方法:
real_T get_value(const e_struct_T parameters, real_T temp)
有人可以这么善良并指出我正确的方向,这解释了const e_struct_T是什么以及如何创建这样的数据? C代码是自动生成的,应采用已知内容的结构。我试图在头文件中定义一个结构,如下所示:
struct Parameters{
double x;
int y;
char z1;
bool z2;
};
然后使用以下数据填充它:
Parameters Ps;
Ps.x = z2;
Ps.x = 2.0;
在调用get_value之前:
get_value(Ps, 10.0);
这不起作用。谢谢!
答案 0 :(得分:2)
您必须搜索包含e_struct_t
定义的头文件,包含在调用文件中,并使用该类型的变量传递给get_value
;
顺便说一下,如果要从C#
调用的目标方法是纯C
,那么您可能应该考虑直接使用P/Invoke
(a tutorial here)而不是创建C ++包装。此外,通过普通的P / Invoke,您将大大简化部署(无需额外的dll)