2010-12-03 14 views
7

Estoy escribiendo una DLL en VC++ y necesito usar un archivo de texto externo. Tengo algo como esto en este momento:Cómo cargar archivos de texto de Recursos en VC++?

ifstream file; 
string line; 

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

Entiendo que puedo tener este archivo en Recursos ¿verdad?

Agregué mi archivo de texto yendo a "ResourceView" -> "Agregar recurso" -> "Importar". Elegí mi archivo de texto y creé un tipo de recurso personalizado.

¿Cómo puedo acceder a este archivo para usarlo de manera similar al código anterior? Tengo Resource.h, pero ¿qué debo hacer con él? ¿Puedo editar el archivo de texto de mis recursos también?

Respuesta

11

Supuestos:

tipo
  • El recurso es "texto" Identificación
  • El recurso es MY_RESOURCE_ID (esto sería una constante desde su resource.h)
  • ha almacenado el hInstance para su EXE o DLL (cualquiera que contenga el recurso) en m_hInstance.

Carga de un recurso en la memoria y obtener un puntero a que se hace de esta manera:

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 
      } 
     } 
    } 
} 

Nota: Usted no tiene que descargar o desbloquear el recurso en vesions de 32 bits o 64 bits de Windows, y si obtienes el recurso otra vez, no perderás memoria; siempre obtienes la misma pieza de memoria.

Para actualizar un recurso, vea Updating Resources in MSDN.

+0

Gracias! Esto es lo que estaba buscando. Estoy usando ATL así que puse '_AtlBaseModule.m_hInst' en el lugar' hInstance' y está funcionando bien. Me pregunto cómo usar este trozo de memoria como un archivo o una secuencia. Si conoce, responda aquí: http://stackoverflow.com/questions/4346240/ –

+0

@ CichyK24 transmitir como en IStream o un tipo diferente de transmisión? –

+0

Oh, como un ifstream; no lo sé, lo siento. –

Cuestiones relacionadas