【发布时间】:2014-02-25 08:34:17
【问题描述】:
我有一个用 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# 中对其进行编组,因为我的所有值都是 int 类型,但似乎返回数组不是您在 C 中会做的事情。
我找到了很多 C++ 示例,但没有一个使用 C,因为它们使用了 C++ 特定的函数。
【问题讨论】:
-
你的问题太笼统了。我认为您将需要发布一些代码。 C DLL 中方法的签名将是一个好的开始。
-
声明一个结构并通过引用传递它。像 int Foo(struct info* retval)
-
目前无法访问我的代码。我稍后会尝试添加它。虽然我想要一个一般性的答案,因为我经常遇到这个问题,并且总是回过头来为每个变量使用一个函数,这有点傻。
-
“C dll”可以承载不同类型的代码,在尝试从 C# 调用它之前,了解您拥有的类型非常重要。 DLL 可以是 COM(组件对象模型)DLL,也可以是简单的编译函数库。请参阅这篇文章以帮助您确定您正在使用什么 - stackoverflow.com/questions/1420726/…
-
是前者。我将添加该信息。
标签: c# c dll return-type