gpt4 book ai didi

c# - 从 C# 调用 C/C++ 代码

转载 作者:行者123 更新时间:2023-11-30 04:22:44 24 4
gpt4 key购买 nike

我通常使用 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);

这是行不通的。谢谢!

最佳答案

您必须搜索包含e_struct_t 定义的头文件,包含在调用文件中,并使用该类型的变量传递给get_value;顺便说一下,如果你想从 C# 调用的目标方法是纯 C,你可能应该考虑更好地使用 P/Invoke ( a tutorial here ) 而不是直接创建 C++ 包装器。此外,通过简单的 P/Invoke,您将大大简化部署(不需要额外的 dll)

关于c# - 从 C# 调用 C/C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13629533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com