View mode: basic / threaded / horizontal-split · Log in · Help
September 03, 2007
Using an uninitialized structure
Hi.

I don't get it working. So I ask here.

There is the problem:

CHAR_INFO buffer[];
buffer.length = 100;
foreach( inout CHAR_INFO ci; buffer ) { ci.Char.AsciiChar = ' '; ci.Attributes=7; }

If I try to compile this (even without the foreach) I get a linker error. The Linker can't find the __INIT symbol of the CHAR_INFO structure.

Well, sure - there IS NO __init symbol - But I don't WANT to init it somehow else.

I can't get it working :((

Thanks in advance for every help :)
September 03, 2007
Re: Using an uninitialized structure
B.Schulte wrote:
> CHAR_INFO buffer[];

Tried "CHAR_INFO[] buffer;" ?

Regards, Frank
September 03, 2007
Re: Using an uninitialized structure
B.Schulte wrote:
> Hi.
> 
> I don't get it working. So I ask here.
> 
> There is the problem:
> 
> CHAR_INFO buffer[];
> buffer.length = 100;
> foreach( inout CHAR_INFO ci; buffer ) { ci.Char.AsciiChar = ' '; ci.Attributes=7; }
> 
> If I try to compile this (even without the foreach) I get a linker error. The Linker can't find the __INIT symbol of the CHAR_INFO structure.
> 
> Well, sure - there IS NO __init symbol - But I don't WANT to init it somehow else.
> 
> I can't get it working :((
> 
> Thanks in advance for every help :)

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
September 03, 2007
Re: Using an uninitialized structure
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 :(


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
September 03, 2007
Re: Using an uninitialized structure
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
September 03, 2007
Re: Using an uninitialized structure
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 :(
> 

I've found win32.wincon here:
http://www.dsource.org/projects/bindings/browser/trunk/win32/wincon.d

Is that the one you used?

I think you had better post your entire source file and the command line 
you are using to compile.

Regan
September 03, 2007
Re: Using an uninitialized structure
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
September 03, 2007
Re: Using an uninitialized structure
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
September 03, 2007
Re: Using an uninitialized structure
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]
September 03, 2007
Re: Using an uninitialized structure
B.Schulte wrote:
> Hi.
> 
> I don't get it working. So I ask here.
> 
> There is the problem:
> 
> CHAR_INFO buffer[];
> buffer.length = 100;
> foreach( inout CHAR_INFO ci; buffer ) { ci.Char.AsciiChar = ' '; ci.Attributes=7; }

Unfortunately, I don't think there's a way to use the "=void" when 
initializing arrays.


Sean
« First   ‹ Prev
1 2
Top | Discussion index | About this forum | D home