[Flac-dev] FLAC C API / Visual Studio 2008 FILE* Issue
Ben Allison
benski at winamp.com
Tue Jan 5 15:15:25 PST 2010
Ivailo -
FILE objects are internal to the C runtime library, they are not system
objects like HANDLEs (windows) or file descriptors (unix). This means
that if libFLAC has linked against a different C runtime library than your
application, then the two FILE objects are incompatible. This isn't just
a Windows specific issue either - if libFLAC was compiled against libc and
your application links to glibc (or even a different version of libc) you
will experience the same issue. In my opinion, this function should have
never been in the API in the first place. A function that accepts a
HANDLE on Windows or an int (file descriptor) on Unix is more appropriate.
-Ben Allison
> I managed to get around it. I used the stream functions and provided my
> own
> callbacks for reading and writing. What's strange is that what I've done
> is
> just copied the contents of read/write/seek/tell/eof callbacks from the
> sources to my application and it works just fine, no glitches. When I use
> the build-in implementation, it just crashes without any reason. It's not
> a
> problem to stick with my own callbacks for reading, but fixing this issue
> (if it's not just me) would be nice.
>
> On Wed, Jan 6, 2010 at 12:38 AM, Erik de Castro Lopo
> <mle+la at mega-nerd.com<mle%2Bla at mega-nerd.com>
>> wrote:
>
>> Ivailo Karamanolev wrote:
>>
>> > I am currently learning the FLAC C API and had the code working with
>> > FLAC__stream_decoder_init_file. However, since I'd need the Unicode
>> filename
>> > support, I tried _wfopen_s in combination with
>> > FLAC__stream_decoder_init_FILE, however I get a runtime crash as sonn
>> as
>> I
>> > call FLAC__stream_decoder_process_until_end_of_stream. The same code
>> > (partially taken from the examples) is working perfectly with the
>> function
>> > accepting filename and crashing with the one accepting FILE*. I have
>> tried
>> > both compiling the library myself and using the precompiled
>> > flac-1.2.1-devel-win. Can someone try if it is working for him (the
>> FILE*)
>> > version and if yes - send back the source code?
>> > I work in Windows 7 64bit, but I tried that also on a virtual Windows
>> XP
>> and
>> > it crashes there also.
>>
>> There is a whole bunch of weird stuff in windows, this is just another
>> instance.
>>
>> If what you want to do is read/write FLAC files with windows UCS-16
>> filenames,
>> one option is to use libsndfile:
>>
>> http://www.mega-nerd.com/libsndfile/
>>
>> which with version 1.0.21 has added this function:
>>
>> /* The function sf_wchar_open() is Windows Only!
>> ** Open a file passing in a Windows Unicode filename. Otherwise, this
>> is
>> ** the same as sf_open().
>> **
>> ** In order for this to work, you need to do the following:
>> **
>> ** #include <windows.h>
>> ** #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
>> ** #including <sndfile.h>
>> */
>> #if ENABLE_SNDFILE_WINDOWS_PROTOTYPES
>> SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ;
>> #endif
>>
>> There is a windows binary installer in the main web page (one for each
>> of
>> 32 and 64 bit windows).
>>
>> The only downside to this is that libsndfile does not expose the all of
>> the features of the FLAC API to the user.
>>
>> Erik
>> --
>> ----------------------------------------------------------------------
>> Erik de Castro Lopo
>> http://www.mega-nerd.com/
>> _______________________________________________
>> Flac-dev mailing list
>> Flac-dev at xiph.org
>> http://lists.xiph.org/mailman/listinfo/flac-dev
>>
> _______________________________________________
> Flac-dev mailing list
> Flac-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/flac-dev
>
More information about the Flac-dev
mailing list