2010-12-03 5 views
7

J'écris une DLL dans VC++ et j'ai besoin d'utiliser un fichier texte externe. J'ai quelque chose comme ça en ce moment:Comment charger un fichier texte à partir de ressources dans VC++?

ifstream file; 
string line; 

file.open("C:\\Users\\Me\\Desktop\\textfile.txt"); 
getline(file,line); 
file.close(); 

Je comprends que je peux avoir ce fichier dans les ressources non?

J'ai ajouté mon fichier texte en allant dans "ResourceView" -> "Ajouter une ressource" -> "Importer". J'ai choisi mon fichier texte et créé un type de ressource personnalisé.

Comment puis-je accéder à ce fichier pour l'utiliser de la même manière que le code ci-dessus? J'ai Resource.h mais que dois-je faire avec? Puis-je modifier mon fichier de texte de ressource aussi?

Répondre

11

Hypothèses:

  • Le type de ressource est "TEXT"
  • L'ID de ressource est MY_RESOURCE_ID (ce serait une constante de votre resource.h)
  • Vous avez enregistré le hInstance pour votre EXE ou DLL (celui qui contient la ressource) dans m_hInstance.

Chargement d'une ressource en mémoire et obtenir un pointeur vers elle se fait comme ceci:

HRSRC hResource = FindResource(m_hInstance, MAKEINTRESOURCE(MY_RESOURCE_ID), L"TEXT"); 

if (hResource) 
{ 
    HGLOBAL hLoadedResource = LoadResource(m_hInstance, hResource); 

    if (hLoadedResource) 
    { 
     LPVOID pLockedResource = LockResource(hLoadedResource); 

     if (pLockedResource) 
     { 
      DWORD dwResourceSize = SizeofResource(m_hInstance, hResource); 

      if (0 != dwResourceSize) 
      { 
       // Use pLockedResource and dwResourceSize however you want 
      } 
     } 
    } 
} 

Note: Vous ne devez pas décharger ou déverrouiller la ressource sur 32 bits ou 64 bits vesions de Windows, et si vous obtenez à nouveau la ressource, vous ne fuirez pas la mémoire; vous obtenez toujours le même morceau de mémoire.

Pour mettre à jour une ressource, voir Updating Resources in MSDN.

+0

Merci! C'est ce que je cherchais. J'utilise ATL donc je mets '_AtlBaseModule.m_hInst' dans l'emplacement' hInstance' et ça fonctionne bien. Je me demande comment utiliser ce morceau de mémoire comme un fichier ou un flux. Si vous connaissez s'il vous plaît répondre ici: http://stackoverflow.com/questions/4346240/ –

+0

@ CichyK24 flux comme dans IStream ou un autre type de flux? –

+0

Oh, comme un ifstream; Je ne sais pas ça, désolé. –

Questions connexes