c# - C dll向C#返回多个变量

标签 c# c dll return-type

我有一个用 C 编写的 dll,它被导入到 C# 应用程序中。我需要从 dll 中读取一些硬件设备的值,实际读取过程由 C dll 中的函数完成。 现在我想用这个函数读出所有值,并以快速简单的方式将它们返回给 C#。 它是一个非常“通用”的多平台 C 库,由一些函数组成,用于处理与所述硬件设备的通信。我正在寻找不必特定于我的案例的通用“C 到 C#”答案。

我在 C 和 C# 方面不是很有经验,这使得任务相当复杂(我无法选择语言)。 在 C 中执行此操作的明智方法是什么?如何在 C 中声明它以及如何在 C# 中正确导入它?

这里有一些伪代码可以让我的问题更清楚一些。那不是有效的代码,但应该弄清楚我在做什么 C:

int [] read(){

int results [3];

results[0] = getPosition();
results[1] = getOrientation();
results[2] = getTouch();

return results;
}

C#

[DllImport("myDll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int[] read();

int [] cReturn = new int[3];
cReturn = read();

我尝试返回一个 int 数组并在 C# 中编码(marshal)它,因为我所有的值都是 int 类型,但返回数组似乎不是你在 C 中会做的事情。

我找到了很多 C++ 的示例,但没有一个适用于 C,因为它们使用了 C++ 特定的函数。

最佳答案

您可以让您的 C API 将值设置为作为参数传递的指针,即:

void your_c_function(int* value1, int* value2)
{
    *value1 = 42;
    *value2 = 43;
}

然后您可以通过 ref 进行 PInvoke:

[DllImport("your_dll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int your_c_function(ref int value1, ref int value2);

请注意,如果要设置的值很多,您还可以在 C 中定义一个 struct,并通过指针传递整个结构。但是,这将需要在托管端重新创建结构定义。

关于c# - C dll向C#返回多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22001898/

相关文章:

c# - 数据绑定(bind)动态数据

c# - P/在 C# 中从 C++ dll 调用 DLL 函数

c++ - 请求关于 dll 编程的好教程

c++ - C++ 2013 中的 Dll 需要将字符串返回给 VB.net

c# - 是否可以使用 .Net 注册 PreShutdown 服务事件?

c# - 如何在 .NET Core 和 .NET Framework 应用程序之间干净地发送数据,并使用 Json.NET 进行序列化?

c++ - 从 HFONT 创建修改后的 HFONT

c - 垂直冗余检查中的段错误

c - 对于超过 10 位的小数,这个程序不能正常工作?

c# - 如何在显示更用户友好的值的同时将实际的基础 DB 值存储在组合框中?