|
分類:[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)) { ←ここで前述のエラーが出てしまいます。
どなたかご教授お願いします。
|