string vs. w/char*

Steven Schveighoffer schveiguy at yahoo.com
Mon Feb 28 05:35:37 PST 2011


On Mon, 28 Feb 2011 08:30:02 -0500, Tyro[a.c.edwards] <nospam at home.com>  
wrote:

> On 2/28/2011 9:58 PM, Steven Schveighoffer wrote:
>> On Mon, 28 Feb 2011 07:34:39 -0500, Tyro[a.c.edwards] <nospam at home.com>
>> wrote:
>>
>>> The bellow code attempts to use LoadStringA() to initialize _buf.
>>> However, regardless of what form _buf takes, the body of the if
>>> statement is always executed. I've attempted to use every type of
>>> string available in D to include char* _buf[MAX_RESSTRING+1] and
>>> setting _buf[MAX_RESSTRING] = '\0'; What am I doing incorrectly?
>>> Any assistance is greatly appreciated.
>>>
>>> class ResString
>>> {
>>> enum { MAX_RESSTRING = 255 }
>>>
>>> alias getBuffer this;
>>> @property string getBuffer() { return _buf; }
>>>
>>> this(HINSTANCE hInst, int resId)
>>> {
>>> _buf.length = MAX_RESSTRING;
>>>
>>> SetLastError(0);
>>>
>>> if(!LoadStringA(hInst, resId, cast(char*)toStringz(_buf), _buf.length
>>> + 1))
>>> {
>>> throw new WinException("Load String failed");
>>> }
>>> }
>>>
>>> private:
>>> string _buf;
>>> }
>>
>> You should not be overwriting buf, it is immutable. You need to make a
>> new buffer each time.
>>
>> this(HINSTANCE hInst, int resId)
>> {
>>
>> auto mybuf = new char[MAX_RESSTRING];
>> auto nchars = LoadStringA(hInst, resId, mybuf.ptr, mybuf.length);
>> if(!nchars)
>> {
>> throw new WinException("Load String failed");
>> }
>> _buf = assumeUnique(mybuf[0..nchars]);
>>
>> SetLastError(0);
>> }
>>
>> If this isn't working, you might consider that the string you are trying
>> to load doesn't actually exist (that is a valid condition). What is the
>> error from GetLastError ?
>>
>> -Steve
>
> Both implementations results in error code 1812 being returned from  
> GetLastError. explanation of the code reads:
>
>       ERROR_RESOURCE_DATA_NOT_FOUND
>       1812 (0x714)
>       The specified image file did not contain a resource section.
>
> The code I'm porting initially consisted of a resource.h file, a  
> generic.rc file and two icons. I have not tried to include the icons and  
> generic.rc file in the compilation because I do not know how to as yet  
> and I've only used half of the resource.h file: didn't think I need the  
> whole thing. Could this be the reason for the error? If so could you  
> direct me to the explanation of how to prepare these files for inclusion  
> in the compilation process?
>

No clue, sorry.  I build D mostly on linux, on windows only when I have  
to.  Look on digitalmars.com for Windows programming.  Or try google.

-Steve


More information about the Digitalmars-d-learn mailing list