所以,这个问题有很多变体,在看了几个之后,我仍然无法理解。
这是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#中尝试的最后一次尝试,看起来非常合理,但是我得到错误消息"Method's signature is not PInvoke compatible“。所以,我有点不知道下一步该怎么做。任何帮助都是非常感谢的。
谢谢,凯文
更新了 Kevin在我的回答中添加了这个编辑
我应该改为更改我的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);
https://stackoverflow.com/questions/10320502
复制相似问题