| 
                 分類:[C#] 
  はじめまして、よろしくお願いします。 最近.NETはじめました。
  VS2005のC#から、VC6で作成したDLLのAPI関数を呼ぶとき 「型 'stTest' のフィールド 'a' をマーシャリングできません:  無効なマネージ/アンマネージ型の組み合わせです。chars は I1、I2、U1、または U2  と組で使用してください。」 というエラーが出てしまいます。 MSDN等を参照しましたが、下のソースのどこが間違いなのかわからず困っています。
  stTestという構造体は、DLL呼び出し後にC#側でデータをとる必要があります。
  VC6DLL--------------------------
  #pragma pack (4) struct _stTest {     char a[1024];     int b;     char c[1024]; }; typedef struct _stTest stTest; #pragma pack ()
  int WINAPI test(long x, stTest *y);
 
  VS2005C#--------------------------
  [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)] public class stTest {     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]     public char a;     public int b;     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]     public char c; }
  [DllImport("test.dll")] public static extern int test(int x, [Out] stTest y);
  //呼び出し int x = 1; stTest y = new stTest();
  if (0 < test(x, y)) { ←ここで前述のエラーが出てしまいます。
 
  どなたかご教授お願いします。
 
  |