Using an uninitialized structure

Regan Heath regan at netmail.co.nz
Mon Sep 3 09:15:51 PDT 2007


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



More information about the Digitalmars-d mailing list