我有一个包含以下功能的第三方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结构数组的编组并且您确定该问题包含答案,那么请一定要关闭它,更好。
答案 0 :(得分:1)
你应该把它作为一个简单的线性数组封送。我对C#比较熟悉,但在VB中我觉得它会像这样运行:
ByVal table() As myStruct
然后,您需要在.net代码中手动执行2D到1D索引转换。