したがって、この質問には多くのバリエーションがあり、いくつかを見た後でもまだ理解できません。
これは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);