Codejock Forums Homepage
Forum Home Forum Home > Codejock Products > Visual C++ MFC > Toolkit Pro
  New Posts New Posts RSS Feed - Empty PX_String - strange behaviour on load
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

Empty PX_String - strange behaviour on load

 Post Reply Post Reply
Author
Message
mgampi View Drop Down
Senior Member
Senior Member
Avatar

Joined: 14 July 2003
Status: Offline
Points: 1206
Post Options Post Options   Thanks (0) Thanks(0)   Quote mgampi Quote  Post ReplyReply Direct Link To This Post Topic: Empty PX_String - strange behaviour on load
    Posted: 01 August 2008 at 5:47am
Hi;

I'm using Toolkit 12.0.1 and CXTPPropExchangeXMLNode to store/load settings into/from XML files.
When calling PX_String to store empty CString values (GetLength() returns 0) and afterwards calling PX_String to load the empty string from the XML file, I get a string with three newline ASCII code 10 characters in it!

Is this a BUG or do I miss something?
Martin

Product: Xtreme Toolkit v 22.1.0, new Projects v 24.0.0
Platform: Windows 10 v 22H2 (64bit)
Language: VC++ 2022
Back to Top
Oleg View Drop Down
Senior Member
Senior Member


Joined: 21 May 2003
Location: United States
Status: Offline
Points: 11234
Post Options Post Options   Thanks (0) Thanks(0)   Quote Oleg Quote  Post ReplyReply Direct Link To This Post Posted: 03 August 2008 at 4:16am

Hi,

Show code lines
Oleg, Support Team
CODEJOCK SOFTWARE SOLUTIONS
Back to Top
mgampi View Drop Down
Senior Member
Senior Member
Avatar

Joined: 14 July 2003
Status: Offline
Points: 1206
Post Options Post Options   Thanks (0) Thanks(0)   Quote mgampi Quote  Post ReplyReply Direct Link To This Post Posted: 07 August 2008 at 5:29pm
Hi Oleg;

Here is my code to store the settings into the XML file:

bool StoreEventConfigSettings(struct _EventConfigOptions& gSettings, DWORD& dwError) {
    TCHAR pszPath[MAX_PATH];
    if (SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, pszPath)==S_OK) {
        _tcscat(pszPath, _T("\\XRangeEye EventConfig 1.5"));

        CXTPPropExchangeXMLNode px(FALSE, 0, _T("EventConfigSettings"));
        px.SetCompactMode(FALSE);

        if (px.OnBeforeExchange()) {
            VERIFY(PX_String(&px, _T("DBConnect"), gSettings.EventConfigGeneralOptions.strService));
           
            CXTPPropExchangeSection pxSubNode1(px.GetSection(_T("Service")));
            VERIFY(PX_String(&pxSubNode1, _T("User"),    gSettings.EventConfigServiceOptions.strUser));
            VERIFY(PX_Blob(&pxSubNode1, _T("Security"), gSettings.EventConfigServiceOptions.lpPassword, gSettings.EventConfigServiceOptions.dwLen));
            VERIFY(PX_String(&pxSubNode1, _T("Domain"),    gSettings.EventConfigServiceOptions.strDomain));

            _tcscat(pszPath, _T("\\Options.xml"));
            return (px.SaveToFile(pszPath)==S_OK)
        }
    }
    return false;
}


And here is the counterpart...

bool LoadEventConfigSettings(struct _EventConfigOptions& gSettings)
{
    TCHAR pszPath[MAX_PATH];
    if (SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, pszPath)==S_OK)
    {
        _tcscat(pszPath, _T("\\XRangeEye EventConfig 1.5\\Options.xml"));

        CXTPPropExchangeXMLNode px(TRUE, 0, _T("EventConfigSettings"));
        if (px.LoadFromFile(pszPath))
        {
            VERIFY(PX_String(&px, _T("DBConnect"),    gSettings.EventConfigGeneralOptions.strService));

            CXTPPropExchangeSection pxSubNode1(px.GetSection(_T("Service")));
            VERIFY(PX_String(&pxSubNode1, _T("User"),        gSettings.EventConfigServiceOptions.strUser));
            if (gSettings.EventConfigServiceOptions.lpPassword!=0) {
                free(gSettings.EventConfigServiceOptions.lpPassword);
                gSettings.EventConfigServiceOptions.lpPassword=0;
                gSettings.EventConfigServiceOptions.dwLen=0;
            }
            VERIFY(PX_String(&pxSubNode1, _T("Domain"),    gSettings.EventConfigServiceOptions.strDomain));
            VERIFY(PX_Blob(&pxSubNode1, _T("Security"), gSettings.EventConfigServiceOptions.lpPassword, gSettings.EventConfigServiceOptions.dwLen));
            return true;
        }
    }

    XREventConfigOptions=XREventConfigDefaultOptions;

    return false;
}


In my case, most of the time the parameter "Domain" is an empty string. So storing the empty string and afterwards loading it results in a string with \n three times

Martin

Product: Xtreme Toolkit v 22.1.0, new Projects v 24.0.0
Platform: Windows 10 v 22H2 (64bit)
Language: VC++ 2022
Back to Top
Oleg View Drop Down
Senior Member
Senior Member


Joined: 21 May 2003
Location: United States
Status: Offline
Points: 11234
Post Options Post Options   Thanks (0) Thanks(0)   Quote Oleg Quote  Post ReplyReply Direct Link To This Post Posted: 08 August 2008 at 6:19am
Hi,
 
Please remove px.SetCompactMode(FALSE); line. or don't format XML:
px.SaveToFile(pszPath, FALSE);
Oleg, Support Team
CODEJOCK SOFTWARE SOLUTIONS
Back to Top
mgampi View Drop Down
Senior Member
Senior Member
Avatar

Joined: 14 July 2003
Status: Offline
Points: 1206
Post Options Post Options   Thanks (0) Thanks(0)   Quote mgampi Quote  Post ReplyReply Direct Link To This Post Posted: 10 August 2008 at 11:10am
Hi Oleg;

Shouldn't it also work with non compact mode and/or formatted XML?
Is this a bug of the MSXML implementation?
Martin

Product: Xtreme Toolkit v 22.1.0, new Projects v 24.0.0
Platform: Windows 10 v 22H2 (64bit)
Language: VC++ 2022
Back to Top
Oleg View Drop Down
Senior Member
Senior Member


Joined: 21 May 2003
Location: United States
Status: Offline
Points: 11234
Post Options Post Options   Thanks (0) Thanks(0)   Quote Oleg Quote  Post ReplyReply Direct Link To This Post Posted: 11 August 2008 at 2:11am
Shouldn't
Oleg, Support Team
CODEJOCK SOFTWARE SOLUTIONS
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 12.04
Copyright ©2001-2021 Web Wiz Ltd.

This page was generated in 0.047 seconds.