【发布时间】:2012-11-29 15:51:59
【问题描述】:
我通常使用 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);
这不起作用。谢谢!
【问题讨论】:
-
如果你为你的 C++ 类使用 C++/CLI 包装器,你会省去很多麻烦
-
他是。 (实际上,像这样的简单调用使用 P/Invoke 可能会更容易。)
标签: c# c++ .net visual-c++ c++-cli