编组结构数组的数组(2D结构数组)

时间:2015-08-10 13:13:37

标签: c# .net vb.net pinvoke marshalling

我有一个包含以下功能的第三方DLL:

SDK_API FunctionInQuestion(char* name, myStruct table[row][column]);

我很确定这个函数会修改myStruct表[row] [column]。

我需要从.net调用它,这是我尝试的方法(使用的语言是VB.NET,但是如果你知道如何在C#中做这不是问题,我很确定这些原则是一样的)

<System.Runtime.InteropServices.DllImportAttribute("dllinquestion.dll", EntryPoint:="FunctionInQuestion", CallingConvention:=Runtime.InteropServices.CallingConvention.Cdecl)> _
Public Shared Function FunctionInQuestion(ByVal name As System.Text.StringBuilder, ByRef table()() As myStruct) As Integer
End Function

myStruct C:

typedef struct
{
   unsigned short int x;  
   unsigned short int y;  
}myStruct;

myStruct .net:

<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential)> _
Public Structure myStruct
    Public x As UShort
    Public y As UShort
End Structure

我已经谷歌搜索/搜索Stackoverflow几个小时了,并尝试了所有的解决方案&#39;到目前为止,但我还没有能够使它发挥作用。如果你重定向/投票结束这个问题,请求你先看看另一个问题。如果它真的是2D结构数组的编组并且您确定该问题包含答案,那么请一定要关闭它,更好。

1 个答案:

答案 0 :(得分:1)

你应该把它作为一个简单的线性数组封送。我对C#比较熟悉,但在VB中我觉得它会像这样运行:

ByVal table() As myStruct

然后,您需要在.net代码中手动执行2D到1D索引转换。