Маршаллинг исправил Tchar [] в .netcompactFramework - PullRequest
1 голос
/ 30 марта 2011

Как можно маршалировать фиксированный Tchar [] в .Net compact Framework и in.net Framework

typedef  struct _VXN_REGISTRATION_RESPONSE
{
       char        DID [257]; 
       TCHAR       PrimarySDCURL [257];
       TCHAR       SecondarySDCURL [257];
} VXN_REGISTRATION_RESPONSE, *LPVXN_REGISTRATION_RESPONSE;

1 Ответ

0 голосов
/ 30 марта 2011

Я предполагаю, что TCHAR является широким. Если нет, то вы можете решить это, так как оно совпадает с полем char.

Структура хочет быть объявлена ​​так:

public struct LPRData
{
    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 257)]
    public byte[] DID;
    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 257)]
    public string PrimarySDCURL;
    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 257)]
    public string SecondarySDCURL;
}

Единственный сложный момент заключается в том, что компактный каркас не позволяет легко преобразовать Unicode в ANSI. Таким образом, чтобы назначить DID вам нужно:

string DID = ...;
LPRData data = new LPRData();
data.DID = DID.Encoding.ASCII.GetBytes(DID);
...