[VC++] Resource naar CString ?

Pagina: 1
Acties:

  • Da_Hardest
  • Registratie: November 2002
  • Laatst online: 09-08-2025

Da_Hardest

-= BrainB0ne =-

Topicstarter
Hallo,

ik hang weer even vast tijdens het uitvoeren van mijn afstudeeropdracht..

Het probleem is het volgende..

Ik wil een resource file, een XML file in dit geval inlezen naar een string om vervolgens text-replacements te kunnen uitvoeren... de XML file is dus een template.

Ik weet alleen niet hoe ik een resource ingelezen krijg in een CString :(

Ik heb de volgende methode steeds gebruikt in mijn programma:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void CPSCView::OnXmlMetadata() 
{
    // TODO: Add your command handler code here
    CString TheFile = ""; //<=== hier zou dus de resource file moeten komen
    CString TempFile = m_pWizData->m_strWorkPath + "\\meta.xml"; 
//m_strWorkPath is het pad waar de bewerkte XML opgeslagen wordt.
    CString FileText = "";
    char c;

    FILE* pSearchFile;
    FILE* pTempFile;

    UpdateData(TRUE);

    if(pSearchFile = fopen(TheFile, "rb"))
    {
        if(pTempFile = fopen(TempFile, "wb"))
        {
            while((c=getc(pSearchFile)) != EOF)
            {
                FileText += (CString) c;
            }
        }   
        
        FileText.Replace("--TEMPLATE|TITLE--", m_pWizData->m_strTitle); 
// dit is de replacement die ik uitvoer!

        fputs(FileText, pTempFile);
        fclose(pTempFile);
    }   
    fclose(pSearchFile);
    
}


een stuk uit de XML template (resource) file ziet er zo uit:
XML:
1
2
3
4
5
6
7
8
<?xml version="1.0" ?> 
 <lom xmlns="http://www.imsglobal.org/xsd/imsmd_rootv1p2p1">
 <general>
 <title>
  <langstring>--TEMPLATE|TITLE--</langstring> 
  </title>
 </general>
</lom>


oja verder nog ... ik heb de resource op de volgende manier gedefinieerd..

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// PSC.RC2 - resources Microsoft Visual C++ does not edit directly
//

#ifdef APSTUDIO_INVOKED
    #error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...

#include "SoundFileDlg.rc" 

SCOMETADATA.XML       HTML DISCARDABLE "res\\scometadata.xml"



/////////////////////////////////////////////////////////////////////////////

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

FindResource (), LoadResource (), LockResource ()

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Da_Hardest
  • Registratie: November 2002
  • Laatst online: 09-08-2025

Da_Hardest

-= BrainB0ne =-

Topicstarter
.oisyn schreef op 13 april 2004 @ 14:51:
FindResource (), LoadResource (), LockResource ()
mag het iets duidelijker? :/

die functies heb ik ook al gevonden in msdn voordat ik dit stuk gepost heb, maar krijg nog steeds niet het gewenste resultaat ;(

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

mag er iets meer moeite van jou kant? :/
die functies heb ik ook al gevonden in msdn voordat ik dit stuk gepost heb, maar krijg nog steeds niet het gewenste resultaat ;(
Zeg dat dan! Het komt een stuk beter over als je gewoon iets zegt als: ik heb die en die functie gevonden, ik denk dat het daarmee moet, maar het is me nog onduidelijk hoe ik ze moet gebruiken, omdat ...
P&W FAQ - De "quickstart"
We leveren op GoT geen kant en klare oplossingen, daar leer jij tenslotte niets van.


Goed, hoe heb je die file geinclude als resource? Gewoon raw data? Ik neem aan dat je een resource id hebt. Dus wat is nou het probleem met die 3 functies? Met FindResource vind je een resource in een module, met LoadResource laad je de resource, en met LockResource verkrijg je een pointer naar de data. Als je die pointer hebt kun je die data dus kopieren naar een string. Wat is het probleem precies?

[ Voor 4% gewijzigd door .oisyn op 13-04-2004 17:29 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Da_Hardest
  • Registratie: November 2002
  • Laatst online: 09-08-2025

Da_Hardest

-= BrainB0ne =-

Topicstarter
nouja, ik heb de resource ge-include in de .rc2 file dat is toch goed?

C++:
1
2
3
4
5
6
7
8
9
10
///////////////////////////////////////////////////////////////////////////// 
// Add manually edited resources here... 

#include "SoundFileDlg.rc"  

SCOMETADATA.XML          HTML DISCARDABLE "res\\scometadata.xml" 



/////////////////////////////////////////////////////////////////////////////


ik heb geen idee hoe ik dus met die functies moet omgaan..

ik ben iets dergelijks als dit aant proberen :?

C++:
1
2
3
HRSRC hSrc = FindResource(NULL,"SCOMETADATA.XML", RT_RCDATA);
HGLOBAL glRes = LoadResource(NULL,hSrc);
LPVOID lpLock = LockResource(hSrc);


ben ik nu op de goede weg??

is dit wel duidelijk? ik weet anders niet hoe ik het moet uitleggen..

  • Da_Hardest
  • Registratie: November 2002
  • Laatst online: 09-08-2025

Da_Hardest

-= BrainB0ne =-

Topicstarter
het probleem is opgelost, na wat lang zoeken en uitproberen is het volgende eruitgekomen.....

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void CPSCView::OnXmlMetadata() 
{
    // TODO: Add your command handler code here
    UpdateData(TRUE);

    TCHAR sResName[5]  = _T("#158");
    TCHAR sResType[13] = _T("METADATA");

    HRSRC hres = FindResource(NULL,sResName, sResType);

    if (hres == 0)
    { 
        MessageBox("An Error Occurred.\n Could Not Locate Resource File.", "Error");
    }

    HGLOBAL    hbytes = LoadResource(NULL, hres);
    LPVOID pdata = LockResource(hbytes);

    LPBYTE sData = (LPBYTE)pdata;
    LPTSTR sXml = (LPTSTR)sData;


    CString TheFile  = sXml;
    CString TempFile = m_pWizData->m_strWorkPath + "\\~metadata.xml";
    CString FileText = "";

    FILE* pTempFile;

    if(pTempFile = fopen(TempFile, "wb"))
    {
        FileText = TheFile;
    }   
        
    FileText.Replace("--TEMPLATE|TITLE--", m_pWizData->m_strTitle);
    FileText.Replace("--TEMPLATE|SUBJECT--", m_pWizData->m_strSubject);
    FileText.Replace("--TEMPLATE|FILENAME--", m_pWizData->m_strTemporaryFile);
                
    fputs(FileText, pTempFile);
    fclose(pTempFile);
}


dit werkt goed voor mijn toepassing :D :D :D zo nu kan ik eindelijk weer verder... tot een volgende keer :P

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

choeso jei :Y)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1