C language > Expert questions
msvcrt.lib support
(1/1)
TimoVJL:
Is this correct way to get stderr to work ?
--- Code: ---#include <stdio.h>
#define MSVCRT
// msvcrt-supp.h
#ifdef MSVCRT
typedef struct FAKEFILE {
char fake[0x20];
} FAKEFILE;
__declspec(dllimport) extern FAKEFILE _iob[];
#undef stdin
#define stdin (FILE*)(&_iob[0])
#undef stdout
#define stdout (FILE*)(&_iob[1])
#undef stderr
#define stderr (FILE*)(&_iob[2])
#pragma lib "msvcrt.lib"
#endif
int main(int argc, char **argv)
{
int size = sizeof(FILE);
fprintf(stdout, "stdout\n");
fprintf(stderr, "stderr\n");
return 0;
}
--- End code ---
EDIT: for x64
--- Code: ---typedef struct FAKEFILE {
char *_ptrs[3];
int _ints[5];
} FILE;
--- End code ---
Vortex:
timovjl,
Your code works fine :
--- Code: ---#include <stdio.h>
#define MSVCRT
// msvcrt-supp.h
#ifdef MSVCRT
typedef struct FAKEFILE {
char fake[0x20];
} FAKEFILE;
__declspec(dllimport) extern FAKEFILE _iob[];
#undef stdin
#define stdin (FILE*)(&_iob[0])
#undef stdout
#define stdout (FILE*)(&_iob[1])
#undef stderr
#define stderr (FILE*)(&_iob[2])
#pragma lib "msvcrt.lib"
#endif
int main(int argc, char **argv)
{
int size = sizeof(FILE);
fprintf(stdout, "stdout = %X\n",stdout);
fprintf(stderr, "stderr = %X\n",stderr);
return 0;
--- End code ---
}
--- Code: ---stdout = 77C4FCA0
stderr = 77C4FCC0
--- End code ---
Navigation
[0] Message Index
Go to full version