所以,这个问题有很多变种,看了几个还是想不通。
这是C代码:
typedef struct
{
unsigned long Identifier;
char Name[128];
} Frame;
Frame GetFrame(int index);
这是 C# 代码:
struct Frame
{
public ulong Identifier;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 128)]
public char[] Name;
}
[DllImport("XNETDB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern Frame GetFrame(int index);
这是我在 C# 中尝试的最后一次尝试,看起来很合乎逻辑,但我收到错误“方法的签名与 PInvoke 不兼容”。所以,我有点不知道下一步该尝试什么。任何帮助表示赞赏。
谢谢,凯文
更新 的凯文将此添加为我的答案的编辑
我应该改为更改我的 C 代码:
void GetFrame(int index, Frame * f);
并用于 C#:
struct Frame
{
public uint Identifier;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 128)]
public string Name;
}
[DllImport("XNETDB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern void GetFrame(int index, ref Frame f);