我有一个来自此VB.net的功能,需要将其导入C#。 我已经尝试过各种VB.NET到C#的转换器,但是它不能与与此功能相关联的导入dll正常工作。 任何人都知道如何将以下VB函数正确转换为C#:
<DllImport("E5KDAQ.dll")> _
Public Function E5K_ReadDIStatus(ByVal id As Short,<[In](),Out()> ByRef chnval As Integer) As Short
End Function
使用在线转换器,它提供以下内容: 转换有错误的C#
[DllImport("E5KDAQ.dll")]
public static extern short E5K_ReadDIStatus(short id, [In()] out int chnval);
答案 0 :(得分:2)
在这里的官方文档中:http://www.acceed.de/manuals/inlog/EDAM5000_Manual.pdf有一个C ++定义,还有一些关于第二个参数是什么的文档,这实际上是您要查看的内容:
VC ++ :(请参阅E5KDAQ.h)
unsigned short E5K_ReadDIStatus (int id, unsigned long *Didata);
参数:
id:模块ID地址
Didata:指向32位缓冲区以存储DI状态
因此C#定义应该简单地是(C ++中的long
和int
是32位)
[DllImport("E5KDAQ")]
static extern ushort E5K_ReadDIStatus(int id, ref uint Didata)
答案 1 :(得分:0)
您可以使用它。
public static extern short E5K_ReadDIStatus(short id, ref int[] chnval)
参考:Are P/Invoke [In, Out] attributes optional for marshaling arrays?