从 C# 调用 C/C++ 代码
Invoke C/C++ code from C#
我通常使用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)
有人可以这么好心地为我指出正确的方向,解释什么是常量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
(这里的教程)而不是创建一个C++包装器。此外,通过普通的 P/调用,您将大大简化部署(不需要额外的 dll)
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值