Thread overview | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to B.Schulte | B.Schulte wrote:
> CHAR_INFO buffer[];
Tried "CHAR_INFO[] buffer;" ?
Regards, Frank
|
September 03, 2007 Re: Using an uninitialized structure | ||||
---|---|---|---|---|
| ||||
Posted in reply to B.Schulte | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Regan Heath | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to B. Schulte | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to B. Schulte | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Regan Heath | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to B. Schulte | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Regan Heath | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to B.Schulte | 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
|
Copyright © 1999-2021 by the D Language Foundation