typedef struct _communicate_data
{
unsigned short m_type;
unsigned char m_response_result;
union{
struct request_set_integrity
{
char m_version[32];
char m_installed_path[256];
}REQUEST_INTEGRITY;
struct _request_update
{
char m_install_dir[MAX_PATH];
char m_unzip_dir[MAX_PATH];
}REQUEST_UPDATE;
struct response_dna
{
int m_len;
char m_dna[256];
}RESPONSE_DNA;
struct request_setinfo
{
int m_len;
char m_host[128];
char m_userid[64];
char m_deviceid[128];
}REQUEST_SETINFO;
char m_reason[256];
struct response_realtime
{
int m_type;
char m_path[256];
}RESPONSE_REALTIME;
struct response_status
{
char m_dna_status;
char m_realtime_status;
char m_policy_status;
char m_application_status;
char m_login_status;
char m_usb_status;
char m_sendlog_status;
char m_isolate_status;
char m_mode;
}RESPONSE_STATUS;
struct response_version
{
unsigned short m_major_version;
unsigned short m_minor_version;
unsigned short m_build_version;
unsigned short m_release_version;
}RESPONSE_VERSION;
char m_dbname[256];
char m_policyname[256];
struct request_set
{
DNA_PERFORMACE m_performace;
XSP_RUN_MODE m_mode;
}REQUEST_SET;
struct response_compare
{
UINT m_type;
char m_path[MAX_PATH];
}RESPONSE_COMP;
}data;
}COMMUNICATE_DATA;
C++에서 유니온 구조체가 있으므로이 구조체를 C# 코드로 변환해야합니다. 나는 2 일 동안 개종해야한다. [FieldOffset (0)] 속성을 올바르게 설정할 수 없습니다.C++ 유니온을 C# 구조체로 변환하는 방법
누구든지이 구조체를 공용체로 변환 할 수 있습니까? 감사합니다.
편집 이것은 C# 코드로 변환 한 것입니다. 그러나 잘못 추가 된 : 'ProjectName, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'어셈블리에서 'Common.dataunion'형식을로드 할 수 없습니다. 오프셋이 0 인 개체 필드가 잘못 정렬되어 있거나 비 - 개체 필드에 의해 중첩. "
public struct dataunion
{
[FieldOffset(0)]
public request_set_integrity REQUEST_INTEGRITY;
[FieldOffset(0)]
public _request_update REQUEST_UPDATE;
[FieldOffset(0)]
public response_dna RESPONSE_DNA;
[FieldOffset(0)]
public request_setinfo REQUEST_SETINFO;
[FieldOffset(0)]
public byte[] m_reason;
[FieldOffset(0)]
public response_realtime RESPONSE_REALTIME;
[FieldOffset(0)]
public response_status RESPONSE_STATUS;
[FieldOffset(0)]
public response_version RESPONSE_VERSION;
[FieldOffset(320)]
public byte[] m_dbname;
[FieldOffset(320)]
public byte[] m_policyname;
[FieldOffset(0)]
public request_set REQUEST_SET;
[FieldOffset(0)]
public response_compare RESPONSE_COMP;
}
[StructLayout(LayoutKind.Sequential)]
public struct comData
{
public ushort m_type;
public byte m_response_result;
public dataunion data;
}
코드에 'FieldOffset'이 (가) 없습니다. [MCVE] –
@KyleKhalaf를 제공하십시오. 일부 소스 코드로 업데이트 된 질문 – mamur