C#アプリによって呼び出されているC DLLがあり、pinvokeを使用してデータを交換しています。以下では、intと2つのchar配列で構成される単純なクラスがあります。C#はDLLを正しく呼び出し(「getStreamGroup」を使用)、DLLは渡されたstreamGroup構造体に正しいデータを入力します。
ただし、C関数が実行され、C#側に戻ると、渡されて正しいデータで埋められたstreamGroupは不毛になります。3つのnull値です。VS2010からのエラー/警告はありません。これは64ビットアプリです。何か案は?
#define STREAM_COUNT 9000
typedef struct s_streamGroup
{
int systemDefinedGroup;
char name[BUFFER_SIZE_128];
char streamList[STREAM_COUNT];
} streamGroup;
public class streamGroup
{
public int systemDefinedGroup;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = constants.BUFFER_SIZE_128)]
public byte[] name;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = constants.STREAM_COUNT)]
public byte[] streamList;
}
DLL int getStreamGroup( int groupIndex, streamGroup *RequestedStreamGroup)
{
*RequestedStreamGroup = Environment.StreamGroup[groupIndex];
return(DLL_NO_ERROR);
}
[DllImport(constants.DLL_PATH, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int getStreamGroup([In] int groupIndex, [In, Out] streamGroup group);