2011-03-14 6 views
0

문제가 있습니다. 이것은 C 구조체의 정의입니다.참조 유형/배열을 포함하는 구조체를 마샬링

typedef struct _UNIMDM_CHG_DEVCFG { 
    DWORD dwCommand; 
    LPCWSTR lpszDeviceClass; 
    LPVARSTRING lpDeviceConfig; 
    DWORD dwOption; 
    DWORD dwValue; 
} UNIMDM_CHG_DEVCFG; 

Windows CE에서 .NET Compact Framework 3.5를 사용합니다. 내가 예를 들어,이 구조를 마샬링하는 방법에는 여러 가지 시도 :

[StructLayout(LayoutKind.Sequential)] 
internal struct UnimodemChangeDeviceConfiguration 
{ 
    public int dwCommand; 

    public byte[] lpszDeviceClass; 

    public byte[] lpDeviceConfig; 

    public int dwOption; 

    public int dwValue; 
} 

이 구조의 인스턴스에 Marshal.SizeOf를 호출 할 때 문제를, 그것에서 NotSupportedException이 발생합니다. 왜? lpszDeviceClass에 문자열을 사용했지만 문제가 다시 발생했습니다. 포인터 유형을 마샬링 할 수없는 것 같습니다.

답변

0

CF 마샬 러가 처리 할 수 ​​없습니다. struct에 데이터에 대한 포인터가 들어있어 바이트 []를 보내려고하면 데이터 자체를 고정 할 수 없습니다.

저는 첫 번째 (LPCWSTR)가 String 또는 StringBuilder (데이터가 들어오고 나가는 지에 따라 다름)로 전송 될 수 있다고 생각합니다.

LPVARSTRING은 더 복잡합니다. OpenNETCF TAPI library을 보셨습니까? structs.cs에는 VarString의 구현이 있습니다.이 구조체는 아마도 해당 구조체에서 인턴 트할 수 있습니다.

+0

나는 그것을 살펴 봤지만 그 클래스는 올바르게 쓰여지지 않았다. 나는 자기 자신을 썼다. 문제는 다른 구현에서 LPVARSTRING이 함수에 직접 전달된다는 것입니다 (구조의 일부가 아님). – Bogi

관련 문제