Using an uninitialized structure

Regan Heath regan at netmail.co.nz
Mon Sep 3 09:41:02 PDT 2007


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



More information about the Digitalmars-d mailing list