Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C/C++] Meerdere .RC bestanden en meerdere Projecten

Pagina: 1
Acties:

  • BlackBeltBob
  • Registratie: Oktober 2008
  • Laatst online: 30-11-2024
Hi all,

Ik zit in de volgende situatie: ik heb meerdere projecten. In elk van deze projecten heb ik bijvoorbeeld een Bitmap Resource nodig om in een CBitmap te laden. Uiteraard wil ik geen dubbele code of resources over mijn project heen, dus wilde ik een apart .RC bestand maken en die over meerdere projecten delen.

Nu loop ik tegen het probleem aan dat ik die tweede .RC file niet in mijn bestaande project(en) krijg toegevoegd.


Ik heb in de .RC van het project (bijv: "x.RC") een #include toegevoegd voor het tweede rc bestand ("y.RC"), helemaal onderaan (zoals aangegeven wordt in TN035 van Microsoft).

Bij het compilen krijg ik daarover geen foutmeldingen. Echter, ik kan geen gebruik maken van bijvoorbeeld IDB_BITMAP1 uit "y.RC". Daarnaast geeft hij helemaal geen melding dat hij de resources opnieuw moet compilen.

Weet een van jullie wat hier mis gaat?

Groet,

Bob

"There are no stupid questions, only stupid people."


  • epic007
  • Registratie: Februari 2004
  • Laatst online: 10-11 15:59
Ik heb je probleem niet proberen te reproduceren, maar misschien heb je hier wat aan:
http://msdn.microsoft.com/en-us/library/24b2tcy0(VS.80).aspx
Daar worden alle resources in een apparte DLL gestopt. Dit is met name te gebruiken bij versies in een verschillende taal.

Verder is een .RC bestand een script, de Bitmaps en andere files worden appart opgeslagen en kunnen dus wel door meerdere projecten gebruikt worden.

  • BlackBeltBob
  • Registratie: Oktober 2008
  • Laatst online: 30-11-2024
ik ga het even uitproberen. Alvast bedankt. Mochten er nog anderen zijn met ideeen of andere aanpakken hoor ik dat graag!

Bob

"There are no stupid questions, only stupid people."


  • BlackBeltBob
  • Registratie: Oktober 2008
  • Laatst online: 30-11-2024
Ben ondertussen weer iets verder. Heb een resource DLL gemaakt en met veel vloeken en tieren uitgezocht hoe je de resources van die dll dan kan inlezen. Ik loop echter nu tegen het volgende probleem:

Ik heb via FindResource mijn bitmapje gevonden. De returnwaarde is niet null en als ik die voer aan LoadResource, dan is de HGLOBAL handle die ik als returnwaarde krijg ook niet null. So far so good.

Daarna doe ik:

pMijnBitMap->FromHandle((HBITMAP) handle);

In MSDN staat:

"If a CBitmap object is not already attached to the handle, a temporary CBitmap object is created and attached"

Vandaar dat ik tussen FromHandle en LoadResource nog even het onderstaande doe:

pMijnBitMap->Attach((HBITMAP) handle);

Naar mijn weten zou pMijnBitMap dan attached moeten zijn aan handle, en dus zou er geen tijdelijk CBitmap object moeten worden gegenereerd. Ergens klopt hier iets niet, want ik kan bijvoorbeeld met GetBitMap(BITMAP *b) geen gegevens opvragen. De volledige code is:

C++: ZBitMap
1
2
3
4
5
6
7
  HRSRC hsrc = FindResource(pap->resDll, "#101", RT_BITMAP);
  HGLOBAL handle = NULL;  
  if (hsrc) handle = LoadResource(pap->resDll, hsrc);
  if (handle) pMijnBitMap->Attach((HBITMAP) handle);

  pMijnBitMap->FromHandle((HBITMAP)handle);
  LockResource(handle);


Concreet is mijn vraag of ik op deze manier correct de resource inlees. Ik heb weinig ervaring met Handles enzo. Ik wil de resource inlezen om verderop te kunnen gebruiken. Het moet dus niet verwijderd worden na het afwerken van de huidige message.

Moet de LockResource(handle) anders worden geplaatst? Wie ziet hier mijn fout?

Groeten,

Bob

"There are no stupid questions, only stupid people."


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14-11 23:57

.oisyn

Moderator Devschuur®

Demotivational Speaker

The return type of LoadResource is HGLOBAL for backward compatibility, not because the function returns a handle to a global memory block. Do not pass this handle to the GlobalLock or GlobalFree function. To obtain a pointer to the resource data, call the LockResource function.
Overigens heb je na LockResource() gewoon een pointer naar je data. Je wil eigenlijk gewoon een LoadBitmap() doen, die geeft je direct een HBITMAP terug.

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.


  • BlackBeltBob
  • Registratie: Oktober 2008
  • Laatst online: 30-11-2024
heren Epic007 en .oisyn,

veel dank van mijn kant! Het werkt. Onze gebruikers zullen u dankbaar zijn.

Groeten,

Bob

"There are no stupid questions, only stupid people."

Pagina: 1