Jump to page: 1 2
Thread overview
Using an uninitialized structure
Sep 03, 2007
B.Schulte
Sep 03, 2007
0ffh
Sep 03, 2007
Regan Heath
Sep 03, 2007
B. Schulte
Sep 03, 2007
Regan Heath
Sep 03, 2007
B. Schulte
Sep 03, 2007
Regan Heath
Sep 03, 2007
B. Schulte
Sep 03, 2007
Regan Heath
Sep 03, 2007
Regan Heath
Sep 03, 2007
Sean Kelly
Sep 03, 2007
Walter Bright
September 03, 2007
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
B.Schulte wrote:
> CHAR_INFO buffer[];

Tried "CHAR_INFO[] buffer;" ?

Regards, Frank
September 03, 2007
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
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
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
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
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
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
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
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