setmode again
Steven Schveighoffer
schveiguy at yahoo.com
Fri Aug 8 12:19:49 PDT 2008
"Brian Myers" wrote
> Ugh,
>
> By the rush to respond I'm getting so far, I'm guessing nobody does these
> kind of programs these days. Can't say I'm surprised, but I'm stuck
> working with legacy data.
>
> Anyway, for everyone's reference, the following python code works
> perfectly:
>
> import os, msvcrt
> import sys
>
> msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
> print "test line1\r\ntestline2"
>
> Brian Myers Wrote:
>
>> Hi all,
>>
>> Seems this gets revisited every so often on the forums, so I guess it's
>> time to visit it again...
>>
>> I need to set stdout to binary mode in Windows. I've tried the following:
>>
>> import std.string;
>> import std.stdio;
>> import std.c.windows.windows;
>>
>> extern (C)
>> alias int function(int,int) setmode_f;
>>
>> void main(char[][] args)
>> {
>> int O_BINARY = 0x8000;
>> setmode_f f;
>> HMODULE m = cast(HMODULE) LoadLibraryA(toStringz("msvcrt.dll"));
>> f = cast(setmode_f) GetProcAddress(m, toStringz("_setmode"));
>> f(fileno(stdout), O_BINARY);
>>
>> writef("test line1\r\ntestline2");
>> }
>>
>> and
>>
>> import std.string;
>> import std.stdio;
>>
>> extern (C)
>> alias int function(int,int) setmode_f;
>>
>> extern ( C ) int setmode(int,int);
>>
>> void main(char[][] args)
>> {
>> int O_BINARY = 0x8000;
>>
>> if (setmode(fileno(stdout) ,O_BINARY) < 0)
>> writefln("setmode failed.");
>> writef("test line1\r\ntest line2");
>> }
>>
>> No luck. Both compile and run without error, but Windows is still doing
>> LF->CRLF translation.
>>
>> I know I need a version statement for a cross platform compile, but this
>> is just example code.
>>
>> Brian
>>
>
Have you tried changing extern(C) to extern(Windows)?
-Steve
More information about the Digitalmars-d
mailing list