[Qt-interest] MinGW and msvcr90.dll under Windows

Constantin Makshin cmakshin at gmail.com
Sat Nov 27 14:03:14 CET 2010


Since this is a Qt-related mailing list, why not use QFile::pos() and
QFile::seek() functions that work with 64-bit file offsets and are
always the same no matter what platform and compiler you use?

On Sat, Nov 27, 2010 at 1:33 AM, Bob Babcock <wssddc at nospam.gis.net> wrote:
> I need to use (under Windows XP) _fseeki64 and _ftelli64 to
> handle files larger than 2GB.  If I build with VC++ 2008 Express,
> my code works without doing anything special.
>
> With MinGW, it's more complicated and goes horribly wrong.  In
> stdio.h, the needed functions are only defined if
> __MSVCRT_VERSION__ >= 0x800.  I define it everywhere as 0x900 and
> get an unable to load msvcr90.dll error at runtime.  This is one
> of Microsoft's side-by-side DLLs, which means I need a manifest.
> So, I extract a specs file from gcc and make an additional specs
> file for msvcr90, following instructions at
> http://www.mingw.org/wiki/SpecsFileHOWTO.  Manifest files I
> borrow from the VC++ build.
>
> Now the problems: my debug build with MinGW needs to have both
> msvcr90.dll and msvcr90d.dll in the manifest.  This seems wrong,
> and I saw a comment somewhere indicating that problems arise if
> memory is allocated in a debug dll and freed in non-debug.  Sure
> enough, I get "Invalid Address specified to RtlFreeHeap" as I
> single-step over a clearContents call for a tableWidget.  A non-debug
> build gets the same error, so it isn't just mixing DLLs.  I see this
> in a simple test program that does nothing more than
>  ui->tableWidget->setItem(0, 0, new QTableWidgetItem("foo"));
>  ui->tableWidget->clearContents();
> Code using _fseeki64 and _ftelli64 is never executed in these tests.
> Qt is version 4.71.
>
> Am I doing the right things to get _fseeki64 into my code?
> Have I hit a bug, and if so, is it in Qt, MinGW or Windows?
> Any suggestions?




More information about the Qt-interest-old mailing list