Using an uninitialized structure

B. Schulte Aldoric at gmx.de
Mon Sep 3 09:58:59 PDT 2007


Regan Heath Wrote:

> B. Schulte wrote:
> > Regan Heath Wrote:
> > 
> >> B. Schulte wrote:
> >>> Regan Heath Wrote:
> >>>
> >>>> Where is the definition of the CHAR_INFO structure?  Have you defined it 
> >>>> in your code? eg.
> >>>>
> >>>> import std.c.windows.windows;
> >>>>
> >>>> extern(C)
> >>>> {
> >>>> 	struct CHAR_INFO {
> >>>> 	    union _Char {
> >>>> 		WCHAR UnicodeChar;
> >>>> 		CHAR   AsciiChar;
> >>>> 	    }
> >>>> 	    _Char Char;
> >>>> 	    WORD Attributes;
> >>>> 	}
> >>>> 	alias CHAR_INFO* PCHAR_INFO;
> >>>> }
> >>>>
> >>>> void main()
> >>>> {
> >>>> 	CHAR_INFO buffer[];
> >>>> 	buffer.length = 100;
> >>>> 	foreach( inout CHAR_INFO ci; buffer ) { ci.Char.AsciiChar = ' '; 
> >>>> ci.Attributes=7; }
> >>>> }
> >>>>
> >>>> Regan
> >>> Well, the CHAR_INFO structure is stored in the win32.wincon file. There was something I took from dsource to use the winAPI methods. 
> >>>
> >>> I didn't want to write in orginal files to fix a problem. I thought about fixing the problem somewhere else. (Don't modify the wincon.d)
> >>>
> >>> However, it still doesn't work.
> >>> Error 42: Symbol Undefined _D5win326wincon9CHAR_INFO6__initZ
> >>>
> >>>
> >>> There must be some way to use uninitialized variables :(
> >> There is, but I don't believe it has anything to do with the error 
> >> you're getting. :)
> >>
> >> You are missing a symbol, the symbol you are missing is mangled in such 
> >> a way that it is clear that it is a D symbol, which means you have 
> >> defined CHAR_INFO as a D struct, instead of using extern (C) as I have 
> >> shown you above.
> >>
> >> What dsource project is win32.wincon in?  Perhaps CHAR_INFO isn't 
> >> declared as extern (C) in there...
> >>
> >> FYI, you can allocate an array of CHAR_INFO structures without 
> >> initialising like this:
> >>
> >> CHAR_INFO[500] abuffer = void;
> >>
> >> this is a fixed length array however, perhaps not what you want?
> >>
> >>
> >> Regan
> > 
> > Well, it really wasn't declared as extern(C). But I inserted it and declared it as extern(C). Don't know why, but it still don't work.
> > 
> > Here is the dsource project:
> > http://dsource.org/projects/core32
> 
> I can't see the win32.wincon file in the svn for that project:
> http://dsource.org/projects/core32/browser/trunk/core32/win32
> 
> I retract my comment about extern (C) I think maybe this has something 
> to do with how you're compiling it, the command line you're using.
> 
> Regan

Sorry, I was wrong. Here is the official Project page:
http://www.prowiki.org/wiki4d/wiki.cgi?WindowsAPI

However, here is my command line:

compiling:
dmd [files] -c -O -op -D -debug -version=WindowsXP

linking:
dmd [files] 





More information about the Digitalmars-d mailing list