[vlc-devel] [PATCH] npapi: Changed files to be compilable by VC.

Rafaël Carré funman at videolan.org
Mon Nov 21 07:26:01 CET 2011

Le Mon, 21 Nov 2011 12:37:11 +0700,
Sergey Radionov <rsatom at gmail.com> a écrit :

> 21.11.2011 10:42, Rafaël Carré пишет:
> > Le Mon, 21 Nov 2011 10:03:39 +0700,
> > Sergey Radionov<rsatom at gmail.com>  a écrit :
> >
> >> btw, I think macros HAVE_CONFIG_H not needed anymore, at least to me...
> >
> > Yes it was never needed.
> > config.h is always present in the source.
> >
> > We use it in VLC because files can be built outside of VLC build dir.
> >
> > Some questions:
> >
> > - Can you comment on npolibvlc.cpp change?
> +#ifdef _MSC_VER
> +const NPUTF8 * const LibvlcDeinterlaceNPObject::propertyNames[] = {
> +    ""
> +};
> +const int LibvlcDeinterlaceNPObject::propertyCount=0;
> +#else
>   const NPUTF8 * const LibvlcDeinterlaceNPObject::propertyNames[] = {
>   };
>   enum LibvlcDeinterlaceNPObjectPropertyIds {
>   };
>   COUNTNAMES(LibvlcDeinterlaceNPObject,propertyCount,propertyNames);
> +#endif //_MSC_VER
> problem is that VC not able create zero length arrays.
> so we need create array with some dummy item (it can be any string, including zero lengh string, or 
> simply NULL, it does not matter), but propertyCount set to 0, to satisfy original logic.
> anticipating you next question, I say  that we must define propertyNames and propertyCount, as 
> LibvlcDeinterlaceNPObject used in templates that need it.

Ok, if a dummy array works, we might as well use it in all cases to avoid #ifdef hell
Just add a comment saying why we do that.
e.g. // MSVC++ doesn't support zero length arrays, as of version XXXX

> > - mingw-w64 also includes npapi.h (I guess mingw32 is just broken), but
> > gcc fetches npapi.h from the correct path if we give it with -I
> In visual studio (at least in VS2008 and early), paths to libs usially not defined directly in 
> solution, but it defines in IDE. But IDE already have path to Windows SDK in the first place, so 
> SDK's npapi.h founded first. But we can't move gecko sdk to first place in IDE, as then we can broke 
> compilation of other projects than include npapi.h from Windows SDK.
> So we need include some header with unique name, that include npapi.h by self.

Ha I see npfunctions has a #include "" and not <>

Same than above, just use npfunctions everywhere with
// Include npfunctions to avoid including Windows' own npapi.h

> > - why do you need config.h at all? It only contains the const or not
> > const prefix for the function which recently changed prototype.
> In VS solution I make substitution of original config.h by my own config.h, which now is:

Hm right you had explained that already sorry.

You could add -Dsnprintf=_snprintf and likes to the VC project but if we need more config 
options it will soon get very long so I am not sure what's the best to do.

> //config.h begin
> #pragma once
> #define snprintf _snprintf
> #define strcasecmp _stricmp
> /* Wether NPP_GetMIMEDescription returns const */
> #define NPP_GET_MIME_CONST const
> //config.h end

Rafaël Carré

More information about the vlc-devel mailing list