C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 21 を表示中)
■9091 / )  C#からVC6DLLに構造体のchar[]を渡す
□投稿者/ techno (1回)-(2007/10/18(Thu) 16:39:04)

分類:[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)) { ←ここで前述のエラーが出てしまいます。


どなたかご教授お願いします。

返信 編集キー/


管理者用

- Child Tree -