public struct Test_Struct_t
{
public byte var1;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public char[] str; // (1)
//public char[] str; // (2)
}
public class AP_DB_Cmd_Box : AP_DB_Common
{
// protected members
Test_Struct_t test_struct;
int length;
byte[] cmd_tmp;
IntPtr cmd_ptr;
public AP_DB_Cmd_Box() : base()
{
test_struct.str = new char[10]; // 꼭 해줘야한다. 안그럼 아래에서 에러
test_struct.var1 = 1;
test_struct.str[0] = '0';
test_struct.str[1] = '1';
length = Marshal.SizeOf(test_struct); // (1) 인 경우 11, (2)인 경우 8
cmd_ptr = Marshal.AllocHGlobal(length); // 포인터 생성
cmd_tmp = new byte[length]; // 바이트 배열 생성
Marshal.StructureToPtr(test_struct, cmd_ptr, true); // 구조체 -> 포인터
Marshal.Copy(cmd_ptr, cmd_tmp, 0, length); // 포인터 -> 바이트 배열로 복사
Marshal.FreeHGlobal(cmd_ptr); // 포인터 해제
}
'Programming > ASP .NET' 카테고리의 다른 글
MSSQL 2005에 필드 암호화 하기 (0) | 2007.02.20 |
---|---|
c#에서 타이머 사용하기 (0) | 2007.02.08 |
Master Page 사용하기 (0) | 2007.02.07 |
.net framework 2.x 를 깔았는데도 IIS의 웹서비스 확장 속성에 ASP .NET v2.x 가 나오지 않을 때!! (0) | 2007.02.01 |
c#에서 배열을 참조로 넘기기 (0) | 2007.01.23 |