Thanks, but none of them worked :(

Seems like the type needs to be String, otherwise the deskband won't show
the 'Show title' option on the context-menu you get when right-clicking the
deskband.

Andreas Häber

----- Original Message -----
From: "Dumitru Sbenghe" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, May 20, 2002 3:32 PM
Subject: Re: [DOTNET] How to marshal WChar[256] in COM interop?


> Is clear why your struct definition is not good; a LPWStr is a pointer to
> wchar_t which have 4 bytes in the struct;
> Your WCHAR wszTitle[256] have 512 bytes in the struct, so you will make a
> mess in the struct marshaling;
>
> I guess this field definition will work without problems
>
> [MarshalAs(UnmanagedType.ByValArray, SizeConst=256)]
> public byte[] wszTitle;
>
> or
>
> [MarshalAs(UnmanagedType.ByValArray, SizeConst=256)]
> public char[] wszTitle;
>
> Dumitru Sbenghe
> http://www.dsbenghe.home.ro/
>
> > Hey,
> > I'm having problems getting my DeskBand shell extension display it's
name
> > properly. This is happening in the IDeskBand::GetBandInfo method.
> >
> > It seems like the error is when marshalling the string.
> >
> > The DESKBANDINFO structure which is used to have this information
> > is defined
> > in ShObjIdl.idl as:
> > typedef struct {
> >     DWORD dwMask;
> >     POINTL ptMinSize;
> >     POINTL ptMaxSize;
> >     POINTL ptIntegral;
> >     POINTL ptActual;
> >     WCHAR wszTitle[256];
> >     DWORD dwModeFlags;
> >     COLORREF crBkgnd;
> > } DESKBANDINFO;
> >
> > This would've been simple if it was LPWSTR lpszTitle; or something like
> > that, but I can't get that WCHAR correct.
> >
> > This is how I've defined the same structure in my code, using C#:
> > [StructLayout (LayoutKind.Sequential, CharSet=CharSet.Unicode)]
> > public struct DeskBandInfo
> > {
> >     public Int32 dwMask;
> >     public POINTL ptMinSize;
> >     public POINTL ptMaxSize;
> >     public POINTL ptIntegral;
> >     public POINTL ptActual;
> >     [MarshalAs(UnmanagedType.LPWStr, SizeConst=256)] public
> > String wszTitle;
> >     public Int32 dwModeFlags;
> >     public Int32 crBkgnd;
> > }
> >
> > POINTL is a structure I've defined too, but that's not important
> > right now.
> > I've also tried using an array of Char as the wszTitle, but the shell
> > doesn't like that very much :( and won't even call my
> > IDeskBand::GetBandInfo
> > method...
> >
> > So.. does anybody see what I'm doing wrong here? Right now I only get to
> > small rectangles as the title of my deskband, which isn't correct.
> >
> > Andreas Häber
> >
> > You can read messages from the DOTNET archive, unsubscribe from DOTNET,
or
> > subscribe to other DevelopMentor lists at http://discuss.develop.com.
>
> You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
> subscribe to other DevelopMentor lists at http://discuss.develop.com.
>
>
>

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to