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
Top | Discussion index | About this forum | D home