C#でCで書かれたDLLを呼ぶ際の構造体の宣言について
お世話になります。
今、Cで作成されたとあるDLLをC#から利用できるようにしたいと思っているのですが、DLLの関数を呼ぶ際の構造体の作成で困っています。
なお、DLLの文字コードはUnicodeです。
C言語のヘッダファイルで、構造体の部分を見ると、1つだけTCHARが指定されており、後はcharが指定されている状態です。
また、TCHARの部分のサイズは256バイト、CHARの部分のサイズは512バイトで宣言されています。
下記にCのヘッダファイルの抜粋を記載します。
#define STR_MAX_LENGTH 512
#ifdef _UNICODE
#define FILENAME_MAX_LENGTH 256
#else
#define FILENAME_MAX_LENGTH 512
#endif
typedef struct {
TCHAR name[FILENAME_MAX_LENGTH];
char error[STR_MAX_LENGTH];
} FILE_INFO;
このような構造体をC#で再現するにはどうしたらよいのでしょうか。
ちなみに、下記が現在私が作成した構造体の部分の抜粋になりますが、これだとうまく結果が入らないようです。
public const int FILENAME_MAX_LENGTH = 256;
public const int STR_MAX_LENGTH = 512;
[StructLayout(LayoutKind.Sequential, Pack=4)]
public struct FileInfo{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = FILENAME_MAX_LENGTH)]
public string Name;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = STR_MAX_LENGTH)]
public string Error;
なお、DLLの呼び出し部分ではCharSetにUnicodeを指定しております。
上記のような場合で、構造体をうまく作成する方法はないでしょうか。
何かアドバイス等があれば、教えていただけると幸いです。
よろしくお願いいたします。